Browse Source

Merge pull request #8500 from Paulb23/space_indent_fixes

Space indent fixes
Rémi Verschelde 8 years ago
parent
commit
8c4b7fcbb6
2 changed files with 21 additions and 8 deletions
  1. 7 7
      editor/plugins/script_editor_plugin.cpp
  2. 14 1
      editor/plugins/script_text_editor.cpp

+ 7 - 7
editor/plugins/script_editor_plugin.cpp

@@ -1534,13 +1534,6 @@ void ScriptEditor::save_all_scripts() {
 		if (!se)
 			continue;
 
-		if (!se->is_unsaved())
-			continue;
-
-		if (trim_trailing_whitespace_on_save) {
-			se->trim_trailing_whitespace();
-		}
-
 		if (convert_indent_on_save) {
 			if (use_space_indentation) {
 				se->convert_indent_to_spaces();
@@ -1549,6 +1542,13 @@ void ScriptEditor::save_all_scripts() {
 			}
 		}
 
+		if (trim_trailing_whitespace_on_save) {
+			se->trim_trailing_whitespace();
+		}
+
+		if (!se->is_unsaved())
+			continue;
+
 		Ref<Script> script = se->get_edited_script();
 		if (script.is_valid())
 			se->apply_code();

+ 14 - 1
editor/plugins/script_text_editor.cpp

@@ -285,6 +285,9 @@ void ScriptTextEditor::convert_indent_to_spaces() {
 		indent += " ";
 	}
 
+	int cursor_line = tx->cursor_get_line();
+	int cursor_column = tx->cursor_get_column();
+
 	bool changed_indentation = false;
 	for (int i = 0; i < tx->get_line_count(); i++) {
 		String line = tx->get_line(i);
@@ -300,6 +303,9 @@ void ScriptTextEditor::convert_indent_to_spaces() {
 					tx->begin_complex_operation();
 					changed_indentation = true;
 				}
+				if (cursor_line == i && cursor_column > j) {
+					cursor_column += indent_size - 1;
+				}
 				line = line.left(j) + indent + line.right(j + 1);
 			}
 			j++;
@@ -307,6 +313,7 @@ void ScriptTextEditor::convert_indent_to_spaces() {
 		tx->set_line(i, line);
 	}
 	if (changed_indentation) {
+		tx->cursor_set_column(cursor_column);
 		tx->end_complex_operation();
 		tx->update();
 	}
@@ -323,6 +330,9 @@ void ScriptTextEditor::convert_indent_to_tabs() {
 	int indent_size = EditorSettings::get_singleton()->get("text_editor/indent/size");
 	indent_size -= 1;
 
+	int cursor_line = tx->cursor_get_line();
+	int cursor_column = tx->cursor_get_column();
+
 	bool changed_indentation = false;
 	for (int i = 0; i < tx->get_line_count(); i++) {
 		String line = tx->get_line(i);
@@ -342,7 +352,9 @@ void ScriptTextEditor::convert_indent_to_tabs() {
 						tx->begin_complex_operation();
 						changed_indentation = true;
 					}
-
+					if (cursor_line == i && cursor_column > j) {
+						cursor_column -= indent_size;
+					}
 					line = line.left(j - indent_size) + "\t" + line.right(j + 1);
 					j = 0;
 					space_count = -1;
@@ -355,6 +367,7 @@ void ScriptTextEditor::convert_indent_to_tabs() {
 		tx->set_line(i, line);
 	}
 	if (changed_indentation) {
+		tx->cursor_set_column(cursor_column);
 		tx->end_complex_operation();
 		tx->update();
 	}