diff options
author | Caolán McNamara <caolanm@redhat.com> | 2017-01-31 14:29:18 +0000 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2017-02-01 19:33:34 +0000 |
commit | 9f031721d7b281ef11c93da78d68f7899816094c (patch) | |
tree | 60e7a4cd791e1f320991ad3fec638da16b85aaca /sfx2 | |
parent | 27d641761cff82ed34987ac1f70b838f1028bc6e (diff) |
Resolves: tdf#104884 print preview replaces the frame controller
so the sidebar is listening to the old controller which has been disposed[1] so
when print preview exits and yet another controller replaces the print preview
one then the sidebar still doesn't listen to the current one.
framework broadcasts COMPONENT_DETACHING/COMPONENT_REATTACHED around these
changes, so if we listen to them we can keep attached to whatever is the
current component
[1] note that ContextChangeEventMultipler doesn't inform clients that the
controller has been disposed, this remains unchanged here
Reviewed-on: https://gerrit.libreoffice.org/33758
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
(cherry picked from commit 3e27ba70ce212642026874ba73021930a06cdbbd)
Change-Id: I141509d4a262307afd7dcfc3d77de6cdd6dbfa5f
Reviewed-on: https://gerrit.libreoffice.org/33760
Reviewed-by: Michael Stahl <mstahl@redhat.com>
Tested-by: Michael Stahl <mstahl@redhat.com>
Diffstat (limited to 'sfx2')
-rw-r--r-- | sfx2/source/sidebar/SidebarController.cxx | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/sfx2/source/sidebar/SidebarController.cxx b/sfx2/source/sidebar/SidebarController.cxx index 98112eb0028e..58117bd336db 100644 --- a/sfx2/source/sidebar/SidebarController.cxx +++ b/sfx2/source/sidebar/SidebarController.cxx @@ -118,6 +118,7 @@ SidebarController::SidebarController ( mpResourceManager = o3tl::make_unique<ResourceManager>(); registerSidebarForFrame(this, mxFrame->getController()); + rxFrame->addFrameActionListener(this); // Listen for window events. mpParentWindow->AddEventListener(LINK(this, SidebarController, WindowEventHandler)); @@ -184,6 +185,7 @@ void SidebarController::unregisterSidebarForFrame(SidebarController* pController void SidebarController::disposeDecks() { + SolarMutexGuard aSolarMutexGuard; mpCurrentDeck.clear(); maFocusManager.Clear(); mpResourceManager->disposeDecks(); @@ -228,6 +230,7 @@ void SAL_CALL SidebarController::disposing() if (!xController.is()) xController = mxCurrentController; + mxFrame->removeFrameActionListener(this); unregisterSidebarForFrame(this, xController); if (mxReadOnlyModeDispatch.is()) @@ -1311,6 +1314,17 @@ void SidebarController::FadeIn() mpSplitWindow->FadeIn(); } +void SidebarController::frameAction(const css::frame::FrameActionEvent& rEvent) + throw (com::sun::star::uno::RuntimeException, std::exception) +{ + if (rEvent.Frame == mxFrame) + { + if (rEvent.Action == css::frame::FrameAction_COMPONENT_DETACHING) + unregisterSidebarForFrame(this, mxFrame->getController()); + else if (rEvent.Action == css::frame::FrameAction_COMPONENT_REATTACHED) + registerSidebarForFrame(this, mxFrame->getController()); + } +} } } // end of namespace sfx2::sidebar |