diff options
author | Henry Castro <hcastro@collabora.com> | 2021-03-30 15:00:49 -0400 |
---|---|---|
committer | Andras Timar <andras.timar@collabora.com> | 2021-05-16 23:47:24 +0200 |
commit | 4e7e2aa66cac4ae3598e861d2ca2d13d5b749311 (patch) | |
tree | 2aac16236d5ddadf31eab4358ff068df7d49c3f4 /framework | |
parent | cbbbb70e9b9655afa8a66ab5c46ec493f1e06716 (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.cxx | 4 | ||||
-rw-r--r-- | framework/source/helper/persistentwindowstate.cxx | 4 | ||||
-rw-r--r-- | framework/source/helper/tagwindowasmodified.cxx | 3 | ||||
-rw-r--r-- | framework/source/helper/titlebarupdate.cxx | 4 | ||||
-rw-r--r-- | framework/source/uielement/resourcemenucontroller.cxx | 6 |
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(); } |