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

Samuel Mehrbrodt s.mehrbrodt at gmail.com
Wed Nov 5 14:17:13 PST 2014


 sfx2/sdi/sfx.sdi                          |    2 +-
 sfx2/source/sidebar/AsynchronousCall.cxx  |    7 +++++++
 sfx2/source/sidebar/AsynchronousCall.hxx  |    1 +
 sfx2/source/sidebar/Sidebar.cxx           |    3 ++-
 sfx2/source/sidebar/SidebarController.cxx |   20 ++++++++++++++++++--
 sfx2/source/sidebar/SidebarController.hxx |    7 +++++++
 6 files changed, 36 insertions(+), 4 deletions(-)

New commits:
commit d59b9b4af36148e4d8df8f3e3492116d378642e2
Author: Samuel Mehrbrodt <s.mehrbrodt at gmail.com>
Date:   Wed Nov 5 23:12:55 2014 +0100

    fdo#67627 fdo#85791 Allow to show/hide sidebar decks with the same command
    
    This also reintroduces the code to switch the decks asynchronously (removed unintentionally before)
    
    Change-Id: I825b4d7c5777097e9d3b3d82adbe1f646510dc9d

diff --git a/sfx2/sdi/sfx.sdi b/sfx2/sdi/sfx.sdi
index 1d2e11c..2a64d6a 100644
--- a/sfx2/sdi/sfx.sdi
+++ b/sfx2/sdi/sfx.sdi
@@ -1343,7 +1343,7 @@ SfxUInt16Item DeleteStyle SID_STYLE_DELETE
 ]
 
 
-SfxBoolItem DesignerDialog SID_STYLE_DESIGNER
+SfxVoidItem DesignerDialog SID_STYLE_DESIGNER
 
 [
     /* flags: */
diff --git a/sfx2/source/sidebar/AsynchronousCall.cxx b/sfx2/source/sidebar/AsynchronousCall.cxx
index 767e2e7..50f1a1c 100644
--- a/sfx2/source/sidebar/AsynchronousCall.cxx
+++ b/sfx2/source/sidebar/AsynchronousCall.cxx
@@ -40,6 +40,13 @@ AsynchronousCall::~AsynchronousCall (void)
     CancelRequest();
 }
 
+void AsynchronousCall::RequestCall (const Action& rAction)
+{
+    CancelRequest();
+    maAction = rAction;
+    RequestCall();
+}
+
 void AsynchronousCall::RequestCall (void)
 {
     if (mnCallId == 0)
diff --git a/sfx2/source/sidebar/AsynchronousCall.hxx b/sfx2/source/sidebar/AsynchronousCall.hxx
index 665a35b..d3ecd5d 100644
--- a/sfx2/source/sidebar/AsynchronousCall.hxx
+++ b/sfx2/source/sidebar/AsynchronousCall.hxx
@@ -38,6 +38,7 @@ public:
     AsynchronousCall (const Action& rAction);
     ~AsynchronousCall (void);
 
+    void RequestCall (const Action& rAction);
     void RequestCall (void);
     void CancelRequest (void);
 
diff --git a/sfx2/source/sidebar/Sidebar.cxx b/sfx2/source/sidebar/Sidebar.cxx
index 245307c..fe1bc5c 100644
--- a/sfx2/source/sidebar/Sidebar.cxx
+++ b/sfx2/source/sidebar/Sidebar.cxx
@@ -40,10 +40,11 @@ void Sidebar::ShowPanel (
 
         // All that is not necessary for the current use cases so lets
         // keep it simple for the time being.
-        pController->OpenThenSwitchToDeck(pPanelDescriptor->msDeckId);
+        pController->RequestSwitchToDeck(pPanelDescriptor->msDeckId);
     }
 }
 
+
 } } // end of namespace sfx2::sidebar
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/sidebar/SidebarController.cxx b/sfx2/source/sidebar/SidebarController.cxx
index 6b6bd0d..db09eea 100644
--- a/sfx2/source/sidebar/SidebarController.cxx
+++ b/sfx2/source/sidebar/SidebarController.cxx
@@ -504,14 +504,27 @@ void SidebarController::UpdateConfigurations (void)
 }
 
 
-
+void SidebarController::RequestSwitchToDeck (
+    const ::rtl::OUString& rsDeckId)
+{
+    maContextChangeUpdate.CancelRequest();
+    maAsynchronousDeckSwitch.RequestCall(
+        ::boost::bind(&SidebarController::OpenThenSwitchToDeck, this, rsDeckId));
+}
 
 void SidebarController::OpenThenSwitchToDeck (
     const ::rtl::OUString& rsDeckId)
 {
+    // fdo#67627 Clicking a second time on a Deck icon will close the Deck
+    if (IsDeckVisible(rsDeckId))
+    {
+        RequestCloseDeck();
+        return;
+    }
     RequestOpenDeck();
     SwitchToDeck(rsDeckId);
     mpTabBar->Invalidate();
+    mpTabBar->HighlightDeck(rsDeckId);
 }
 
 void SidebarController::SwitchToDeck (
@@ -996,7 +1009,10 @@ void SidebarController::RequestOpenDeck (void)
     UpdateDeckOpenState();
 }
 
-
+bool SidebarController::IsDeckVisible(const OUString& rsDeckId)
+{
+    return mbIsDeckOpen && mbIsDeckOpen.get() && msCurrentDeckId == rsDeckId;
+}
 
 
 void SidebarController::UpdateDeckOpenState (void)
diff --git a/sfx2/source/sidebar/SidebarController.hxx b/sfx2/source/sidebar/SidebarController.hxx
index 33cfea6..46511a5 100644
--- a/sfx2/source/sidebar/SidebarController.hxx
+++ b/sfx2/source/sidebar/SidebarController.hxx
@@ -122,6 +122,9 @@ public:
     const static sal_Int32 SwitchFlag_ForceNewDeck = 0x02;
     const static sal_Int32 SwitchFlag_ForceNewPanels = 0x02;
 
+
+    void RequestSwitchToDeck (
+        const ::rtl::OUString& rsDeckId);
     void OpenThenSwitchToDeck (
         const ::rtl::OUString& rsDeckId);
 
@@ -133,6 +136,10 @@ public:
     */
     void RequestOpenDeck (void);
 
+    /** Returns true when the given deck is the currently visible deck
+     */
+    bool IsDeckVisible (const ::rtl::OUString& rsDeckId);
+
     FocusManager& GetFocusManager (void) { return maFocusManager;}
 
 private:


More information about the Libreoffice-commits mailing list