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

Dennis Francis (via logerrit) logerrit at kemper.freedesktop.org
Tue Jul 7 05:47:37 UTC 2020


 include/sfx2/lokhelper.hxx     |    6 ++++++
 sfx2/source/view/lokhelper.cxx |   37 +++++++++++++++++++++++++++++++++++++
 2 files changed, 43 insertions(+)

New commits:
commit 2f72fa980c2c81248c32d3b95598c23aba6ac6ed
Author:     Dennis Francis <dennis.francis at collabora.com>
AuthorDate: Tue Jun 2 11:51:52 2020 +0530
Commit:     Dennis Francis <dennis.francis at collabora.com>
CommitDate: Tue Jul 7 07:46:56 2020 +0200

    introduce property-tree versions of SfxLokHelper::notifyOtherView*()
    
    Change-Id: I4ebbc166da94eab6e35984c50220dde7daf7adde
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/98119
    Tested-by: Jenkins
    Reviewed-by: Dennis Francis <dennis.francis at collabora.com>

diff --git a/include/sfx2/lokhelper.hxx b/include/sfx2/lokhelper.hxx
index 3c3cfc3a2ef8..68d029ea5ddf 100644
--- a/include/sfx2/lokhelper.hxx
+++ b/include/sfx2/lokhelper.hxx
@@ -39,6 +39,8 @@ struct SFX2_DLLPUBLIC LokMouseEventData
     {}
 };
 
+#include <boost/property_tree/ptree_fwd.hpp>
+
 class SFX2_DLLPUBLIC SfxLokHelper
 {
 public:
@@ -75,8 +77,12 @@ public:
     static void forEachOtherView(ViewShellType* pThisViewShell, FunctionType f);
     /// Invoke the LOK callback of all other views showing the same document as pThisView, with a payload of rKey-rPayload.
     static void notifyOtherViews(SfxViewShell* pThisView, int nType, const OString& rKey, const OString& rPayload);
+    /// Invoke the LOK callback of all views except pThisView, with a JSON payload created from the given property tree.
+    static void notifyOtherViews(SfxViewShell* pThisView, int nType, const boost::property_tree::ptree& rTree);
     /// Same as notifyOtherViews(), but works on a selected "other" view, not on all of them.
     static void notifyOtherView(SfxViewShell* pThisView, SfxViewShell const* pOtherView, int nType, const OString& rKey, const OString& rPayload);
+    /// Same as notifyOtherViews(), the property-tree version, but works on a selected "other" view, not on all of them.
+    static void notifyOtherView(SfxViewShell* pThisView, SfxViewShell const* pOtherView, int nType, const boost::property_tree::ptree& rTree);
     /// Emits a LOK_CALLBACK_STATE_CHANGED
     static void sendUnoStatus(const SfxViewShell* pShell, const SfxPoolItem* pItem);
     /// Emits a LOK_CALLBACK_WINDOW
diff --git a/sfx2/source/view/lokhelper.cxx b/sfx2/source/view/lokhelper.cxx
index af7b75a26897..67097c444990 100644
--- a/sfx2/source/view/lokhelper.cxx
+++ b/sfx2/source/view/lokhelper.cxx
@@ -291,6 +291,16 @@ static OString lcl_escapeQuotes(const OString &rStr)
     return aBuf.makeStringAndClear();
 }
 
+static OString lcl_generateJSON(SfxViewShell* pView, const boost::property_tree::ptree& rTree)
+{
+    boost::property_tree::ptree aMessageProps = rTree;
+    aMessageProps.put("viewId", SfxLokHelper::getView(pView));
+    aMessageProps.put("part", pView->getPart());
+    std::stringstream aStream;
+    boost::property_tree::write_json(aStream, aMessageProps, false /* pretty */);
+    return OString(aStream.str().c_str()).trim();
+}
+
 void SfxLokHelper::notifyOtherView(SfxViewShell* pThisView, SfxViewShell const* pOtherView, int nType, const OString& rKey, const OString& rPayload)
 {
     if (DisableCallbacks::disabled())
@@ -303,6 +313,15 @@ void SfxLokHelper::notifyOtherView(SfxViewShell* pThisView, SfxViewShell const*
     pOtherView->libreOfficeKitViewCallback(nType, aPayload.getStr());
 }
 
+void SfxLokHelper::notifyOtherView(SfxViewShell* pThisView, SfxViewShell const* pOtherView, int nType,
+                                   const boost::property_tree::ptree& rTree)
+{
+    if (DisableCallbacks::disabled())
+        return;
+
+    pOtherView->libreOfficeKitViewCallback(nType, lcl_generateJSON(pThisView, rTree).getStr());
+}
+
 void SfxLokHelper::notifyOtherViews(SfxViewShell* pThisView, int nType, const OString& rKey, const OString& rPayload)
 {
     if (DisableCallbacks::disabled())
@@ -318,6 +337,24 @@ void SfxLokHelper::notifyOtherViews(SfxViewShell* pThisView, int nType, const OS
     }
 }
 
+void SfxLokHelper::notifyOtherViews(SfxViewShell* pThisView, int nType, const boost::property_tree::ptree& rTree)
+{
+    if (SfxLokHelper::getViewsCount() <= 1 || DisableCallbacks::disabled())
+        return;
+
+    // Payload is only dependent on pThisView.
+    OString aPayload = lcl_generateJSON(pThisView, rTree);
+
+    SfxViewShell* pViewShell = SfxViewShell::GetFirst();
+    while (pViewShell)
+    {
+        if (pViewShell != pThisView)
+            pViewShell->libreOfficeKitViewCallback(nType, aPayload.getStr());
+
+        pViewShell = SfxViewShell::GetNext(*pViewShell);
+    }
+}
+
 namespace {
     OUString lcl_getNameForSlot(const SfxViewShell* pShell, sal_uInt16 nWhich)
     {


More information about the Libreoffice-commits mailing list