浏览代码

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.
Melissa Geels 4 年之前
父节点
当前提交
ed4c3eb7b3
共有 1 个文件被更改,包括 12 次插入0 次删除
  1. 12 0
      scene/gui/text_edit.cpp

+ 12 - 0
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();
 	}