desktop/source/lib/init.cxx       |    5 +++--
 include/sfx2/viewsh.hxx           |    5 +++--
 sfx2/source/view/viewsh.cxx       |    2 +-
 sw/inc/view.hxx                   |    2 +-
 sw/inc/viscrs.hxx                 |    4 ++--
 sw/source/core/crsr/viscrs.cxx    |    6 ++++--
 sw/source/uibase/inc/wrtsh.hxx    |    2 +-
 sw/source/uibase/uiview/view.cxx  |    4 ++--
 sw/source/uibase/wrtsh/wrtsh4.cxx |    6 +++---
 test/source/lokcallback.cxx       |   10 ++++++----
 10 files changed, 26 insertions(+), 20 deletions(-)

New commits:
commit 309bffba603ae65e76148dff3add1a541a2b5d81
Author:     Luboš Luňák <l.lu...@collabora.com>
AuthorDate: Fri Nov 12 10:56:54 2021 +0100
Commit:     Luboš Luňák <l.lu...@collabora.com>
CommitDate: Fri Nov 12 13:02:08 2021 +0100

    make it explicit whether to ignore the result of getLOKPayload()
    
    Returning an empty string to signify 'ignore' was a poor design,
    as some messages types actually may have valid empty messages.
    
    Change-Id: Ia82d3d97d150bc5ef412a1bd4b1091d9b2d84385
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/124979
    Tested-by: Jenkins
    Reviewed-by: Luboš Luňák <l.lu...@collabora.com>

diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx
index 6a1e0871fceb..2191a87f5b87 100644
--- a/desktop/source/lib/init.cxx
+++ b/desktop/source/lib/init.cxx
@@ -2191,8 +2191,9 @@ void CallbackFlushHandler::enqueueUpdatedTypes()
 
 void CallbackFlushHandler::enqueueUpdatedType( int type, const SfxViewShell* 
viewShell, int viewId )
 {
-    OString payload = viewShell->getLOKPayload( type, viewId );
-    if(payload.isEmpty())
+    bool ignore = false;
+    OString payload = viewShell->getLOKPayload( type, viewId, &ignore );
+    if(ignore)
         return; // No actual payload to send.
     CallbackData callbackData(payload.getStr(), viewId);
     m_queue1.emplace_back(type);
diff --git a/include/sfx2/viewsh.hxx b/include/sfx2/viewsh.hxx
index e35c6848c9e1..fc06eb9ddbe8 100644
--- a/include/sfx2/viewsh.hxx
+++ b/include/sfx2/viewsh.hxx
@@ -346,8 +346,9 @@ public:
     virtual void libreOfficeKitViewUpdatedCallback(int nType) const override;
     virtual void libreOfficeKitViewUpdatedCallbackPerViewId(int nType, int 
nViewId, int nSourceViewId) const override;
     // Returns current payload for nType, after 
libreOfficeKitViewUpdatedCallback() or
-    // libreOfficeKitViewUpdatedCallbackPerViewId() were called.
-    virtual OString getLOKPayload(int nType, int nViewId) const;
+    // libreOfficeKitViewUpdatedCallbackPerViewId() were called. If no payload 
should
+    // be generated, the ignore flag should be set.
+    virtual OString getLOKPayload(int nType, int nViewId, bool* ignore) const;
 
     /// Set if we are doing tiled searching.
     void setTiledSearching(bool bTiledSearching);
diff --git a/sfx2/source/view/viewsh.cxx b/sfx2/source/view/viewsh.cxx
index e49899bc36eb..75826a28d128 100644
--- a/sfx2/source/view/viewsh.cxx
+++ b/sfx2/source/view/viewsh.cxx
@@ -1544,7 +1544,7 @@ void SfxViewShell::flushPendingLOKInvalidateTiles()
     // SfxViewShell itself does not delay any tile invalidations.
 }
 
