starmath/source/view.cxx |   30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

New commits:
commit e33d8fd1ff466876e5e95c8495c73a08c454d8c9
Author:     Mike Kaganski <mike.kagan...@collabora.com>
AuthorDate: Tue Sep 27 10:48:21 2022 +0300
Commit:     Mike Kaganski <mike.kagan...@collabora.com>
CommitDate: Wed Nov 9 09:35:19 2022 +0100

    lok: Register sidebar for frame explicitly
    
    For some reason, it is needed in 22.05 (unlike master). Without this,
    sidebar sometimes isn't shown in inline edit mode.
    
    Change-Id: Ie225ff0676786e9164e8640c6e159efb8aebf241
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/140640
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>

diff --git a/starmath/source/view.cxx b/starmath/source/view.cxx
index 4afb9a68a33c..1fd8d04acb2c 100644
--- a/starmath/source/view.cxx
+++ b/starmath/source/view.cxx
@@ -2124,6 +2124,24 @@ 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:
@@ -2143,7 +2161,19 @@ public:
         SfxBaseController::attachFrame(xFrame);
 
         if (comphelper::LibreOfficeKit::isActive())
+        {
             CopyLokViewCallbackFromFrameCreator();
+            // In lok mode, DocumentHolder::ShowUI is not called on OLE 
in-place activation,
+            // because respective code is skipped in 
OCommonEmbeddedObject::SwitchStateTo_Impl,
+            // so sidebar controller does not get registered properly; do it 
here
+            if (auto xSidebar = getSidebarFromModel(getModel()))
+            {
+                auto pSidebar = 
dynamic_cast<sfx2::sidebar::SidebarController*>(xSidebar.get());
+                assert(pSidebar);
+                pSidebar->registerSidebarForFrame(this);
+                pSidebar->updateModel(getModel());
+            }
+        }
 
         // No need to call mpSelectionChangeHandler->Connect() unless 
SmController implements XSelectionSupplier
         mpSelectionChangeHandler->selectionChanged({}); // Installs the 
correct context

Reply via email to