Browse Source

Merge pull request #53330 from jmb462/fix-bad-caret-position-after-ctrl-x

Fix caret position and viewport centering after deleting line (Ctrl-X)
Rémi Verschelde 3 years ago
parent
commit
adc9500e54
1 changed files with 14 additions and 1 deletions
  1. 14 1
      scene/gui/text_edit.cpp

+ 14 - 1
scene/gui/text_edit.cpp

@@ -5072,10 +5072,12 @@ void TextEdit::_cut_internal() {
 	}
 
 	int cl = get_caret_line();
+	int cc = get_caret_column();
+	int indent_level = get_indent_level(cl);
+	double hscroll = get_h_scroll();
 
 	String clipboard = text[cl];
 	DisplayServer::get_singleton()->clipboard_set(clipboard);
-	set_caret_line(cl);
 	set_caret_column(0);
 
 	if (cl == 0 && get_line_count() > 1) {
@@ -5086,6 +5088,17 @@ void TextEdit::_cut_internal() {
 		set_caret_line(get_caret_line() + 1);
 	}
 
+	// Correct the visualy perceived caret column taking care of identation level of the lines.
+	int diff_indent = indent_level - get_indent_level(get_caret_line());
+	cc += diff_indent;
+	if (diff_indent != 0) {
+		cc += diff_indent > 0 ? -1 : 1;
+	}
+
+	// Restore horizontal scroll and caret column modified by the backspace() call.
+	set_h_scroll(hscroll);
+	set_caret_column(cc);
+
 	cut_copy_line = clipboard;
 }