-OString SfxViewShell::getLOKPayload(int nType, int /*nViewId*/) const
+OString SfxViewShell::getLOKPayload(int nType, int /*nViewId*/, bool* 
/*ignore*/) const
 {
     // SfxViewShell itself currently doesn't handle any updated-payload types.
     SAL_WARN("sfx.view", "SfxViewShell::getLOKPayload unhandled type " << 
lokCallbackTypeToString(nType));
diff --git a/sw/inc/view.hxx b/sw/inc/view.hxx
index edcf028d9f5d..d074f0d552a7 100644
--- a/sw/inc/view.hxx
+++ b/sw/inc/view.hxx
@@ -693,7 +693,7 @@ public:
 
     virtual tools::Rectangle getLOKVisibleArea() const override;
     virtual void flushPendingLOKInvalidateTiles() override;
-    virtual OString getLOKPayload(int nType, int nViewId) const override;
+    virtual OString getLOKPayload(int nType, int nViewId, bool* ignore) const 
override;
 };
 
 inline tools::Long SwView::GetXScroll() const
diff --git a/sw/inc/viscrs.hxx b/sw/inc/viscrs.hxx
index 3c355e01800c..6755b548e8a0 100644
--- a/sw/inc/viscrs.hxx
+++ b/sw/inc/viscrs.hxx
@@ -60,7 +60,7 @@ public:
     void SetPosAndShow(SfxViewShell const * pViewShell);
     const vcl::Cursor& GetTextCursor() const;
 
-    OString getLOKPayload(int nType, int nViewId) const;
+    OString getLOKPayload(int nType, int nViewId, bool* ignore) const;
 };
 
 // From here classes/methods for selections.
@@ -114,7 +114,7 @@ public:
     static void Get1PixelInLogic( const SwViewShell& rSh,
                                     tools::Long* pX = nullptr, tools::Long* pY 
= nullptr );
 
-    OString getLOKPayload(int nType, int nViewId) const;
+    OString getLOKPayload(int nType, int nViewId, bool* ignore) const;
 };
 
 class SW_DLLPUBLIC SwShellCursor : public virtual SwCursor, public 
SwSelPaintRects
diff --git a/sw/source/core/crsr/viscrs.cxx b/sw/source/core/crsr/viscrs.cxx
index d28dab2c7d98..26e43813575d 100644
--- a/sw/source/core/crsr/viscrs.cxx
+++ b/sw/source/core/crsr/viscrs.cxx
@@ -266,7 +266,7 @@ void SwVisibleCursor::SetPosAndShow(SfxViewShell const * 
pViewShell)
     m_aTextCursor.Show();
 }
 
-OString SwVisibleCursor::getLOKPayload(int nType, int nViewId) const
+OString SwVisibleCursor::getLOKPayload(int nType, int nViewId, bool*) const
 {
     assert(nType == LOK_CALLBACK_INVALIDATE_VISIBLE_CURSOR || nType == 
LOK_CALLBACK_INVALIDATE_VIEW_CURSOR);
     if (comphelper::LibreOfficeKit::isActive())
@@ -505,7 +505,7 @@ void SwSelPaintRects::Show(std::vector<OString>* 
pSelectionRectangles)
         pSelectionRectangles->push_back(sRect);
 }
 
-OString SwSelPaintRects::getLOKPayload( int nType, int nViewId ) const
+OString SwSelPaintRects::getLOKPayload( int nType, int nViewId, bool* ignore ) 
const
 {
     switch( nType )
     {
@@ -525,12 +525,14 @@ OString SwSelPaintRects::getLOKPayload( int nType, int 
nViewId ) const
             {
                 if (aStartRect.HasArea())
                     return aStartRect.SVRect().toString();
+                *ignore = true;
                 return OString();
             }
             else // LOK_CALLBACK_TEXT_SELECTION_END
             {
                 if (aEndRect.HasArea())
                     return aEndRect.SVRect().toString();
+                *ignore = true;
                 return OString();
             }
         }
diff --git a/sw/source/uibase/inc/wrtsh.hxx b/sw/source/uibase/inc/wrtsh.hxx
index c86de9ef55de..77136362c81f 100644
--- a/sw/source/uibase/inc/wrtsh.hxx
+++ b/sw/source/uibase/inc/wrtsh.hxx
@@ -499,7 +499,7 @@ typedef bool (SwWrtShell::*FNSimpleMove)();
     void InvalidateOutlineContentVisibility();
     bool GetAttrOutlineContentVisible(const size_t nPos);
 
-    OString getLOKPayload(int nType, int nViewId) const;
+    OString getLOKPayload(int nType, int nViewId, bool* ignore) const;
 
 private:
 
diff --git a/sw/source/uibase/uiview/view.cxx b/sw/source/uibase/uiview/view.cxx
index 84226f9e2942..7d418acd17b0 100644
--- a/sw/source/uibase/uiview/view.cxx
+++ b/sw/source/uibase/uiview/view.cxx
@@ -1916,11 +1916,11 @@ void SwView::flushPendingLOKInvalidateTiles()
     pSh->FlushPendingLOKInvalidateTiles();
 }
 
-OString SwView::getLOKPayload(int nType, int nViewId) const
+OString SwView::getLOKPayload(int nType, int nViewId, bool* ignore) const
 {
     SwWrtShell* pSh = GetWrtShellPtr();
     assert(pSh);
-    return pSh->getLOKPayload(nType, nViewId);
+    return pSh->getLOKPayload(nType, nViewId, ignore);
 }
 
 OUString SwView::GetDataSourceName() const
diff --git a/sw/source/uibase/wrtsh/wrtsh4.cxx 
b/sw/source/uibase/wrtsh/wrtsh4.cxx
index 0bafa1e75941..36cec11cc09c 100644
--- a/sw/source/uibase/wrtsh/wrtsh4.cxx
+++ b/sw/source/uibase/wrtsh/wrtsh4.cxx
@@ -234,18 +234,18 @@ bool SwWrtShell::BwdPara_()
     return bRet;
 }
 
-OString SwWrtShell::getLOKPayload(int nType, int nViewId) const
+OString SwWrtShell::getLOKPayload(int nType, int nViewId, bool* ignore) const
 {
     switch(nType)
     {
         case LOK_CALLBACK_INVALIDATE_VISIBLE_CURSOR:
         case LOK_CALLBACK_INVALIDATE_VIEW_CURSOR:
-            return GetVisibleCursor()->getLOKPayload(nType, nViewId);
+            return GetVisibleCursor()->getLOKPayload(nType, nViewId, ignore);
         case LOK_CALLBACK_TEXT_SELECTION:
         case LOK_CALLBACK_TEXT_SELECTION_START:
         case LOK_CALLBACK_TEXT_SELECTION_END:
         case LOK_CALLBACK_TEXT_VIEW_SELECTION:
-            return GetCursor_()->getLOKPayload( nType, nViewId );
+            return GetCursor_()->getLOKPayload( nType, nViewId, ignore );
     }
     abort();
 }
diff --git a/test/source/lokcallback.cxx b/test/source/lokcallback.cxx
index 90ca5f2c9203..323ba4af1f10 100644
--- a/test/source/lokcallback.cxx
+++ b/test/source/lokcallback.cxx
@@ -151,8 +151,9 @@ void TestLokCallbackWrapper::flushLOKData()
 
     for (int type : updatedTypes)
     {
-        OString payload = viewShell->getLOKPayload(type, m_viewId);
-        if (!payload.isEmpty())
+        bool ignore = false;
+        OString payload = viewShell->getLOKPayload(type, m_viewId, &ignore);
+        if (!ignore)
             libreOfficeKitViewCallback(type, payload.getStr());
     }
     for (const PerViewIdData& data : updatedTypesPerViewId)
@@ -161,8 +162,9 @@ void TestLokCallbackWrapper::flushLOKData()
             return shell->GetViewShellId().get() == data.sourceViewId;
         });
         assert(viewShell != nullptr);
-        OString payload = viewShell->getLOKPayload(data.type, data.viewId);
-        if (!payload.isEmpty())
+        bool ignore = false;
+        OString payload = viewShell->getLOKPayload(data.type, data.viewId, 
&ignore);
+        if (!ignore)
             libreOfficeKitViewCallbackWithViewId(data.type, payload.getStr(), 
data.viewId);
     }
 }

Reply via email to