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                   |    6 ++++++
 4 files changed, 11 insertions(+), 4 deletions(-)

New commits:
commit c4d957867f45468e638862d159c9614207daa936
Author:     Szymon Kłos <szymon.k...@collabora.com>
AuthorDate: Thu Aug 7 05:07:09 2025 +0000
Commit:     Tomaž Vajngerl <qui...@gmail.com>
CommitDate: Thu Aug 7 11:31:19 2025 +0200

    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-by: Tomaž Vajngerl <qui...@gmail.com>
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>

diff --git a/sd/source/ui/animations/SlideTransitionPane.cxx 
b/sd/source/ui/animations/SlideTransitionPane.cxx
index 59891b1d8a8b..d5fef0f84362 100644
--- a/sd/source/ui/animations/SlideTransitionPane.cxx
+++ b/sd/source/ui/animations/SlideTransitionPane.cxx
@@ -920,14 +920,17 @@ void SlideTransitionPane::playCurrentEffect()
 
 void SlideTransitionPane::addListener()
 {
+    if (!mpEventMultiplexer)
+        mpEventMultiplexer = mrBase.GetEventMultiplexer();
+
     Link<tools::EventMultiplexerEvent&,void> aLink( 
LINK(this,SlideTransitionPane,EventMultiplexerListener) );
-    mrBase.GetEventMultiplexer()->AddEventListener( aLink );
+    mpEventMultiplexer->AddEventListener( aLink );
 }
 
 void SlideTransitionPane::removeListener()
 {
     Link<tools::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 0b76fee99d00..fffdebb64d72 100644
--- a/sd/source/ui/controller/SlideTransitionsToolBoxControl.cxx
+++ b/sd/source/ui/controller/SlideTransitionsToolBoxControl.cxx
@@ -21,7 +21,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 7a4da7a79d41..0aa58a642087 100644
--- a/sd/source/ui/controller/SlideTransitionsToolBoxControl.hxx
+++ b/sd/source/ui/controller/SlideTransitionsToolBoxControl.hxx
@@ -22,7 +22,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 d7fc32a67686..b7354025f6b9 100644
--- a/sd/source/ui/inc/SlideTransitionPane.hxx
+++ b/sd/source/ui/inc/SlideTransitionPane.hxx
@@ -39,6 +39,11 @@ namespace sd
 class TransitionPreset;
 class ViewShellBase;
 
+namespace tools
+{
+    class EventMultiplexer;
+}
+
 namespace impl
 {
     struct TransitionEffect;
@@ -107,6 +112,7 @@ private:
 
     ViewShellBase &   mrBase;
     SdDrawDocument *  mpDrawDoc;
+    std::shared_ptr<sd::tools::EventMultiplexer> mpEventMultiplexer;
 
     std::unique_ptr<weld::IconView> mxTransitionsIconView;
     std::unique_ptr<weld::ScrolledWindow> mxTransitionsScrollWindow;

Reply via email to