summaryrefslogtreecommitdiff
path: root/sfx2/source
diff options
context:
space:
mode:
authorAshod Nakashian <ashod.nakashian@collabora.co.uk>2018-12-12 03:01:31 -0500
committerNoel Grandin <noel.grandin@collabora.co.uk>2019-07-26 20:22:05 +0200
commit80eb913d5944e88297b0734991bcf6c1cfb34463 (patch)
tree3704aa389a6912d07ffda9bf4ad0b63f1568ebcf /sfx2/source
parenta6f6a76d6018fd342646982f6e252c8562ebd254 (diff)
sfx: LOK: notify clients of the sidebar state
Change-Id: I35b174c3a5e302ce52ee4063fa71d47feffab624 Reviewed-on: https://gerrit.libreoffice.org/73520 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'sfx2/source')
-rw-r--r--sfx2/source/sidebar/SidebarController.cxx86
-rw-r--r--sfx2/source/sidebar/SidebarDockingWindow.cxx3
2 files changed, 77 insertions, 12 deletions
diff --git a/sfx2/source/sidebar/SidebarController.cxx b/sfx2/source/sidebar/SidebarController.cxx
index 83ff4c5354c6..a0f9cbd1dae4 100644
--- a/sfx2/source/sidebar/SidebarController.cxx
+++ b/sfx2/source/sidebar/SidebarController.cxx
@@ -52,6 +52,7 @@
#include <comphelper/lok.hxx>
#include <sal/log.hxx>
#include <officecfg/Office/UI/Sidebar.hxx>
+#include <LibreOfficeKit/LibreOfficeKitEnums.h>
#include <com/sun/star/awt/XWindowPeer.hpp>
#include <com/sun/star/frame/XDispatch.hpp>
@@ -72,6 +73,32 @@ namespace
const static char gsReadOnlyCommandName[] = ".uno:EditDoc";
const static sal_Int32 gnWidthCloseThreshold (70);
const static sal_Int32 gnWidthOpenThreshold (40);
+
+ std::string UnoNameFromDeckId(const OUString& rsDeckId)
+ {
+ if (rsDeckId == "SdCustomAnimationDeck")
+ return ".uno:CustomAnimation";
+
+ if (rsDeckId == "PropertyDeck")
+ return ".uno:ModifyPage";
+
+ if (rsDeckId == "SdLayoutsDeck")
+ return ".uno:ModifyPage";
+
+ if (rsDeckId == "SdSlideTransitionDeck")
+ return ".uno:SlideChangeWindow";
+
+ if (rsDeckId == "SdAllMasterPagesDeck")
+ return ".uno:MasterSlidesPanel";
+
+ if (rsDeckId == "SdMasterPagesDeck")
+ return ".uno:MasterSlidesPanel";
+
+ if (rsDeckId == "GalleryDeck")
+ return ".uno:Gallery";
+
+ return "";
+ }
}
namespace sfx2 { namespace sidebar {
@@ -95,17 +122,18 @@ namespace {
SidebarController::SidebarController (
SidebarDockingWindow* pParentWindow,
- const css::uno::Reference<css::frame::XFrame>& rxFrame)
+ const SfxViewFrame* pViewFrame)
: SidebarControllerInterfaceBase(m_aMutex),
mpCurrentDeck(),
mpParentWindow(pParentWindow),
+ mpViewFrame(pViewFrame),
+ mxFrame(pViewFrame->GetFrame().GetFrameInterface()),
mpTabBar(VclPtr<TabBar>::Create(
mpParentWindow,
- rxFrame,
+ mxFrame,
[this](const OUString& rsDeckId) { return this->OpenThenToggleDeck(rsDeckId); },
[this](const tools::Rectangle& rButtonBox,const ::std::vector<TabBar::DeckMenuData>& rMenuData) { return this->ShowPopupMenu(rButtonBox,rMenuData); },
this)),
- mxFrame(rxFrame),
maCurrentContext(OUString(), OUString()),
maRequestedContext(),
mnRequestedForceFlags(SwitchFlag_NoForce),
@@ -130,13 +158,12 @@ SidebarController::SidebarController (
mpResourceManager = std::make_unique<ResourceManager>();
}
-rtl::Reference<SidebarController> SidebarController::create(
- SidebarDockingWindow* pParentWindow,
- const css::uno::Reference<css::frame::XFrame>& rxFrame)
+rtl::Reference<SidebarController> SidebarController::create(SidebarDockingWindow* pParentWindow,
+ const SfxViewFrame* pViewFrame)
{
- rtl::Reference<SidebarController> instance(
- new SidebarController(pParentWindow, rxFrame));
+ rtl::Reference<SidebarController> instance(new SidebarController(pParentWindow, pViewFrame));
+ const css::uno::Reference<css::frame::XFrame>& rxFrame = pViewFrame->GetFrame().GetFrameInterface();
registerSidebarForFrame(instance.get(), rxFrame->getController());
rxFrame->addFrameActionListener(instance.get());
// Listen for window events.
@@ -710,6 +737,22 @@ void SidebarController::SwitchToDeck (
if (mpCurrentDeck)
mpCurrentDeck->Hide();
+ if (comphelper::LibreOfficeKit::isActive())
+ {
+ if (const SfxViewShell* pViewShell = mpViewFrame->GetViewShell())
+ {
+ const std::string hide = UnoNameFromDeckId(msCurrentDeckId);
+ if (!hide.empty())
+ pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_STATE_CHANGED,
+ (hide + "=false").c_str());
+
+ const std::string show = UnoNameFromDeckId(rDeckDescriptor.msId);
+ if (!show.empty())
+ pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_STATE_CHANGED,
+ (show + "=true").c_str());
+ }
+ }
+
msCurrentDeckId = rDeckDescriptor.msId;
}
mpTabBar->Invalidate();
@@ -1202,9 +1245,20 @@ void SidebarController::UpdateDeckOpenState()
aNewSize.setWidth(mnSavedSidebarWidth);
mpParentWindow->GetFloatingWindow()->SetPosSizePixel(aNewPos, aNewSize);
- // Sidebar wide enought to render the menu; enable it.
+
if (comphelper::LibreOfficeKit::isActive())
+ {
+ // Sidebar wide enought to render the menu; enable it.
mpTabBar->EnableMenuButton(true);
+
+ if (const SfxViewShell* pViewShell = mpViewFrame->GetViewShell())
+ {
+ const std::string uno = UnoNameFromDeckId(msCurrentDeckId);
+ if (!uno.empty())
+ pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_STATE_CHANGED,
+ (uno + "=true").c_str());
+ }
+ }
}
}
else
@@ -1229,10 +1283,22 @@ void SidebarController::UpdateDeckOpenState()
aNewSize.setWidth(nTabBarDefaultWidth);
mpParentWindow->GetFloatingWindow()->SetPosSizePixel(aNewPos, aNewSize);
- // Sidebar too narrow to render the menu; disable it.
+
if (comphelper::LibreOfficeKit::isActive())
+ {
+ // Sidebar too narrow to render the menu; disable it.
mpTabBar->EnableMenuButton(false);
+
+ if (const SfxViewShell* pViewShell = mpViewFrame->GetViewShell())
+ {
+ const std::string uno = UnoNameFromDeckId(msCurrentDeckId);
+ if (!uno.empty())
+ pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_STATE_CHANGED,
+ (uno + "=false").c_str());
+ }
+ }
}
+
if (mnWidthOnSplitterButtonDown > nTabBarDefaultWidth)
mnSavedSidebarWidth = mnWidthOnSplitterButtonDown;
mpParentWindow->SetStyle(mpParentWindow->GetStyle() & ~WB_SIZEABLE);
diff --git a/sfx2/source/sidebar/SidebarDockingWindow.cxx b/sfx2/source/sidebar/SidebarDockingWindow.cxx
index f76e71fc2d45..08b1040f523e 100644
--- a/sfx2/source/sidebar/SidebarDockingWindow.cxx
+++ b/sfx2/source/sidebar/SidebarDockingWindow.cxx
@@ -54,8 +54,7 @@ SidebarDockingWindow::SidebarDockingWindow(SfxBindings* pSfxBindings, SidebarChi
else
{
const SfxViewFrame* pViewFrame = pSfxBindings->GetDispatcher()->GetFrame();
- const SfxFrame& rFrame = pViewFrame->GetFrame();
- mpSidebarController.set(sfx2::sidebar::SidebarController::create(this, rFrame.GetFrameInterface()).get());
+ mpSidebarController.set(sfx2::sidebar::SidebarController::create(this, pViewFrame).get());
}
}