summaryrefslogtreecommitdiff
path: root/sfx2
diff options
context:
space:
mode:
authorSzymon Kłos <szymon.klos@collabora.com>2021-07-15 10:35:24 +0200
committerPranam Lashkari <lpranam@collabora.com>2021-07-16 11:26:25 +0200
commita2e2994a634cd78df851f37798a41061e2540d22 (patch)
tree180dac8a2ce884c31372d37a4bb22af7509fa2f1 /sfx2
parent04c05b67f0dbc2437901b5a5be7ac4d5efdeeaa4 (diff)
Don't crash on SidebarController dispose when app is closing
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 <jenkinscollaboraoffice@gmail.com> Reviewed-by: Pranam Lashkari <lpranam@collabora.com>
Diffstat (limited to 'sfx2')
-rw-r--r--sfx2/source/sidebar/SidebarController.cxx10
-rw-r--r--sfx2/source/sidebar/Theme.cxx6
2 files changed, 11 insertions, 5 deletions
diff --git a/sfx2/source/sidebar/SidebarController.cxx b/sfx2/source/sidebar/SidebarController.cxx
index 64dbe4343b14..266a69f5dcbe 100644
--- a/sfx2/source/sidebar/SidebarController.cxx
+++ b/sfx2/source/sidebar/SidebarController.cxx
@@ -170,7 +170,8 @@ rtl::Reference<SidebarController> 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<css::beans::XPropertyChangeListener*>(instance.get()));
@@ -305,9 +306,10 @@ void SAL_CALL SidebarController::disposing()
mpParentWindow = nullptr;
}
- Theme::GetPropertySet()->removePropertyChangeListener(
- "",
- static_cast<css::beans::XPropertyChangeListener*>(this));
+ if (mxThemePropertySet.is())
+ mxThemePropertySet->removePropertyChangeListener(
+ "",
+ static_cast<css::beans::XPropertyChangeListener*>(this));
maContextChangeUpdate.CancelRequest();
}
diff --git a/sfx2/source/sidebar/Theme.cxx b/sfx2/source/sidebar/Theme.cxx
index dbbcabeadd55..b3a35c078011 100644
--- a/sfx2/source/sidebar/Theme.cxx
+++ b/sfx2/source/sidebar/Theme.cxx
@@ -34,6 +34,7 @@ namespace sfx2::sidebar {
Theme& Theme::GetCurrentTheme()
{
+ OSL_ASSERT(SfxGetpApp());
return SfxGetpApp()->GetSidebarTheme();
}
@@ -198,7 +199,10 @@ void SAL_CALL Theme::disposing()
Reference<beans::XPropertySet> Theme::GetPropertySet()
{
- return Reference<beans::XPropertySet>(static_cast<XWeak*>(&GetCurrentTheme()), UNO_QUERY);
+ if (SfxGetpApp())
+ return Reference<beans::XPropertySet>(static_cast<XWeak*>(&GetCurrentTheme()), UNO_QUERY);
+ else
+ return Reference<beans::XPropertySet>();
}
Reference<beans::XPropertySetInfo> SAL_CALL Theme::getPropertySetInfo()