sc/source/ui/app/inputhdl.cxx |   28 +++++++++++++++++++---------
 sc/source/ui/app/inputwin.cxx |   28 ++++++++++++++--------------
 sc/source/ui/inc/inputwin.hxx |   10 +++++-----
 3 files changed, 38 insertions(+), 28 deletions(-)

New commits:
commit 97b8b9685c2df242608a429ab8526b14ea60ad6f
Author:     Caolán McNamara <caolan.mcnam...@collabora.com>
AuthorDate: Fri Nov 3 11:46:32 2023 +0000
Commit:     Caolán McNamara <caolan.mcnam...@collabora.com>
CommitDate: Fri Nov 3 14:43:14 2023 +0100

    reduce jsdialog formulabar updates from 6 to 3 per keystroke
    
    SetTextString will emit one, so skip doing that if we are going to be
    followed by another emission that will override the earlier one.
    
    Change-Id: I82d804d57cd9647631bd338a3a0c4dd11989b9fc
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/158876
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-by: Szymon Kłos <szymon.k...@collabora.com>
    Reviewed-by: Caolán McNamara <caolan.mcnam...@collabora.com>

diff --git a/sc/source/ui/app/inputhdl.cxx b/sc/source/ui/app/inputhdl.cxx
index b90b1b100be4..a816210ea6a3 100644
--- a/sc/source/ui/app/inputhdl.cxx
+++ b/sc/source/ui/app/inputhdl.cxx
@@ -2611,7 +2611,7 @@ bool ScInputHandler::StartTable( sal_Unicode cTyped, bool 
bFromCommand, bool bIn
                 aStr = aStr.copy(1, aStr.getLength() -2);
                 mpEditEngine->SetTextCurrentDefaults(aStr);
                 if ( pInputWin )
-                    pInputWin->SetTextString(aStr);
+                    pInputWin->SetTextString(aStr, true);
             }
 
             UpdateAdjust( cTyped );
@@ -2706,7 +2706,7 @@ IMPL_LINK_NOARG(ScInputHandler, ModifyHdl, 
LinkParamNone*, void)
         // wrapped by DataChanging/DataChanged calls (like Drag&Drop)
         OUString aText(ScEditUtil::GetMultilineString(*mpEditEngine));
         lcl_RemoveTabs(aText);
-        pInputWin->SetTextString(aText);
+        pInputWin->SetTextString(aText, true);
     }
 }
 
@@ -2753,6 +2753,8 @@ void ScInputHandler::DataChanged( bool bFromTopNotify, 
bool bSetModified )
 
     UpdateParenthesis(); // Highlight parentheses anew
 
+    const bool bUpdateKit = comphelper::LibreOfficeKit::isActive() && 
pActiveViewSh && pInputWin;
+
     if (eMode==SC_INPUT_TYPE || eMode==SC_INPUT_TABLE)
     {
         OUString aText;
@@ -2762,8 +2764,11 @@ void ScInputHandler::DataChanged( bool bFromTopNotify, 
bool bSetModified )
             aText = GetEditText(mpEditEngine.get());
         lcl_RemoveTabs(aText);
 
-        if ( pInputWin )
-            pInputWin->SetTextString( aText );
+        if (pInputWin)
+        {
+            // If we will end up updating LoKit at the end, we can skip it here
+            pInputWin->SetTextString(aText, !bUpdateKit);
+        }
 
         if (comphelper::LibreOfficeKit::isActive())
         {
@@ -2809,7 +2814,7 @@ void ScInputHandler::DataChanged( bool bFromTopNotify, 
bool bSetModified )
         }
     }
 
