diff options
author | Caolán McNamara <caolanm@redhat.com> | 2016-06-03 11:06:22 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2016-06-03 11:29:25 +0100 |
commit | b81daea4a78083def286fa2d5360b152b7a703fd (patch) | |
tree | 9983aae5fbfb409eb3965357da4adb4b35a7b836 /sfx2 | |
parent | 629f5c01ae1512724d0b2105bfd205d7c2deae19 (diff) |
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
Diffstat (limited to 'sfx2')
-rw-r--r-- | sfx2/source/sidebar/Sidebar.cxx | 22 | ||||
-rw-r--r-- | sfx2/source/sidebar/SidebarController.cxx | 19 | ||||
-rw-r--r-- | sfx2/source/view/viewfrm.cxx | 4 |
3 files changed, 40 insertions, 5 deletions
diff --git a/sfx2/source/sidebar/Sidebar.cxx b/sfx2/source/sidebar/Sidebar.cxx index ac45f616275a..eaa8a510c00f 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 0506b77ba85c..002bcc49e672 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 0997452979f4..4537a6a4f4b8 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; } |