vcl/inc/jsdialog/jsdialogbuilder.hxx | 1 + vcl/jsdialog/executor.cxx | 7 +++++-- vcl/jsdialog/jsdialogbuilder.cxx | 5 +++++ 3 files changed, 11 insertions(+), 2 deletions(-)
New commits: commit 33f97ddd549b4ebd72b5fea327378667d55796ff Author: Szymon Kłos <szymon.k...@collabora.com> AuthorDate: Thu Mar 9 12:04:36 2023 +0100 Commit: Szymon Kłos <szymon.k...@collabora.com> CommitDate: Tue Mar 21 12:36:31 2023 +0000 jsdialog: set text for textview on every key press for that we need to set text without sending back notification to not disturb user in typing we need to keep the selection at the same place Signed-off-by: Szymon Kłos <szymon.k...@collabora.com> Change-Id: Ib5c4a53e61dbc2cf28d450fb44fc5a2957ff57b6 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/148533 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/149191 Tested-by: Jenkins diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx b/vcl/inc/jsdialog/jsdialogbuilder.hxx index 19458a938c02..0c6cbaa48080 100644 --- a/vcl/inc/jsdialog/jsdialogbuilder.hxx +++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx @@ -666,6 +666,7 @@ public: JSTextView(JSDialogSender* pSender, ::VclMultiLineEdit* pTextView, SalInstanceBuilder* pBuilder, bool bTakeOwnership); virtual void set_text(const OUString& rText) override; + void set_text_without_notify(const OUString& rText); virtual void replace_selection(const OUString& rText) override; }; diff --git a/vcl/jsdialog/executor.cxx b/vcl/jsdialog/executor.cxx index 5598afa8ba19..e0d0cbb323f3 100644 --- a/vcl/jsdialog/executor.cxx +++ b/vcl/jsdialog/executor.cxx @@ -361,12 +361,15 @@ bool ExecuteAction(const std::string& nWindowId, const OString& rWidget, StringM } } - auto pTextView = dynamic_cast<weld::TextView*>(pWidget); + auto pTextView = dynamic_cast<JSTextView*>(pWidget); if (pTextView) { if (sAction == "change") { - pTextView->set_text(rData["data"]); + int rStartPos, rEndPos; + pTextView->get_selection_bounds(rStartPos, rEndPos); + pTextView->set_text_without_notify(rData["data"]); + pTextView->select_region(rStartPos, rEndPos); LOKTrigger::trigger_changed(*pTextView); return true; } diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx index 2d73c26613da..3cfe67c3b56c 100644 --- a/vcl/jsdialog/jsdialogbuilder.cxx +++ b/vcl/jsdialog/jsdialogbuilder.cxx @@ -1752,6 +1752,11 @@ void JSTextView::set_text(const OUString& rText) sendUpdate(); } +void JSTextView::set_text_without_notify(const OUString& rText) +{ + SalInstanceTextView::set_text(rText); +} + void JSTextView::replace_selection(const OUString& rText) { SalInstanceTextView::replace_selection(rText);