Browse Source

Merge pull request #17754 from Crazy-P/Resloves_Replace_all_doesnt_replace_all

Resloves Replace all doesnt replace all
Juan Linietsky 7 years ago
parent
commit
b6bf26a549
1 changed files with 27 additions and 23 deletions
  1. 27 23
      editor/code_editor.cpp

+ 27 - 23
editor/code_editor.cpp

@@ -212,35 +212,39 @@ void FindReplaceBar::_replace_all() {
 
 
 	text_edit->begin_complex_operation();
 	text_edit->begin_complex_operation();
 
 
-	while (search_next()) {
-
-		// replace area
-		Point2i match_from(result_line, result_col);
-		Point2i match_to(result_line, result_col + search_text_len);
-
-		if (match_from < prev_match)
-			break; // done
+	if (search_current()) {
+		do {
+			// replace area
+			Point2i match_from(result_line, result_col);
+			Point2i match_to(result_line, result_col + search_text_len);
+
+			if (match_from < prev_match) {
+				break; // done
+			}
 
 
-		prev_match = Point2i(result_line, result_col + replace_text.length());
+			prev_match = Point2i(result_line, result_col + replace_text.length());
 
 
-		text_edit->unfold_line(result_line);
-		text_edit->select(result_line, result_col, result_line, match_to.y);
+			text_edit->unfold_line(result_line);
+			text_edit->select(result_line, result_col, result_line, match_to.y);
 
 
-		if (selection_enabled && is_selection_only()) {
+			if (selection_enabled && is_selection_only()) {
+				if (match_from < selection_begin || match_to > selection_end) {
+					continue;
+				}
 
 
-			if (match_from < selection_begin || match_to > selection_end)
-				continue;
+				// replace but adjust selection bounds
+				text_edit->insert_text_at_cursor(replace_text);
+				if (match_to.x == selection_end.x) {
+					selection_end.y += replace_text.length() - search_text_len;
+				}
 
 
-			// replace but adjust selection bounds
-			text_edit->insert_text_at_cursor(replace_text);
-			if (match_to.x == selection_end.x)
-				selection_end.y += replace_text.length() - search_text_len;
-		} else {
-			// just replace
-			text_edit->insert_text_at_cursor(replace_text);
-		}
+			} else {
+				// just replace
+				text_edit->insert_text_at_cursor(replace_text);
+			}
 
 
-		rc++;
+			rc++;
+		} while (search_next());
 	}
 	}
 
 
 	text_edit->end_complex_operation();
 	text_edit->end_complex_operation();