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 233495f76c45d2425052fb3685c04f448e85466b 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 13:46:34 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/+/158892 Tested-by: Jenkins 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 6cedb9617ec5..de2ce3679cca 100644 --- a/sc/source/ui/app/inputhdl.cxx +++ b/sc/source/ui/app/inputhdl.cxx @@ -2606,7 +2606,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 ); @@ -2701,7 +2701,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); } } @@ -2748,6 +2748,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; @@ -2757,8 +2759,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()) { @@ -2804,7 +2809,7 @@ void ScInputHandler::DataChanged( bool bFromTopNotify, bool bSetModified ) } } - if (comphelper::LibreOfficeKit::isActive() && pActiveViewSh && pInputWin) + if (bUpdateKit) { UpdateActiveView(); if (pActiveView) @@ -4269,10 +4274,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; @@ -4428,7 +4438,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 ed3fe521d94b..945a1d8973cc 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 } @@ -402,7 +402,7 @@ void ScInputWindow::StartFormula() case CELLTYPE_VALUE: { nEndPos = nLen + 1; - mxTextWindow->SetTextString("=" + rString); + mxTextWindow->SetTextString("=" + rString, true); break; } case CELLTYPE_STRING: @@ -414,7 +414,7 @@ void ScInputWindow::StartFormula() nEndPos = nLen; break; default: - mxTextWindow->SetTextString("="); + mxTextWindow->SetTextString("=", true); break; } } @@ -537,7 +537,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; @@ -563,12 +563,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() @@ -945,9 +945,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() @@ -1281,9 +1281,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() @@ -1994,7 +1994,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 @@ -2070,7 +2070,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 7d058af9da0a..d98b5a85c56f 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();