[Libreoffice-commits] core.git: Branch 'distro/collabora/cp-6.0' - include/LibreOfficeKit include/sfx2 sfx2/source svx/source

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Wed Nov 7 10:16:56 UTC 2018


 include/LibreOfficeKit/LibreOfficeKitEnums.h         |    9 +++++++++
 include/sfx2/lokhelper.hxx                           |    4 ++++
 sfx2/source/sidebar/ContextChangeBroadcaster.cxx     |   10 ++++++++++
 sfx2/source/view/lokhelper.cxx                       |    9 +++++++++
 svx/source/sidebar/ContextChangeEventMultiplexer.cxx |    9 +++++++++
 5 files changed, 41 insertions(+)

New commits:
commit 4f605d49ba5a436730ceddaf739544b99c0812fe
Author:     Jan Holesovsky <kendy at collabora.com>
AuthorDate: Tue Nov 6 11:20:27 2018 +0100
Commit:     Jan Holesovsky <kendy at collabora.com>
CommitDate: Wed Nov 7 11:10:37 2018 +0100

    lok: Notify about the current editing context.
    
    Change-Id: I47e67b680a6abdb66020b295f55ee6a73b7b5608

diff --git a/include/LibreOfficeKit/LibreOfficeKitEnums.h b/include/LibreOfficeKit/LibreOfficeKitEnums.h
index 767a0bb04366..f91b33886195 100644
--- a/include/LibreOfficeKit/LibreOfficeKitEnums.h
+++ b/include/LibreOfficeKit/LibreOfficeKitEnums.h
@@ -594,6 +594,15 @@ typedef enum
      * convenience.
      */
     LOK_CALLBACK_CLIPBOARD_CHANGED = 38,
+
+    /**
+     * When the (editing) context changes - like the user switches from
+     * editing textbox in Impress to editing a shape there.
+     *
+     * Payload is the application ID and context, delimited by space.
+     * Eg. com.sun.star.presentation.PresentationDocument TextObject
+     */
+    LOK_CALLBACK_CONTEXT_CHANGED = 39,
 }
 LibreOfficeKitCallbackType;
 
diff --git a/include/sfx2/lokhelper.hxx b/include/sfx2/lokhelper.hxx
index 08424a90f770..9f68c6d7dd60 100644
--- a/include/sfx2/lokhelper.hxx
+++ b/include/sfx2/lokhelper.hxx
@@ -54,6 +54,10 @@ public:
     static void notifyVisCursorInvalidation(OutlinerViewShell const* pThisView, const OString& rRectangle);
     /// Notifies all views with the given type and payload.
     static void notifyAllViews(int nType, const OString& rPayload);
+
+    /// Notify about the editing context change.
+    static void notifyContextChange(SfxViewShell const* pViewShell, const OUString& aApplication, const OUString& aContext);
+
     /// A special value to signify 'infinity'.
     /// This value is chosen such that sal_Int32 will not overflow when manipulated.
     static const long MaxTwips = 1e9;
diff --git a/sfx2/source/sidebar/ContextChangeBroadcaster.cxx b/sfx2/source/sidebar/ContextChangeBroadcaster.cxx
index bdbf62defb36..42aacef4591e 100644
--- a/sfx2/source/sidebar/ContextChangeBroadcaster.cxx
+++ b/sfx2/source/sidebar/ContextChangeBroadcaster.cxx
@@ -22,7 +22,10 @@
 #include <com/sun/star/ui/ContextChangeEventMultiplexer.hpp>
 #include <com/sun/star/frame/ModuleManager.hpp>
 #include <osl/diagnose.h>
+#include <comphelper/lok.hxx>
 #include <comphelper/processfactory.hxx>
+#include <sfx2/lokhelper.hxx>
+#include <sfx2/viewsh.hxx>
 
 using ::rtl::OUString;
 using namespace css;
@@ -87,6 +90,13 @@ void ContextChangeBroadcaster::BroadcastContextChange (
         return;
     }
 
+    // notify the LOK too
+    if (comphelper::LibreOfficeKit::isActive())
+    {
+        if (SfxViewShell* pViewShell = SfxViewShell::Get(rxFrame->getController()))
+            SfxLokHelper::notifyContextChange(pViewShell, rsModuleName, rsContextName);
+    }
+
     const css::ui::ContextChangeEventObject aEvent(
         rxFrame->getController(),
         rsModuleName,
diff --git a/sfx2/source/view/lokhelper.cxx b/sfx2/source/view/lokhelper.cxx
index e6fb475846a8..475317158158 100644
--- a/sfx2/source/view/lokhelper.cxx
+++ b/sfx2/source/view/lokhelper.cxx
@@ -226,4 +226,13 @@ void SfxLokHelper::notifyAllViews(int nType, const OString& rPayload)
     }
 }
 
+void SfxLokHelper::notifyContextChange(SfxViewShell const* pViewShell, const OUString& aApplication, const OUString& aContext)
+{
+    OStringBuffer aBuffer;
+    aBuffer.append(OUStringToOString(aApplication.replace(' ', '_'), RTL_TEXTENCODING_UTF8));
+    aBuffer.append(' ');
+    aBuffer.append(OUStringToOString(aContext.replace(' ', '_'), RTL_TEXTENCODING_UTF8));
+    pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_CONTEXT_CHANGED, aBuffer.makeStringAndClear().getStr());
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svx/source/sidebar/ContextChangeEventMultiplexer.cxx b/svx/source/sidebar/ContextChangeEventMultiplexer.cxx
index 5591ee389200..c714627afdae 100644
--- a/svx/source/sidebar/ContextChangeEventMultiplexer.cxx
+++ b/svx/source/sidebar/ContextChangeEventMultiplexer.cxx
@@ -23,7 +23,9 @@
 #include <com/sun/star/ui/XContextChangeEventMultiplexer.hpp>
 #include <com/sun/star/ui/ContextChangeEventMultiplexer.hpp>
 #include <com/sun/star/frame/ModuleManager.hpp>
+#include <comphelper/lok.hxx>
 #include <comphelper/processfactory.hxx>
+#include <sfx2/lokhelper.hxx>
 #include <sfx2/viewsh.hxx>
 #include <tools/diagnose_ex.h>
 
@@ -37,6 +39,13 @@ void ContextChangeEventMultiplexer::NotifyContextChange (
 {
     if (rxController.is() && rxController->getFrame().is())
     {
+        // notify the LOK too
+        if (comphelper::LibreOfficeKit::isActive())
+        {
+            if (SfxViewShell* pViewShell = SfxViewShell::Get(rxController))
+                SfxLokHelper::notifyContextChange(pViewShell, GetModuleName(rxController->getFrame()), vcl::EnumContext::GetContextName(eContext));
+        }
+
         const css::ui::ContextChangeEventObject aEvent(
             rxController,
             GetModuleName(rxController->getFrame()),


More information about the Libreoffice-commits mailing list