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;