desktop/qa/desktop_lib/test_desktop_lib.cxx   |   37 +++++++++++++++++++-------
 desktop/source/lib/init.cxx                   |   15 ++++------
 include/sfx2/sidebar/SidebarDockingWindow.hxx |    1 
 sfx2/source/sidebar/SidebarDockingWindow.cxx  |   16 +++++++++--
 4 files changed, 49 insertions(+), 20 deletions(-)

New commits:
commit 8aafabd93d8ef61f70578967a87bb338355637d9
Author:     Szymon Kłos <szymon.k...@collabora.com>
AuthorDate: Fri Sep 9 16:05:12 2022 +0200
Commit:     Szymon Kłos <szymon.k...@collabora.com>
CommitDate: Wed Sep 21 15:04:18 2022 +0200

    lok: create sidebar on demand
    
    Change-Id: I5393bba647aa4667643262e77acc6b6873afb571
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/139729
    Reviewed-by: Ashod Nakashian <a...@collabora.com>
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/140035
    Reviewed-by: Szymon Kłos <szymon.k...@collabora.com>

diff --git a/desktop/qa/desktop_lib/test_desktop_lib.cxx 
b/desktop/qa/desktop_lib/test_desktop_lib.cxx
index 6cf4d2e79e6c..cebf733d4838 100644
--- a/desktop/qa/desktop_lib/test_desktop_lib.cxx
+++ b/desktop/qa/desktop_lib/test_desktop_lib.cxx
@@ -43,6 +43,8 @@
 #include <sfx2/viewsh.hxx>
 #include <sfx2/viewfrm.hxx>
 #include <sfx2/bindings.hxx>
+#include <sfx2/sidebar/SidebarController.hxx>
+#include <sfx2/sidebar/SidebarDockingWindow.hxx>
 #include <unotools/datetime.hxx>
 #include <unotools/syslocaleoptions.hxx>
 #include <comphelper/string.hxx>
@@ -3235,10 +3237,35 @@ void DesktopLOKTest::testMultiDocuments()
     }
 }
 
+namespace
+{
+    SfxChildWindow* lcl_initializeSidebar()
+    {
+        // in init.cxx we do setupSidebar which creaes the controller, do it 
here
+
+        SfxViewShell* pViewShell = SfxViewShell::Current();
+        CPPUNIT_ASSERT(pViewShell);
+
+        SfxViewFrame* pViewFrame = pViewShell->GetViewFrame();
+        CPPUNIT_ASSERT(pViewFrame);
+
+        SfxChildWindow* pSideBar = pViewFrame->GetChildWindow(SID_SIDEBAR);
+        CPPUNIT_ASSERT(pSideBar);
+
+        auto pDockingWin = dynamic_cast<sfx2::sidebar::SidebarDockingWindow 
*>(pSideBar->GetWindow());
+        CPPUNIT_ASSERT(pDockingWin);
+
+        pDockingWin->GetOrCreateSidebarController(); // just to create the 
controller
+
+        return pSideBar;
+    }
+};
+
 void DesktopLOKTest::testControlState()
 {
     LibLODocument_Impl* pDocument = loadDoc("search.ods");
     pDocument->pClass->postUnoCommand(pDocument, ".uno:StarShapes", nullptr, 
false);
+    lcl_initializeSidebar();
     Scheduler::ProcessEventsToIdle();
 
     boost::property_tree::ptree aState;
@@ -3252,17 +3279,9 @@ void DesktopLOKTest::testMetricField()
 {
     LibLODocument_Impl* pDocument = loadDoc("search.ods");
     pDocument->pClass->postUnoCommand(pDocument, ".uno:StarShapes", nullptr, 
false);
+    SfxChildWindow* pSideBar = lcl_initializeSidebar();
     Scheduler::ProcessEventsToIdle();
 
-    SfxViewShell* pViewShell = SfxViewShell::Current();
-    CPPUNIT_ASSERT(pViewShell);
-
-    SfxViewFrame* pViewFrame = pViewShell->GetViewFrame();
-    CPPUNIT_ASSERT(pViewFrame);
-
-    SfxChildWindow* pSideBar = pViewFrame->GetChildWindow(SID_SIDEBAR);
-    CPPUNIT_ASSERT(pSideBar);
-
     vcl::Window* pWin = pSideBar->GetWindow();
     CPPUNIT_ASSERT(pWin);
 
diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx
index f22558d6d76e..a9bf7ca19635 100644
--- a/desktop/source/lib/init.cxx
+++ b/desktop/source/lib/init.cxx
@@ -882,22 +882,21 @@ void setupSidebar(const OUString& sidebarDeckId = "")
         if (!pDockingWin)
             return;
 
-        OUString currentDeckId = 
pDockingWin->GetSidebarController()->GetCurrentDeckId();
+        pViewFrame->ShowChildWindow( SID_SIDEBAR );
 
-        // check if it is the chart deck id, if it is, don't switch to default 
deck
-        bool switchToDefault = true;
+        const rtl::Reference<sfx2::sidebar::SidebarController>& xController
+            = pDockingWin->GetOrCreateSidebarController();
 
-        if (currentDeckId == "ChartDeck")
-            switchToDefault = false;
+        xController->FadeIn();
+        xController->RequestOpenDeck();
 
         if (!sidebarDeckId.isEmpty())
         {
-            pDockingWin->GetSidebarController()->SwitchToDeck(sidebarDeckId);
+            xController->SwitchToDeck(sidebarDeckId);
         }
         else
         {
-            if (switchToDefault)
-                pDockingWin->GetSidebarController()->SwitchToDefaultDeck();
+            xController->SwitchToDefaultDeck();
         }
 
         pDockingWin->SyncUpdate();
diff --git a/include/sfx2/sidebar/SidebarDockingWindow.hxx 
b/include/sfx2/sidebar/SidebarDockingWindow.hxx
index 9bad1f5a8464..b22aefcb34a9 100644
--- a/include/sfx2/sidebar/SidebarDockingWindow.hxx
+++ b/include/sfx2/sidebar/SidebarDockingWindow.hxx
@@ -46,6 +46,7 @@ public:
     void SyncUpdate();
 
     auto& GetSidebarController() const { return mpSidebarController; }
+    rtl::Reference<sfx2::sidebar::SidebarController>& 
GetOrCreateSidebarController();
     using SfxDockingWindow::Close;
 
 private:
diff --git a/sfx2/source/sidebar/SidebarDockingWindow.cxx 
b/sfx2/source/sidebar/SidebarDockingWindow.cxx
index d50aa2b3d4b0..0cc38871a8ce 100644
--- a/sfx2/source/sidebar/SidebarDockingWindow.cxx
+++ b/sfx2/source/sidebar/SidebarDockingWindow.cxx
@@ -53,13 +53,23 @@ SidebarDockingWindow::SidebarDockingWindow(SfxBindings* 
pSfxBindings, SidebarChi
         OSL_ASSERT(pSfxBindings!=nullptr);
         OSL_ASSERT(pSfxBindings->GetDispatcher()!=nullptr);
     }
-    else
+    else if (!comphelper::LibreOfficeKit::isActive())
     {
-        const SfxViewFrame* pViewFrame = 
pSfxBindings->GetDispatcher()->GetFrame();
-        mpSidebarController.set(sfx2::sidebar::SidebarController::create(this, 
pViewFrame).get());
+        GetOrCreateSidebarController();
     }
 }
 
+rtl::Reference<sfx2::sidebar::SidebarController>& 
SidebarDockingWindow::GetOrCreateSidebarController()
+{
+    if (!mpSidebarController)
+    {
+        const SfxViewFrame* pViewFrame = 
GetBindings().GetDispatcher()->GetFrame();
+        mpSidebarController = sfx2::sidebar::SidebarController::create(this, 
pViewFrame);
+    }
+
+    return mpSidebarController;
+}
+
 SidebarDockingWindow::~SidebarDockingWindow()
 {
     disposeOnce();

Reply via email to