From e34ec3e196b3265ea640e1730c7d42dd6182e65f Mon Sep 17 00:00:00 2001 From: Szymon Kłos Date: Thu, 15 Jul 2021 10:35:24 +0200 Subject: Don't crash on SidebarController dispose when app is closing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When app is closing it is possible SfxGetpApp() will return null. So GetCurrentTheme() cannot return reference to correct theme. Remember which theme has registered SidebarController to unregister when disposing. Change-Id: If223233f621601f445472b0413a56e9c51e59673 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/118970 Tested-by: Jenkins CollaboraOffice Reviewed-by: Pranam Lashkari Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120630 Tested-by: Jenkins Reviewed-by: Szymon Kłos --- sfx2/source/sidebar/SidebarController.cxx | 10 ++++++---- sfx2/source/sidebar/Theme.cxx | 6 +++++- 2 files changed, 11 insertions(+), 5 deletions(-) (limited to 'sfx2') diff --git a/sfx2/source/sidebar/SidebarController.cxx b/sfx2/source/sidebar/SidebarController.cxx index 803d1c10a739..c03b2a96acdb 100644 --- a/sfx2/source/sidebar/SidebarController.cxx +++ b/sfx2/source/sidebar/SidebarController.cxx @@ -157,7 +157,8 @@ rtl::Reference SidebarController::create(SidebarDockingWindow instance->mpParentWindow->AddEventListener(LINK(instance.get(), SidebarController, WindowEventHandler)); // Listen for theme property changes. - Theme::GetPropertySet()->addPropertyChangeListener( + instance->mxThemePropertySet = Theme::GetPropertySet(); + instance->mxThemePropertySet->addPropertyChangeListener( "", static_cast(instance.get())); @@ -312,9 +313,10 @@ void SAL_CALL SidebarController::disposing() if (mxReadOnlyModeDispatch.is()) mxReadOnlyModeDispatch->removeStatusListener(this, Tools::GetURL(gsReadOnlyCommandName)); - Theme::GetPropertySet()->removePropertyChangeListener( - "", - static_cast(this)); + if (mxThemePropertySet.is()) + mxThemePropertySet->removePropertyChangeListener( + "", + static_cast(this)); if (mpParentWindow != nullptr) { diff --git a/sfx2/source/sidebar/Theme.cxx b/sfx2/source/sidebar/Theme.cxx index cd4ce36bd658..6d6fe7bc517f 100644 --- a/sfx2/source/sidebar/Theme.cxx +++ b/sfx2/source/sidebar/Theme.cxx @@ -32,6 +32,7 @@ namespace sfx2::sidebar { Theme& Theme::GetCurrentTheme() { + OSL_ASSERT(SfxGetpApp()); return SfxGetpApp()->GetSidebarTheme(); } @@ -177,7 +178,10 @@ void SAL_CALL Theme::disposing() Reference Theme::GetPropertySet() { - return Reference(static_cast(&GetCurrentTheme()), UNO_QUERY); + if (SfxGetpApp()) + return Reference(static_cast(&GetCurrentTheme()), UNO_QUERY); + else + return Reference(); } Reference SAL_CALL Theme::getPropertySetInfo() -- cgit