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();