include/sfx2/sidebar/SidebarController.hxx | 2 + sfx2/source/sidebar/SidebarController.cxx | 41 +++++++++++++++++++++-------- 2 files changed, 33 insertions(+), 10 deletions(-)
New commits: commit e6e14b2cafd24179f8675350749878da77a31443 Author: Samuel Mehrbrodt <samuel.mehrbr...@cib.de> AuthorDate: Mon Sep 30 16:02:02 2019 +0200 Commit: Samuel Mehrbrodt <samuel.mehrbr...@cib.de> CommitDate: Tue Oct 1 09:47:34 2019 +0200 tdf#127306 Fix crash when closing LO after deleting a chart This crash was introduced with b58aa94f1f365c746135470bceb97cc182c289bc This patch basically reverts that patch and implements a different fix. Change-Id: I394a2f6490d3ee0769c0f78bb8a3980167719893 Reviewed-on: https://gerrit.libreoffice.org/79865 Tested-by: Jenkins Reviewed-by: Samuel Mehrbrodt <samuel.mehrbr...@cib.de> diff --git a/include/sfx2/sidebar/SidebarController.hxx b/include/sfx2/sidebar/SidebarController.hxx index fa051bf549be..596382a36888 100644 --- a/include/sfx2/sidebar/SidebarController.hxx +++ b/include/sfx2/sidebar/SidebarController.hxx @@ -167,6 +167,8 @@ public: sal_Int32 getMaximumWidth() const { return mnMaximumSidebarWidth; } void setMaximumWidth(sal_Int32 nMaximumWidth) { mnMaximumSidebarWidth = nMaximumWidth; } + void saveDeckState(); + private: SidebarController(SidebarDockingWindow* pParentWindow, const SfxViewFrame* pViewFrame); diff --git a/sfx2/source/sidebar/SidebarController.cxx b/sfx2/source/sidebar/SidebarController.cxx index ffefcf1d5f8a..f04278a25852 100644 --- a/sfx2/source/sidebar/SidebarController.cxx +++ b/sfx2/source/sidebar/SidebarController.cxx @@ -221,6 +221,9 @@ void SidebarController::registerSidebarForFrame(SidebarController* pController, void SidebarController::unregisterSidebarForFrame(SidebarController* pController, const css::uno::Reference<css::frame::XController>& xController) { + pController->saveDeckState(); + pController->disposeDecks(); + css::uno::Reference<css::ui::XContextChangeEventMultiplexer> xMultiplexer ( css::ui::ContextChangeEventMultiplexer::get( ::comphelper::getProcessComponentContext())); @@ -258,19 +261,25 @@ void SAL_CALL SidebarController::disposing() maFocusManager.Clear(); mpTabBar.disposeAndClear(); - // save decks settings - // Impress shutdown : context (frame) is disposed before sidebar disposing - // calc writer : context (frame) is disposed after sidebar disposing - // so need to test if GetCurrentContext is still valid regarding msApplication + saveDeckState(); - if (GetCurrentContext().msApplication != "none") + // clear decks + ResourceManager::DeckContextDescriptorContainer aDecks; + + mpResourceManager->GetMatchingDecks ( + aDecks, + GetCurrentContext(), + IsDocumentReadOnly(), + mxFrame->getController()); + + for (const auto& rDeck : aDecks) { - mpResourceManager->SaveDecksSettings(GetCurrentContext()); - mpResourceManager->SaveLastActiveDeck(GetCurrentContext(), msCurrentDeckId); - } + std::shared_ptr<DeckDescriptor> deckDesc = mpResourceManager->GetDeckDescriptor(rDeck.msId); - // clear decks - disposeDecks(); + VclPtr<Deck> aDeck = deckDesc->mpDeck; + if (aDeck) + aDeck.disposeAndClear(); + } uno::Reference<css::frame::XController> xController = mxFrame->getController(); if (!xController.is()) @@ -1563,6 +1572,18 @@ void SidebarController::frameAction(const css::frame::FrameActionEvent& rEvent) } } +void SidebarController::saveDeckState() +{ + // Impress shutdown : context (frame) is disposed before sidebar disposing + // calc writer : context (frame) is disposed after sidebar disposing + // so need to test if GetCurrentContext is still valid regarding msApplication + if (GetCurrentContext().msApplication != "none") + { + mpResourceManager->SaveDecksSettings(GetCurrentContext()); + mpResourceManager->SaveLastActiveDeck(GetCurrentContext(), msCurrentDeckId); + } +} + } } // end of namespace sfx2::sidebar /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits