summaryrefslogtreecommitdiff
path: root/framework
diff options
context:
space:
mode:
authorHenry Castro <hcastro@collabora.com>2021-03-30 15:00:49 -0400
committerAndras Timar <andras.timar@collabora.com>2021-05-16 23:47:24 +0200
commit4e7e2aa66cac4ae3598e861d2ca2d13d5b749311 (patch)
tree2aac16236d5ddadf31eab4358ff068df7d49c3f4 /framework
parentcbbbb70e9b9655afa8a66ab5c46ec493f1e06716 (diff)
lok: remove frame action listener when disposing
In order to prevent that the frame action listener holds the object reference count when removed, ensure they are removed when disposing the object. Change-Id: If83574e31230d9c683adaf36af36485650fd2c50 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113389 Tested-by: Jenkins Reviewed-by: Henry Castro <hcastro@collabora.com>
Diffstat (limited to 'framework')
-rw-r--r--framework/source/fwe/helper/titlehelper.cxx4
-rw-r--r--framework/source/helper/persistentwindowstate.cxx4
-rw-r--r--framework/source/helper/tagwindowasmodified.cxx3
-rw-r--r--framework/source/helper/titlebarupdate.cxx4
-rw-r--r--framework/source/uielement/resourcemenucontroller.cxx6
5 files changed, 21 insertions, 0 deletions
diff --git a/framework/source/fwe/helper/titlehelper.cxx b/framework/source/fwe/helper/titlehelper.cxx
index fba89ae42bfc..6b31e61fb8d0 100644
--- a/framework/source/fwe/helper/titlehelper.cxx
+++ b/framework/source/fwe/helper/titlehelper.cxx
@@ -243,6 +243,10 @@ void SAL_CALL TitleHelper::disposing(const css::lang::EventObject& aEvent)
if ( ! xOwner.is ())
return;
+ css::uno::Reference< css::frame::XFrame > xFrame(xOwner, css::uno::UNO_QUERY);
+ if (xFrame.is())
+ xFrame->removeFrameActionListener(this);
+
if (xOwner != aEvent.Source)
return;
diff --git a/framework/source/helper/persistentwindowstate.cxx b/framework/source/helper/persistentwindowstate.cxx
index 29ad01c1d0fc..04cfb7ddcbbe 100644
--- a/framework/source/helper/persistentwindowstate.cxx
+++ b/framework/source/helper/persistentwindowstate.cxx
@@ -134,6 +134,10 @@ void SAL_CALL PersistentWindowState::frameAction(const css::frame::FrameActionEv
void SAL_CALL PersistentWindowState::disposing(const css::lang::EventObject&)
{
+ css::uno::Reference< css::frame::XFrame > xFrame(m_xFrame.get(), css::uno::UNO_QUERY);
+ if (xFrame.is())
+ xFrame->removeFrameActionListener(this);
+
// nothing todo here - because we hold the frame as weak reference only
}
diff --git a/framework/source/helper/tagwindowasmodified.cxx b/framework/source/helper/tagwindowasmodified.cxx
index f17594cee477..93f2ace64c99 100644
--- a/framework/source/helper/tagwindowasmodified.cxx
+++ b/framework/source/helper/tagwindowasmodified.cxx
@@ -123,6 +123,9 @@ void SAL_CALL TagWindowAsModified::disposing(const css::lang::EventObject& aEven
SolarMutexGuard g;
css::uno::Reference< css::frame::XFrame > xFrame(m_xFrame.get(), css::uno::UNO_QUERY);
+ if (xFrame.is())
+ xFrame->addFrameActionListener(this);
+
if (
(xFrame.is () ) &&
(aEvent.Source == xFrame)
diff --git a/framework/source/helper/titlebarupdate.cxx b/framework/source/helper/titlebarupdate.cxx
index eed6bed3699c..f302c12cf0ae 100644
--- a/framework/source/helper/titlebarupdate.cxx
+++ b/framework/source/helper/titlebarupdate.cxx
@@ -103,6 +103,10 @@ void SAL_CALL TitleBarUpdate::titleChanged(const css::frame::TitleChangedEvent&
void SAL_CALL TitleBarUpdate::disposing(const css::lang::EventObject&)
{
+ css::uno::Reference< css::frame::XFrame > xFrame(m_xFrame.get(), css::uno::UNO_QUERY);
+ if (xFrame.is())
+ xFrame->removeFrameActionListener(this);
+
// nothing todo here - because we hold the frame as weak reference only
}
diff --git a/framework/source/uielement/resourcemenucontroller.cxx b/framework/source/uielement/resourcemenucontroller.cxx
index 1094874bbcce..9537f8859736 100644
--- a/framework/source/uielement/resourcemenucontroller.cxx
+++ b/framework/source/uielement/resourcemenucontroller.cxx
@@ -317,6 +317,9 @@ void ResourceMenuController::disposing( const css::lang::EventObject& rEvent )
{
if ( m_xMenuBarManager.is() )
{
+ if (m_xFrame.is())
+ m_xFrame->removeFrameActionListener( m_xMenuBarManager.get() );
+
m_xMenuBarManager->dispose();
m_xMenuBarManager.clear();
}
@@ -340,6 +343,9 @@ void ResourceMenuController::disposing()
m_xDispatchProvider.clear();
if ( m_xMenuBarManager.is() )
{
+ if (m_xFrame.is())
+ m_xFrame->removeFrameActionListener( m_xMenuBarManager.get() );
+
m_xMenuBarManager->dispose();
m_xMenuBarManager.clear();
}