[Libreoffice-commits] core.git: dbaccess/source extensions/source framework/source sdext/source svx/source

Henry Castro (via logerrit) logerrit at kemper.freedesktop.org
Thu Apr 1 12:07:59 UTC 2021


 dbaccess/source/ui/browser/unodatbr.cxx               |    9 +++++----
 extensions/source/bibliography/framectr.cxx           |    5 +++++
 framework/source/fwe/helper/titlehelper.cxx           |    4 ++++
 framework/source/helper/persistentwindowstate.cxx     |    4 ++++
 framework/source/helper/tagwindowasmodified.cxx       |    3 +++
 framework/source/helper/titlebarupdate.cxx            |    4 ++++
 framework/source/uielement/resourcemenucontroller.cxx |    6 ++++++
 sdext/source/presenter/PresenterController.cxx        |   12 ++++++------
 svx/source/form/datanavi.cxx                          |    7 ++++---
 9 files changed, 41 insertions(+), 13 deletions(-)

New commits:
commit a06f8147fe34c19da168de5d7b26615981cf055e
Author:     Henry Castro <hcastro at collabora.com>
AuthorDate: Tue Mar 30 15:00:49 2021 -0400
Commit:     Henry Castro <hcastro at collabora.com>
CommitDate: Thu Apr 1 14:07:10 2021 +0200

    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 at collabora.com>

diff --git a/dbaccess/source/ui/browser/unodatbr.cxx b/dbaccess/source/ui/browser/unodatbr.cxx
index be857da0de9c..db5bec8c6428 100644
--- a/dbaccess/source/ui/browser/unodatbr.cxx
+++ b/dbaccess/source/ui/browser/unodatbr.cxx
@@ -248,6 +248,11 @@ void SAL_CALL SbaTableQueryBrowser::disposing()
     // remove ourself as status listener
     implRemoveStatusListeners();
 
+    // check out from all the objects we are listening
+    // the frame
+    if (m_xCurrentFrameParent.is())
+        m_xCurrentFrameParent->removeFrameActionListener(static_cast<css::frame::XFrameActionListener*>(this));
+
     // remove the container listener from the database context
     try
     {
@@ -259,10 +264,6 @@ void SAL_CALL SbaTableQueryBrowser::disposing()
         DBG_UNHANDLED_EXCEPTION("dbaccess");
     }
 
-    // check out from all the objects we are listening
-    // the frame
-    if (m_xCurrentFrameParent.is())
-        m_xCurrentFrameParent->removeFrameActionListener(static_cast<css::frame::XFrameActionListener*>(this));
     SbaXDataBrowserController::disposing();
 }
 
diff --git a/extensions/source/bibliography/framectr.cxx b/extensions/source/bibliography/framectr.cxx
index 7b0a5dd9eaba..e83580689435 100644
--- a/extensions/source/bibliography/framectr.cxx
+++ b/extensions/source/bibliography/framectr.cxx
@@ -221,6 +221,11 @@ void BibFrameController_Impl::dispose()
 {
     m_bDisposing = true;
     lang::EventObject aObject;
+    uno::Reference< XFrame > xFrame = getFrame();
+
+    if (xFrame.is())
+        xFrame->removeFrameActionListener( m_xImpl );
+
     aObject.Source = static_cast<XController*>(this);
     m_xImpl->aLC.disposeAndClear(aObject);
     m_xDatMan.clear();
diff --git a/framework/source/fwe/helper/titlehelper.cxx b/framework/source/fwe/helper/titlehelper.cxx
index 5936d9133ff3..24d1eb3bf898 100644
--- a/framework/source/fwe/helper/titlehelper.cxx
+++ b/framework/source/fwe/helper/titlehelper.cxx
@@ -242,6 +242,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 d2e78df8d98c..8121ad025a1c 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 d62be2a63192..0ca094c6d5b0 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 26198c0cf5f6..81bacc75ae70 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 );
+
             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 );
+
         m_xMenuBarManager->dispose();
         m_xMenuBarManager.clear();
     }
diff --git a/sdext/source/presenter/PresenterController.cxx b/sdext/source/presenter/PresenterController.cxx
index e1ddf110c895..7d4ac91b710e 100644
--- a/sdext/source/presenter/PresenterController.cxx
+++ b/sdext/source/presenter/PresenterController.cxx
@@ -204,12 +204,6 @@ void PresenterController::disposing()
     if (mxConfigurationController.is())
         mxConfigurationController->removeConfigurationChangeListener(this);
 
-    Reference<XComponent> xWindowManagerComponent (
-        static_cast<XWeak*>(mpWindowManager.get()), UNO_QUERY);
-    mpWindowManager = nullptr;
-    if (xWindowManagerComponent.is())
-        xWindowManagerComponent->dispose();
-
     if (mxController.is())
     {
         Reference<frame::XFrame> xFrame (mxController->getFrame());
@@ -218,6 +212,12 @@ void PresenterController::disposing()
         mxController = nullptr;
     }
 
+    Reference<XComponent> xWindowManagerComponent (
+        static_cast<XWeak*>(mpWindowManager.get()), UNO_QUERY);
+    mpWindowManager = nullptr;
+    if (xWindowManagerComponent.is())
+        xWindowManagerComponent->dispose();
+
     mxComponentContext = nullptr;
     mxConfigurationController = nullptr;
     mxSlideShowController = nullptr;
diff --git a/svx/source/form/datanavi.cxx b/svx/source/form/datanavi.cxx
index 4fe1e926d186..a9f4c02b1ab5 100644
--- a/svx/source/form/datanavi.cxx
+++ b/svx/source/form/datanavi.cxx
@@ -1307,6 +1307,10 @@ namespace svxform
 
     DataNavigatorWindow::~DataNavigatorWindow()
     {
+        Reference< XFrameActionListener > xListener(
+            static_cast< XFrameActionListener* >( m_xDataListener.get() ), UNO_QUERY );
+        m_xFrame->removeFrameActionListener( xListener );
+
         SvtViewOptions aViewOpt( EViewType::TabDialog, CFGNAME_DATANAVIGATOR );
         aViewOpt.SetPageID(m_xTabCtrl->get_current_page_ident());
         aViewOpt.SetUserItem(CFGNAME_SHOWDETAILS, Any(m_bShowDetails));
@@ -1320,9 +1324,6 @@ namespace svxform
             m_aPageList[i].reset();
         m_aPageList.clear();
 
-        Reference< XFrameActionListener > xListener(
-            static_cast< XFrameActionListener* >( m_xDataListener.get() ), UNO_QUERY );
-        m_xFrame->removeFrameActionListener( xListener );
         RemoveBroadcaster();
         m_xDataListener.clear();
     }


More information about the Libreoffice-commits mailing list