Browse Source

Merge pull request #26809 from KoBeWi/undo_set_text_like_a_boss

Allow to undo TextEdit.set_text
Rémi Verschelde 6 years ago
parent
commit
fdea3d48b0
3 changed files with 16 additions and 13 deletions
  1. 0 1
      editor/plugins/script_text_editor.cpp
  2. 0 1
      editor/plugins/text_editor.cpp
  3. 16 11
      scene/gui/text_edit.cpp

+ 0 - 1
editor/plugins/script_text_editor.cpp

@@ -376,7 +376,6 @@ void ScriptTextEditor::reload_text() {
 	int v = te->get_v_scroll();
 
 	te->set_text(script->get_source_code());
-	te->clear_undo_history();
 	te->cursor_set_line(row);
 	te->cursor_set_column(column);
 	te->set_h_scroll(h);

+ 0 - 1
editor/plugins/text_editor.cpp

@@ -202,7 +202,6 @@ void TextEditor::reload_text() {
 	int v = te->get_v_scroll();
 
 	te->set_text(text_file->get_text());
-	te->clear_undo_history();
 	te->cursor_set_line(row);
 	te->cursor_set_column(column);
 	te->set_h_scroll(h);

+ 16 - 11
scene/gui/text_edit.cpp

@@ -4303,17 +4303,22 @@ Control::CursorShape TextEdit::get_cursor_shape(const Point2 &p_pos) const {
 void TextEdit::set_text(String p_text) {
 
 	setting_text = true;
-	_clear();
-	_insert_text_at_cursor(p_text);
-	clear_undo_history();
-	cursor.column = 0;
-	cursor.line = 0;
-	cursor.x_ofs = 0;
-	cursor.line_ofs = 0;
-	cursor.wrap_ofs = 0;
-	cursor.last_fit_x = 0;
-	cursor_set_line(0);
-	cursor_set_column(0);
+	if (!undo_enabled) {
+		_clear();
+		_insert_text_at_cursor(p_text);
+	}
+
+	if (undo_enabled) {
+		cursor_set_line(0);
+		cursor_set_column(0);
+
+		begin_complex_operation();
+		_remove_text(0, 0, MAX(0, get_line_count() - 1), MAX(get_line(MAX(get_line_count() - 1, 0)).size() - 1, 0));
+		_insert_text_at_cursor(p_text);
+		end_complex_operation();
+		selection.active = false;
+	}
+
 	update();
 	setting_text = false;