From ed4c3eb7b350f3a4597f301a45139b31269bf95e Mon Sep 17 00:00:00 2001 From: Melissa Geels Date: Wed, 11 Aug 2021 10:44:19 +0200 Subject: [PATCH] Move cursor to edge of selection when moving caret left/right This is to mimic the behavior of many third party text editors. The reason it's not doing it when moving by word is due to that behavior being mostly the same on other editors. --- scene/gui/text_edit.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp index 1b3935dd253..932846e73e2 100644 --- a/scene/gui/text_edit.cpp +++ b/scene/gui/text_edit.cpp @@ -1584,6 +1584,12 @@ void TextEdit::_move_cursor_left(bool p_select, bool p_move_by_word) { // Handle selection if (p_select) { _pre_shift_selection(); + } else if (selection.active && !p_move_by_word) { + // If a selection is active, move cursor to start of selection + cursor_set_line(selection.from_line); + cursor_set_column(selection.from_column); + deselect(); + return; } else { deselect(); } @@ -1629,6 +1635,12 @@ void TextEdit::_move_cursor_right(bool p_select, bool p_move_by_word) { // Handle selection if (p_select) { _pre_shift_selection(); + } else if (selection.active && !p_move_by_word) { + // If a selection is active, move cursor to end of selection + cursor_set_line(selection.to_line); + cursor_set_column(selection.to_column); + deselect(); + return; } else { deselect(); }