From 5c9bf33b0a6ffc3b87c4f45c3063f84953ef0e7d Mon Sep 17 00:00:00 2001 From: Magnus Norddahl Date: Tue, 29 Jul 2025 00:09:50 +0200 Subject: [PATCH] Fix lineedit selection bug --- .../zwidget/widgets/lineedit/lineedit.h | 1 - libraries/ZWidget/src/core/widget.cpp | 2 +- .../ZWidget/src/widgets/lineedit/lineedit.cpp | 27 ++++++------------- 3 files changed, 9 insertions(+), 21 deletions(-) diff --git a/libraries/ZWidget/include/zwidget/widgets/lineedit/lineedit.h b/libraries/ZWidget/include/zwidget/widgets/lineedit/lineedit.h index 8c5dcfa89..9c5a4b198 100644 --- a/libraries/ZWidget/include/zwidget/widgets/lineedit/lineedit.h +++ b/libraries/ZWidget/include/zwidget/widgets/lineedit/lineedit.h @@ -136,7 +136,6 @@ private: unsigned int blink_timer = 0; int clip_start_offset = 0; int clip_end_offset = 0; - bool ignore_mouse_events = false; struct UndoInfo { diff --git a/libraries/ZWidget/src/core/widget.cpp b/libraries/ZWidget/src/core/widget.cpp index e0c637f08..f431a6917 100644 --- a/libraries/ZWidget/src/core/widget.cpp +++ b/libraries/ZWidget/src/core/widget.cpp @@ -409,7 +409,7 @@ bool Widget::IsVisible() void Widget::SetFocus() { Widget* window = Window(); - if (window) + if (window && window->FocusWidget != this) { if (window->FocusWidget) window->FocusWidget->OnLostFocus(); diff --git a/libraries/ZWidget/src/widgets/lineedit/lineedit.cpp b/libraries/ZWidget/src/widgets/lineedit/lineedit.cpp index b34a18c5e..336ac9882 100644 --- a/libraries/ZWidget/src/widgets/lineedit/lineedit.cpp +++ b/libraries/ZWidget/src/widgets/lineedit/lineedit.cpp @@ -280,7 +280,7 @@ void LineEdit::SetSelectAllOnFocusGain(bool enable) void LineEdit::OnMouseMove(const Point& pos) { - if (mouse_selecting && !ignore_mouse_events) + if (mouse_selecting) { if (pos.x < 0.0 || pos.x >= GetWidth()) { @@ -331,23 +331,13 @@ bool LineEdit::OnMouseUp(const Point& pos, InputKey key) { if (mouse_selecting && key == InputKey::LeftMouse) { - if (ignore_mouse_events) // This prevents text selection from changing from what was set when focus was gained. - { - ReleasePointerCapture(); - ignore_mouse_events = false; - mouse_selecting = false; - } - else - { - scroll_timer->Stop(); - ReleasePointerCapture(); - mouse_selecting = false; - int sel_end = GetCharacterIndex(pos.x); - SetSelectionLength(sel_end - selection_start); - cursor_pos = sel_end; - SetFocus(); - Update(); - } + scroll_timer->Stop(); + ReleasePointerCapture(); + mouse_selecting = false; + int sel_end = GetCharacterIndex(pos.x); + SetSelectionLength(sel_end - selection_start); + cursor_pos = sel_end; + Update(); } return true; } @@ -604,7 +594,6 @@ void LineEdit::OnSetFocus() timer->Start(500); if (select_all_on_focus_gain) SelectAll(); - ignore_mouse_events = true; cursor_pos = (int)text.length(); Update();