diff options
author | Mike Kaganski <mike.kaganski@collabora.com> | 2022-06-30 06:09:23 +0300 |
---|---|---|
committer | Mike Kaganski <mike.kaganski@collabora.com> | 2022-07-28 07:37:31 +0200 |
commit | 30e08c83e502562966351f4236e9dd9230ffa435 (patch) | |
tree | c30f96ce2290e404f10e186f0229334b287544a7 /starmath | |
parent | 2fc16dc84d0b1b1bd7978a30e1b79ff3100fefdf (diff) |
lok: Enable sidebar in Math
Change-Id: I1554a924eef0bfcaffa893057a37ef45321a0cf7
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137246
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
Diffstat (limited to 'starmath')
-rw-r--r-- | starmath/source/view.cxx | 39 |
1 files changed, 36 insertions, 3 deletions
diff --git a/starmath/source/view.cxx b/starmath/source/view.cxx index e2b60cb9c6bd..56896a030572 100644 --- a/starmath/source/view.cxx +++ b/starmath/source/view.cxx @@ -23,6 +23,7 @@ #include <com/sun/star/accessibility/AccessibleStateType.hpp> #include <com/sun/star/frame/Desktop.hpp> #include <com/sun/star/frame/XFramesSupplier.hpp> +#include <com/sun/star/frame/XModel.hpp> #include <com/sun/star/container/XChild.hpp> #include <comphelper/lok.hxx> @@ -44,6 +45,7 @@ #include <sfx2/request.hxx> #include <sfx2/sfxbasecontroller.hxx> #include <sfx2/sidebar/SidebarChildWindow.hxx> +#include <sfx2/sidebar/SidebarController.hxx> #include <sfx2/viewfac.hxx> #include <svl/eitem.hxx> #include <svl/itemset.hxx> @@ -2097,6 +2099,29 @@ void SmViewShell::GetState(SfxItemSet &rSet) namespace { +css::uno::Reference<css::ui::XSidebar> +getSidebarFromModel(const css::uno::Reference<css::frame::XModel>& xModel) +{ + css::uno::Reference<css::container::XChild> xChild(xModel, css::uno::UNO_QUERY); + if (!xChild.is()) + return nullptr; + + css::uno::Reference<css::frame::XModel> xParent(xChild->getParent(), css::uno::UNO_QUERY); + if (!xParent.is()) + return nullptr; + + css::uno::Reference<css::frame::XController2> xController(xParent->getCurrentController(), + css::uno::UNO_QUERY); + if (!xController.is()) + return nullptr; + + css::uno::Reference<css::ui::XSidebarProvider> xSidebarProvider = xController->getSidebar(); + if (!xSidebarProvider.is()) + return nullptr; + + return xSidebarProvider->getSidebar(); +} + class SmController : public SfxBaseController { public: @@ -2105,17 +2130,25 @@ public: , mpSelectionChangeHandler(new svx::sidebar::SelectionChangeHandler( GetContextName, this, vcl::EnumContext::Context::Math)) { - mpSelectionChangeHandler->Connect(); rViewShell.SetContextName(GetContextName()); } - ~SmController() { mpSelectionChangeHandler->Disconnect(); } + // No need to call mpSelectionChangeHandler->Disconnect() unless SmController implements XSelectionSupplier + // ~SmController() { mpSelectionChangeHandler->Disconnect(); } // css::frame::XController void SAL_CALL attachFrame(const css::uno::Reference<css::frame::XFrame>& xFrame) override { SfxBaseController::attachFrame(xFrame); - mpSelectionChangeHandler->selectionChanged({}); // Installs the correct context + // No need to call mpSelectionChangeHandler->Connect() unless SmController implements XSelectionSupplier + if (auto xSidebar = getSidebarFromModel(getModel())) + { + auto pSidebar = dynamic_cast<sfx2::sidebar::SidebarController*>(xSidebar.get()); + assert(pSidebar); + sfx2::sidebar::SidebarController::registerSidebarForFrame(pSidebar, this); + pSidebar->updateModel(getModel()); + mpSelectionChangeHandler->selectionChanged({}); // Installs the correct context + } } private: |