-    if (comphelper::LibreOfficeKit::isActive() && pActiveViewSh && pInputWin)
+    if (bUpdateKit)
     {
         UpdateActiveView();
         if (pActiveView)
@@ -4273,10 +4278,15 @@ void ScInputHandler::NotifyChange( const 
ScInputHdlState* pState,
                         bTextValid = true;              //! To begin with 
remember as a string
                     }
 
-                    if ( pInputWin )
-                        pInputWin->SetTextString(aString);
+                    const bool bUpdateKit = 
comphelper::LibreOfficeKit::isActive() && pActiveViewSh;
 
-                    if (comphelper::LibreOfficeKit::isActive() && 
pActiveViewSh)
+                    if (pInputWin)
+                    {
+                        // If we will end up updating LoKit after this, we can 
skip it here
+                        pInputWin->SetTextString(aString, !bUpdateKit);
+                    }
+
+                    if (bUpdateKit)
                     {
                         UpdateActiveView();
                         EditView* pActiveView = pTopView ? pTopView : 
pTableView;
@@ -4432,7 +4442,7 @@ IMPL_LINK_NOARG( ScInputHandler, DelayTimer, Timer*, void 
)
         if ( pInputWin )
         {
             pInputWin->SetPosString( OUString() );
-            pInputWin->SetTextString( OUString() );
+            pInputWin->SetTextString(OUString(), true);
             pInputWin->Disable();
         }
 
diff --git a/sc/source/ui/app/inputwin.cxx b/sc/source/ui/app/inputwin.cxx
index 5667766b827f..7d9890c5858d 100644
--- a/sc/source/ui/app/inputwin.cxx
+++ b/sc/source/ui/app/inputwin.cxx
@@ -259,14 +259,14 @@ ScInputWindow::ScInputWindow( vcl::Window* pParent, const 
SfxBindings* pBind ) :
         // Switch over while the Function AutoPilot is active
         // -> show content of the Function AutoPilot again
         // Also show selection (remember at the InputHdl)
-        mxTextWindow->SetTextString( pInputHdl->GetFormString() );
+        mxTextWindow->SetTextString(pInputHdl->GetFormString(), true);
     }
     else if (pInputHdl && pInputHdl->IsInputMode())
     {
         // If the input row was hidden while editing (e.g. when editing a 
formula
         // and then switching to another document or the help), display the 
text
         // we just edited from the InputHandler
-        mxTextWindow->SetTextString( pInputHdl->GetEditString() ); // Display 
text
+        mxTextWindow->SetTextString(pInputHdl->GetEditString(), true); // 
Display text
         if ( pInputHdl->IsTopMode() )
             pInputHdl->SetMode( SC_INPUT_TABLE ); // Focus ends up at the 
bottom anyways
     }
@@ -396,7 +396,7 @@ void ScInputWindow::StartFormula()
                 case CELLTYPE_VALUE:
                 {
                     nEndPos = nLen + 1;
-                    mxTextWindow->SetTextString("=" +  rString);
+                    mxTextWindow->SetTextString("=" +  rString, true);
                     break;
                 }
                 case CELLTYPE_STRING:
@@ -408,7 +408,7 @@ void ScInputWindow::StartFormula()
                     nEndPos = nLen;
                     break;
                 default:
-                    mxTextWindow->SetTextString("=");
+                    mxTextWindow->SetTextString("=", true);
                     break;
             }
         }
@@ -531,7 +531,7 @@ void ScInputWindow::SetFuncString( const OUString& rString, 
bool bDoEdit )
 
     if ( bDoEdit )
         mxTextWindow->TextGrabFocus();
-    mxTextWindow->SetTextString( rString );
+    mxTextWindow->SetTextString(rString, true);
     EditView* pView = mxTextWindow->GetEditView();
     if (!pView)
         return;
@@ -557,12 +557,12 @@ void ScInputWindow::SetPosString( const OUString& rStr )
         aWndPos->SetPos( rStr );
 }
 
-void ScInputWindow::SetTextString( const OUString& rString )
+void ScInputWindow::SetTextString( const OUString& rString, bool bKitUpdate )
 {
     if (rString.getLength() <= 32767)
-        mxTextWindow->SetTextString(rString);
+        mxTextWindow->SetTextString(rString, bKitUpdate);
     else
-        mxTextWindow->SetTextString(rString.copy(0, 32767));
+        mxTextWindow->SetTextString(rString.copy(0, 32767), bKitUpdate);
 }
 
 void ScInputWindow::SetOkCancelMode()
@@ -939,9 +939,9 @@ const OUString& ScInputBarGroup::GetTextString() const
     return mxTextWndGroup->GetTextString();
 }
 
-void ScInputBarGroup::SetTextString( const OUString& rString )
+void ScInputBarGroup::SetTextString(const OUString& rString, bool bKitUpdate)
 {
-    mxTextWndGroup->SetTextString(rString);
+    mxTextWndGroup->SetTextString(rString, bKitUpdate);
 }
 
 void ScInputBarGroup::Resize()
