sd/source/ui/animations/SlideTransitionPane.cxx            |    7 +++++--
 sd/source/ui/controller/SlideTransitionsToolBoxControl.cxx |    1 -
 sd/source/ui/controller/SlideTransitionsToolBoxControl.hxx |    1 -
 sd/source/ui/inc/SlideTransitionPane.hxx                   |    2 ++
 4 files changed, 7 insertions(+), 4 deletions(-)

New commits:
commit 4ae71d565138f5343487c9d0d8736734c1b5d2b4
Author:     Szymon Kłos <[email protected]>
AuthorDate: Thu Aug 7 05:07:09 2025 +0000
Commit:     Szymon Kłos <[email protected]>
CommitDate: Mon Dec 29 07:35:26 2025 +0100

    notebookbar: slide transition pane disposing
    
    Followup for commit 8e59e9b4fa916e702bb54b963e2cfd75cce1c0e9
    notebookbar: move slide transition pane
    
    Fixes case:
    - open 2 views of Impress LOK
    - close one view
    
    Result: assertion
    
      7  0x000073fd447f1769 in 
std::operator==<sd::tools::EventMultiplexer>(std::shared_ptr<sd::tools::EventMultiplexer>
 const&, decltype(nullptr)) (__a=...)
        at 
/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/shared_ptr.h:561
      8  0x000073fd447ee1ca in sd::ViewShellBase::GetEventMultiplexer 
(this=0x346a41b0)
        at /media/dev/libreoffice/sd/source/ui/view/ViewShellBase.cxx:940
      9  0x000073fd442c202e in sd::SlideTransitionPane::removeListener 
(this=0x3526f8f0)
        at 
/media/dev/libreoffice/sd/source/ui/animations/SlideTransitionPane.cxx:930
      10 0x000073fd442c1d1b in sd::SlideTransitionPane::~SlideTransitionPane 
(this=0x3526f8f0)
        at 
/media/dev/libreoffice/sd/source/ui/animations/SlideTransitionPane.cxx:455
    
    Change-Id: I67b3eb8fa9508470d854790ae3c740b0909e1654
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/189034
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/196223
    Tested-by: Jenkins
    Reviewed-by: Szymon Kłos <[email protected]>

diff --git a/sd/source/ui/animations/SlideTransitionPane.cxx 
b/sd/source/ui/animations/SlideTransitionPane.cxx
index c633f6a5b875..39d2f7278313 100644
--- a/sd/source/ui/animations/SlideTransitionPane.cxx
+++ b/sd/source/ui/animations/SlideTransitionPane.cxx
@@ -924,14 +924,17 @@ void SlideTransitionPane::playCurrentEffect()
 
 void SlideTransitionPane::addListener()
 {
+    if (!mpEventMultiplexer)
+        mpEventMultiplexer = mrBase.GetEventMultiplexer();
+
     Link<sdtools::EventMultiplexerEvent&,void> aLink( 
LINK(this,SlideTransitionPane,EventMultiplexerListener) );
-    mrBase.GetEventMultiplexer()->AddEventListener( aLink );
+    mpEventMultiplexer->AddEventListener( aLink );
 }
 
 void SlideTransitionPane::removeListener()
 {
     Link<sdtools::EventMultiplexerEvent&,void> aLink( 
LINK(this,SlideTransitionPane,EventMultiplexerListener) );
-    mrBase.GetEventMultiplexer()->RemoveEventListener( aLink );
+    mpEventMultiplexer->RemoveEventListener( aLink );
 }
 
 IMPL_LINK(SlideTransitionPane,EventMultiplexerListener,
diff --git a/sd/source/ui/controller/SlideTransitionsToolBoxControl.cxx 
b/sd/source/ui/controller/SlideTransitionsToolBoxControl.cxx
index 8dfde47ce72f..1bc1d04ed30a 100644
--- a/sd/source/ui/controller/SlideTransitionsToolBoxControl.cxx
+++ b/sd/source/ui/controller/SlideTransitionsToolBoxControl.cxx
@@ -30,7 +30,6 @@ SlideTransitionsToolBoxControl::initialize(const 
css::uno::Sequence<css::uno::An
 void SAL_CALL SlideTransitionsToolBoxControl::dispose()
 {
     SolarMutexGuard aSolarMutexGuard;
-    m_xTransitionPane.reset();
     m_xVclBox.disposeAndClear();
     svt::ToolboxController::dispose();
 }
diff --git a/sd/source/ui/controller/SlideTransitionsToolBoxControl.hxx 
b/sd/source/ui/controller/SlideTransitionsToolBoxControl.hxx
index 3f73b0f0deb5..b7e78dcf9ce5 100644
--- a/sd/source/ui/controller/SlideTransitionsToolBoxControl.hxx
+++ b/sd/source/ui/controller/SlideTransitionsToolBoxControl.hxx
@@ -31,7 +31,6 @@ class SlideTransitionsToolBoxControl final
     : public cppu::ImplInheritanceHelper<svt::ToolboxController, 
css::lang::XServiceInfo>
 {
     VclPtr<SlideTransitionsPaneWrapper> m_xVclBox;
-    std::unique_ptr<sd::SlideTransitionPane> m_xTransitionPane;
 
 public:
     SlideTransitionsToolBoxControl();
diff --git a/sd/source/ui/inc/SlideTransitionPane.hxx 
b/sd/source/ui/inc/SlideTransitionPane.hxx
index 26ca96b0e48a..6201b5e9df5d 100644
--- a/sd/source/ui/inc/SlideTransitionPane.hxx
+++ b/sd/source/ui/inc/SlideTransitionPane.hxx
@@ -20,6 +20,7 @@
 
 #include "SlideSorterViewShell.hxx"
 
+#include "EventMultiplexer.hxx"
 #include <svtools/valueset.hxx>
 #include <sfx2/sidebar/ILayoutableWindow.hxx>
 #include <sfx2/sidebar/PanelLayout.hxx>
@@ -108,6 +109,7 @@ private:
 
     ViewShellBase &   mrBase;
     SdDrawDocument *  mpDrawDoc;
+    std::shared_ptr<sdtools::EventMultiplexer> mpEventMultiplexer;
 
     std::unique_ptr<weld::IconView> mxTransitionsIconView;
     std::unique_ptr<weld::ScrolledWindow> mxTransitionsScrollWindow;

Reply via email to