svx/source/tbxctrls/tbcontrl.cxx | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-)
New commits: commit c2a77967cf16a9465f86b5aed62497141fbef535 Author: Justin Luth <jl...@mail.com> AuthorDate: Fri Jul 7 11:34:07 2023 -0400 Commit: Justin Luth <jl...@mail.com> CommitDate: Wed Jul 12 21:05:45 2023 +0200 tdf#125504 SvxStyleBox: don't use disposed DispatchProvider .uno:StyleApply in the notebookbar was doing nothing because the view switching from print preview caused the saved XDispatchProvider to become disposed. Thanks to Maxim, my patch is completely re-written. Change-Id: I655c393def75f966a97ac7a04395aee19befd132 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/154196 Tested-by: Jenkins Reviewed-by: Justin Luth <jl...@mail.com> diff --git a/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx index 0c16e26dbb06..0d862f8964f8 100644 --- a/svx/source/tbxctrls/tbcontrl.cxx +++ b/svx/source/tbxctrls/tbcontrl.cxx @@ -142,7 +142,6 @@ class SvxStyleBox_Base { public: SvxStyleBox_Base(std::unique_ptr<weld::ComboBox> xWidget, OUString rCommand, SfxStyleFamily eFamily, - const Reference<XDispatchProvider>& rDispatchProvider, const Reference<XFrame>& _xFrame, OUString aClearFormatKey, OUString aMoreKey, bool bInSpecialMode, SvxStyleToolBoxControl& rCtrl); @@ -237,7 +236,6 @@ protected: int m_nMaxUserDrawFontWidth; int m_nLastItemWithMenu; bool bRelease; - Reference< XDispatchProvider > m_xDispatchProvider; Reference< XFrame > m_xFrame; OUString m_aCommand; OUString aClearFormatKey; @@ -257,7 +255,7 @@ class SvxStyleBox_Impl final : public InterimItemWindow , public SvxStyleBox_Base { public: - SvxStyleBox_Impl(vcl::Window* pParent, const OUString& rCommand, SfxStyleFamily eFamily, const Reference< XDispatchProvider >& rDispatchProvider, + SvxStyleBox_Impl(vcl::Window* pParent, const OUString& rCommand, SfxStyleFamily eFamily, const Reference< XFrame >& _xFrame,const OUString& rClearFormatKey, const OUString& rMoreKey, bool bInSpecialMode, SvxStyleToolBoxControl& rCtrl); virtual ~SvxStyleBox_Impl() override @@ -864,7 +862,6 @@ class SfxStyleControllerItem_Impl : public SfxStatusListener SvxStyleBox_Base::SvxStyleBox_Base(std::unique_ptr<weld::ComboBox> xWidget, OUString aCommand, SfxStyleFamily eFamily, - const Reference< XDispatchProvider >& rDispatchProvider, const Reference< XFrame >& _xFrame, OUString _aClearFormatKey, OUString _aMoreKey, @@ -877,7 +874,6 @@ SvxStyleBox_Base::SvxStyleBox_Base(std::unique_ptr<weld::ComboBox> xWidget, , m_nMaxUserDrawFontWidth(0) , m_nLastItemWithMenu(-1) , bRelease( true ) - , m_xDispatchProvider( rDispatchProvider ) , m_xFrame(_xFrame) , m_aCommand(std::move( aCommand )) , aClearFormatKey(std::move( _aClearFormatKey )) @@ -909,14 +905,13 @@ IMPL_LINK(SvxStyleBox_Base, CustomGetSizeHdl, OutputDevice&, rArg, Size) SvxStyleBox_Impl::SvxStyleBox_Impl(vcl::Window* pParent, const OUString& rCommand, SfxStyleFamily eFamily, - const Reference< XDispatchProvider >& rDispatchProvider, const Reference< XFrame >& _xFrame, const OUString& rClearFormatKey, const OUString& rMoreKey, bool bInSpec, SvxStyleToolBoxControl& rCtrl) : InterimItemWindow(pParent, "svx/ui/applystylebox.ui", "ApplyStyleBox") - , SvxStyleBox_Base(m_xBuilder->weld_combo_box("applystyle"), rCommand, eFamily, - rDispatchProvider, _xFrame, rClearFormatKey, rMoreKey, bInSpec, rCtrl) + , SvxStyleBox_Base(m_xBuilder->weld_combo_box("applystyle"), rCommand, eFamily, _xFrame, + rClearFormatKey, rMoreKey, bInSpec, rCtrl) { InitControlBase(m_xWidget.get()); @@ -947,15 +942,14 @@ IMPL_LINK(SvxStyleBox_Base, MenuSelectHdl, const OUString&, rMenuIdent, void) comphelper::makePropertyValue("Family", sal_Int16( eStyleFamily )) }; + const Reference<XDispatchProvider> xProvider(m_xFrame, UNO_QUERY); if (rMenuIdent == "update") { - SfxToolBoxControl::Dispatch( m_xDispatchProvider, - ".uno:StyleUpdateByExample", aArgs ); + SfxToolBoxControl::Dispatch(xProvider, ".uno:StyleUpdateByExample", aArgs); } else if (rMenuIdent == "edit") { - SfxToolBoxControl::Dispatch( m_xDispatchProvider, - ".uno:EditStyle", aArgs ); + SfxToolBoxControl::Dispatch(xProvider, ".uno:EditStyle", aArgs); } } @@ -995,8 +989,8 @@ void SvxStyleBox_Base::Select(bool bNonTravelSelect) bClear = true; //not only apply default style but also call 'ClearFormatting' Sequence< PropertyValue > aEmptyVals; - SfxToolBoxControl::Dispatch( m_xDispatchProvider, ".uno:ResetAttributes", - aEmptyVals); + const Reference<XDispatchProvider> xProvider(m_xFrame, UNO_QUERY); + SfxToolBoxControl::Dispatch(xProvider, ".uno:ResetAttributes", aEmptyVals); } else if (aSearchEntry == aMoreKey && m_xWidget->get_active() == (m_xWidget->get_count() - 1)) { @@ -1048,15 +1042,17 @@ void SvxStyleBox_Base::Select(bool bNonTravelSelect) pArgs[0].Value <<= aSearchEntry; pArgs[1].Name = "Family"; pArgs[1].Value <<= sal_Int16( eStyleFamily ); + + const Reference<XDispatchProvider> xProvider(m_xFrame, UNO_QUERY); if( bCreateNew ) { pArgs[0].Name = "Param"; - SfxToolBoxControl::Dispatch( m_xDispatchProvider, ".uno:StyleNewByExample", aArgs); + SfxToolBoxControl::Dispatch(xProvider, ".uno:StyleNewByExample", aArgs); } else { pArgs[0].Name = "Template"; - SfxToolBoxControl::Dispatch( m_xDispatchProvider, m_aCommand, aArgs ); + SfxToolBoxControl::Dispatch(xProvider, m_aCommand, aArgs); } } @@ -3348,7 +3344,6 @@ css::uno::Reference<css::awt::XWindow> SvxStyleToolBoxControl::createItemWindow( pImpl->m_xWeldBox.reset(new SvxStyleBox_Base(std::move(xWidget), ".uno:StyleApply", SfxStyleFamily::Para, - Reference< XDispatchProvider >( m_xFrame->getController(), UNO_QUERY ), m_xFrame, pImpl->aClearForm, pImpl->aMore, @@ -3365,7 +3360,6 @@ css::uno::Reference<css::awt::XWindow> SvxStyleToolBoxControl::createItemWindow( pImpl->m_xVclBox = VclPtr<SvxStyleBox_Impl>::Create(pParent, ".uno:StyleApply", SfxStyleFamily::Para, - Reference< XDispatchProvider >( m_xFrame->getController(), UNO_QUERY ), m_xFrame, pImpl->aClearForm, pImpl->aMore,