summaryrefslogtreecommitdiff
path: root/starmath
diff options
context:
space:
mode:
authorMike Kaganski <mike.kaganski@collabora.com>2022-06-30 06:09:23 +0300
committerMike Kaganski <mike.kaganski@collabora.com>2022-07-28 07:37:31 +0200
commit30e08c83e502562966351f4236e9dd9230ffa435 (patch)
treec30f96ce2290e404f10e186f0229334b287544a7 /starmath
parent2fc16dc84d0b1b1bd7978a30e1b79ff3100fefdf (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.cxx39
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: