[Libreoffice-commits] core.git: include/sfx2 sfx2/source

Caolán McNamara caolanm at redhat.com
Fri Jun 3 10:30:06 UTC 2016


 include/sfx2/sidebar/Sidebar.hxx           |   10 ++++++++++
 include/sfx2/sidebar/SidebarController.hxx |   22 +++++++++++-----------
 sfx2/source/sidebar/Sidebar.cxx            |   22 ++++++++++++++++++++++
 sfx2/source/sidebar/SidebarController.cxx  |   19 ++++++++++++++++---
 sfx2/source/view/viewfrm.cxx               |    4 ++--
 5 files changed, 61 insertions(+), 16 deletions(-)

New commits:
commit b81daea4a78083def286fa2d5360b152b7a703fd
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Fri Jun 3 11:06:22 2016 +0100

    OpenThenSwitchToDeck actually *toggles* deck visibility
    
    so rename it to that and add a OpenThenSwitchToDeck that actually
    does that, using the Toggle varient as the callback from the
    sidebar button which toggles the current deck on/off
    
    which retains the features of
    
    // tdf#67627 Clicking a second time on a Deck icon will close the Deck
    // tdf#88241 Summoning an undocked sidebar a second time should close sidebar
    
    but means that calls to OpenThenSwitchToDeck from e.g. slide layout
    don't auto close it if that deck is already open
    
    Change-Id: I3e3724626b93447a7ab6bc7032e9c6839dabcf55

diff --git a/include/sfx2/sidebar/Sidebar.hxx b/include/sfx2/sidebar/Sidebar.hxx
index 46620745..edf184d 100644
--- a/include/sfx2/sidebar/Sidebar.hxx
+++ b/include/sfx2/sidebar/Sidebar.hxx
@@ -41,6 +41,16 @@ public:
         const OUString& rsPanelId,
         const css::uno::Reference<css::frame::XFrame>& rxFrame);
 
+    /** Switch to the deck that contains the specified panel and toggle
+        the visibility of the panel (expanded and scrolled into the
+        visible area when visible)
+        Note that most of the work is done asynchronously and that
+        this function probably returns before the requested panel is visible.
+    */
+    static void TogglePanel (
+        const OUString& rsPanelId,
+        const css::uno::Reference<css::frame::XFrame>& rxFrame);
+
     static bool IsPanelVisible(
         const OUString& rsPanelId,
         const css::uno::Reference<css::frame::XFrame>& rxFrame);
diff --git a/include/sfx2/sidebar/SidebarController.hxx b/include/sfx2/sidebar/SidebarController.hxx
index 6c65867..7634272 100644
--- a/include/sfx2/sidebar/SidebarController.hxx
+++ b/include/sfx2/sidebar/SidebarController.hxx
@@ -124,8 +124,8 @@ public:
 
     const static sal_Int32 gnMaximumSidebarWidth = 400;
 
-    void OpenThenSwitchToDeck (
-        const ::rtl::OUString& rsDeckId);
+    void OpenThenSwitchToDeck(const OUString& rsDeckId);
+    void OpenThenToggleDeck(const OUString& rsDeckId);
 
     /** Show only the tab bar, not the deck.
     */
@@ -137,7 +137,7 @@ public:
 
     /** Returns true when the given deck is the currently visible deck
      */
-    bool IsDeckVisible (const ::rtl::OUString& rsDeckId);
+    bool IsDeckVisible(const OUString& rsDeckId);
 
     FocusManager& GetFocusManager() { return maFocusManager;}
 
@@ -148,14 +148,14 @@ public:
     const Context& GetCurrentContext() const { return maCurrentContext;}
     bool IsDocumentReadOnly (void) const { return mbIsDocumentReadOnly;}
 
-    void SwitchToDeck ( const ::rtl::OUString& rsDeckId);
+    void SwitchToDeck(const OUString& rsDeckId);
     void SwitchToDefaultDeck();
 
-    void CreateDeck(const ::rtl::OUString& rDeckId);
-    void CreateDeck(const ::rtl::OUString& rDeckId, const Context& rContext, bool bForceCreate = false);
+    void CreateDeck(const OUString& rDeckId);
+    void CreateDeck(const OUString& rDeckId, const Context& rContext, bool bForceCreate = false);
 
     ResourceManager::DeckContextDescriptorContainer GetMatchingDecks();
-    ResourceManager::PanelContextDescriptorContainer GetMatchingPanels( const ::rtl::OUString& rDeckId);
+    ResourceManager::PanelContextDescriptorContainer GetMatchingPanels(const OUString& rDeckId);
 
     void notifyDeckTitle(const OUString& targetDeckId);
 
@@ -174,7 +174,7 @@ private:
     css::uno::Reference<css::frame::XController> mxCurrentController;
     /// Use a combination of SwitchFlag_* as value.
     sal_Int32 mnRequestedForceFlags;
-    ::rtl::OUString msCurrentDeckId;
+    OUString msCurrentDeckId;
     AsynchronousCall maPropertyChangeForwarder;
     AsynchronousCall maContextChangeUpdate;
     AsynchronousCall maAsynchronousDeckSwitch;
@@ -216,15 +216,15 @@ private:
 
     css::uno::Reference<css::ui::XUIElement> CreateUIElement (
         const css::uno::Reference<css::awt::XWindowPeer>& rxWindow,
-        const ::rtl::OUString& rsImplementationURL,
+        const OUString& rsImplementationURL,
         const bool bWantsCanvas,
         const Context& rContext);
 
     void CreatePanels(
-        const ::rtl::OUString& rDeckId,
+        const OUString& rDeckId,
         const Context& rContext);
     VclPtr<Panel> CreatePanel (
-        const ::rtl::OUString& rsPanelId,
+        const OUString& rsPanelId,
         vcl::Window* pParentWindow,
         const bool bIsInitiallyExpanded,
         const Context& rContext,
diff --git a/sfx2/source/sidebar/Sidebar.cxx b/sfx2/source/sidebar/Sidebar.cxx
index ac45f61..eaa8a51 100644
--- a/sfx2/source/sidebar/Sidebar.cxx
+++ b/sfx2/source/sidebar/Sidebar.cxx
@@ -47,6 +47,28 @@ void Sidebar::ShowPanel (
     pController->OpenThenSwitchToDeck(pPanelDescriptor->msDeckId);
 }
 
+void Sidebar::TogglePanel (
+    const OUString& rsPanelId,
+    const css::uno::Reference<frame::XFrame>& rxFrame)
+{
+    SidebarController* pController = SidebarController::GetSidebarControllerForFrame(rxFrame);
+    if (!pController)
+        return;
+
+    const PanelDescriptor* pPanelDescriptor = pController->GetResourceManager()->GetPanelDescriptor(rsPanelId);
+
+    if (!pPanelDescriptor)
+        return;
+
+    // This should be a lot more sophisticated:
+    // - Make the deck switching asynchronous
+    // - Make sure to use a context that really shows the panel
+
+    // All that is not necessary for the current use cases so lets
+    // keep it simple for the time being.
+    pController->OpenThenToggleDeck(pPanelDescriptor->msDeckId);
+}
+
 bool Sidebar::IsPanelVisible(
     const OUString& rsPanelId,
     const css::uno::Reference<frame::XFrame>& rxFrame)
diff --git a/sfx2/source/sidebar/SidebarController.cxx b/sfx2/source/sidebar/SidebarController.cxx
index 0506b77..002bcc4 100644
--- a/sfx2/source/sidebar/SidebarController.cxx
+++ b/sfx2/source/sidebar/SidebarController.cxx
@@ -95,7 +95,7 @@ SidebarController::SidebarController (
       mpTabBar(VclPtr<TabBar>::Create(
               mpParentWindow,
               rxFrame,
-              [this](const ::rtl::OUString& rsDeckId) { return this->OpenThenSwitchToDeck(rsDeckId); },
+              [this](const ::rtl::OUString& rsDeckId) { return this->OpenThenToggleDeck(rsDeckId); },
               [this](const Rectangle& rButtonBox,const ::std::vector<TabBar::DeckMenuData>& rMenuData) { return this->ShowPopupMenu(rButtonBox,rMenuData); },
               this)),
       mxFrame(rxFrame),
@@ -503,8 +503,8 @@ void SidebarController::UpdateConfigurations()
     }
 }
 
-void SidebarController::OpenThenSwitchToDeck (
-    const ::rtl::OUString& rsDeckId)
+void SidebarController::OpenThenToggleDeck (
+    const OUString& rsDeckId)
 {
     SfxSplitWindow* pSplitWindow = GetSplitWindow();
     if ( pSplitWindow && !pSplitWindow->IsFadeIn() )
@@ -526,6 +526,19 @@ void SidebarController::OpenThenSwitchToDeck (
     mpTabBar->HighlightDeck(rsDeckId);
 }
 
+void SidebarController::OpenThenSwitchToDeck (
+    const OUString& rsDeckId)
+{
+    SfxSplitWindow* pSplitWindow = GetSplitWindow();
+    if ( pSplitWindow && !pSplitWindow->IsFadeIn() )
+        // tdf#83546 Collapsed sidebar should expand first
+        pSplitWindow->FadeIn();
+    RequestOpenDeck();
+    SwitchToDeck(rsDeckId);
+    mpTabBar->Invalidate();
+    mpTabBar->HighlightDeck(rsDeckId);
+}
+
 void SidebarController::SwitchToDefaultDeck()
 {
     SwitchToDeck(gsDefaultDeckId);
diff --git a/sfx2/source/view/viewfrm.cxx b/sfx2/source/view/viewfrm.cxx
index 0997452..4537a6a 100644
--- a/sfx2/source/view/viewfrm.cxx
+++ b/sfx2/source/view/viewfrm.cxx
@@ -3035,8 +3035,8 @@ void SfxViewFrame::ChildWindowExecute( SfxRequest &rReq )
         // First make sure that the sidebar is visible
         ShowChildWindow(SID_SIDEBAR);
 
-        ::sfx2::sidebar::Sidebar::ShowPanel("StyleListPanel",
-                                            GetFrame().GetFrameInterface());
+        ::sfx2::sidebar::Sidebar::TogglePanel("StyleListPanel",
+                                              GetFrame().GetFrameInterface());
         rReq.Done();
         return;
     }


More information about the Libreoffice-commits mailing list