@@ -1275,9 +1275,9 @@ void ScTextWndGroup::SetFormulaMode(bool bSet)
     mxTextWnd->SetFormulaMode(bSet);
 }
 
-void ScTextWndGroup::SetTextString(const OUString& rString)
+void ScTextWndGroup::SetTextString(const OUString& rString, bool bKitUpdate)
 {
-    mxTextWnd->SetTextString(rString);
+    mxTextWnd->SetTextString(rString, bKitUpdate);
 }
 
 void ScTextWndGroup::StartEditEngine()
@@ -1988,7 +1988,7 @@ static sal_Int32 findFirstNonMatchingChar(const OUString& 
rStr1, const OUString&
     return i;
 }
 
-void ScTextWnd::SetTextString( const OUString& rNewString )
+void ScTextWnd::SetTextString( const OUString& rNewString, bool bKitUpdate )
 {
     // Ideally it would be best to create on demand the EditEngine/EditView 
here, but... for
     // the initialisation scenario where a cell is first clicked on we end up 
with the text in the
@@ -2064,7 +2064,7 @@ void ScTextWnd::SetTextString( const OUString& rNewString 
)
         bInputMode = false;
     }
 
-    if (comphelper::LibreOfficeKit::isActive())
+    if (bKitUpdate && comphelper::LibreOfficeKit::isActive())
     {
         ESelection aSel = m_xEditView ? m_xEditView->GetSelection() : 
ESelection();
         ScInputHandler::LOKSendFormulabarUpdate(m_xEditView.get(), 
SfxViewShell::Current(), rNewString, aSel);
diff --git a/sc/source/ui/inc/inputwin.hxx b/sc/source/ui/inc/inputwin.hxx
index 823c9e177ed8..fe59bcc599b3 100644
--- a/sc/source/ui/inc/inputwin.hxx
+++ b/sc/source/ui/inc/inputwin.hxx
@@ -48,7 +48,7 @@ class ScTextWndBase
 public:
     virtual void            InsertAccessibleTextData( 
ScAccessibleEditLineTextData& rTextData ) = 0;
     virtual void            RemoveAccessibleTextData( 
ScAccessibleEditLineTextData& rTextData ) = 0;
-    virtual void            SetTextString( const OUString& rString ) = 0;
+    virtual void            SetTextString( const OUString& rString, bool 
bKitUpdate ) = 0;
     virtual const OUString& GetTextString() const = 0;
     virtual void            StartEditEngine() = 0;
     virtual void            StopEditEngine( bool bAll ) = 0;
@@ -70,7 +70,7 @@ public:
     virtual void SetDrawingArea(weld::DrawingArea* pDrawingArea) override;
     virtual ~ScTextWnd() override;
 
-    virtual void            SetTextString( const OUString& rString ) override;
+    virtual void            SetTextString( const OUString& rString, bool 
bKitUpdate ) override;
     virtual const OUString& GetTextString() const override;
 
     bool                    IsInputActive() override;
@@ -223,7 +223,7 @@ public:
     void                    SetScrollPolicy();
     void                    SetNumLines(tools::Long nLines);
     virtual void            SetFormulaMode(bool bSet) override;
-    virtual void            SetTextString(const OUString& rString) override;
+    virtual void            SetTextString(const OUString& rString, bool 
bKitUpdate) override;
     virtual void            StartEditEngine() override;
     virtual void            StopEditEngine(bool bAll) override;
     virtual void            TextGrabFocus() override;
@@ -248,7 +248,7 @@ public:
     virtual void            dispose() override;
     virtual void            
InsertAccessibleTextData(ScAccessibleEditLineTextData& rTextData) override;
     virtual void            
RemoveAccessibleTextData(ScAccessibleEditLineTextData& rTextData) override;
-    void                    SetTextString(const OUString& rString) override;
+    void                    SetTextString(const OUString& rString, bool 
bKitUpdate) override;
     void                    StartEditEngine() override;
     virtual EditView*       GetEditView() const override;
     virtual bool            HasEditView() const override;
@@ -299,7 +299,7 @@ public:
 
     void            SetFuncString( const OUString& rString, bool bDoEdit = 
true );
     void            SetPosString( const OUString& rStr );
-    void            SetTextString( const OUString& rString );
+    void            SetTextString(const OUString& rString, bool bKitUpdate);
 
     void            SetOkCancelMode();
     void            SetSumAssignMode();

Reply via email to