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;
