include/sfx2/sidebar/SidebarController.hxx | 2 + sfx2/source/sidebar/SidebarController.cxx | 41 +++++++++++++++++++++-------- 2 files changed, 33 insertions(+), 10 deletions(-)
New commits: commit 5e0ce7dc9ebe1a8b5bd70c91bcd16a49ec487b49 Author: Samuel Mehrbrodt <[email protected]> AuthorDate: Mon Sep 30 16:02:02 2019 +0200 Commit: Thorsten Behrens <[email protected]> CommitDate: Tue Oct 1 15:10:19 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 <[email protected]> (cherry picked from commit e6e14b2cafd24179f8675350749878da77a31443) Reviewed-on: https://gerrit.libreoffice.org/79914 Reviewed-by: Michael Stahl <[email protected]> diff --git a/include/sfx2/sidebar/SidebarController.hxx b/include/sfx2/sidebar/SidebarController.hxx index b4521bd4166c..57398aca56a3 100644 --- a/include/sfx2/sidebar/SidebarController.hxx +++ b/include/sfx2/sidebar/SidebarController.hxx @@ -167,6 +167,8 @@ public: sal_Int32 getMaximumWidth() { return mnMaximumSidebarWidth; } void setMaximumWidth(sal_Int32 nMaximumWidth) { mnMaximumSidebarWidth = nMaximumWidth; } + void saveDeckState(); + private: SidebarController( SidebarDockingWindow* pParentWindow, diff --git a/sfx2/source/sidebar/SidebarController.cxx b/sfx2/source/sidebar/SidebarController.cxx index 5c7e1efe67a5..0cad77963c36 100644 --- a/sfx2/source/sidebar/SidebarController.cxx +++ b/sfx2/source/sidebar/SidebarController.cxx @@ -191,6 +191,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())); @@ -214,19 +217,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()) @@ -1391,6 +1400,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 [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
