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.mehrbr...@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: _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits