summaryrefslogtreecommitdiffstats
path: root/scene/gui/text_edit.cpp
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2024-05-02 17:31:47 +0200
committerRémi Verschelde <rverschelde@gmail.com>2024-05-02 17:31:47 +0200
commit4e9543d8494f175bc0e772541a15c059bf6d6835 (patch)
treef18c7f61f852e98fd5205646fbdce9fc54daaa99 /scene/gui/text_edit.cpp
parent1bee81242e92e9032f53ef94745f956a5006d22e (diff)
parent0162683da4ac3f1505c114435d1f466cd606a5fc (diff)
downloadredot-engine-4e9543d8494f175bc0e772541a15c059bf6d6835.tar.gz
Merge pull request #91457 from kitbdev/fix-multicaret-disabled
Fix TextEdit crash with multiple carets disabled and paste
Diffstat (limited to 'scene/gui/text_edit.cpp')
-rw-r--r--scene/gui/text_edit.cpp19
1 files changed, 16 insertions, 3 deletions
diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp
index 4fda49a877..49cfa8a030 100644
--- a/scene/gui/text_edit.cpp
+++ b/scene/gui/text_edit.cpp
@@ -4494,6 +4494,9 @@ void TextEdit::set_multiple_carets_enabled(bool p_enabled) {
multi_carets_enabled = p_enabled;
if (!multi_carets_enabled) {
remove_secondary_carets();
+ multicaret_edit_count = 0;
+ multicaret_edit_ignore_carets.clear();
+ multicaret_edit_merge_queued = false;
}
}
@@ -4568,6 +4571,9 @@ int TextEdit::get_caret_count() const {
}
void TextEdit::add_caret_at_carets(bool p_below) {
+ if (!multi_carets_enabled) {
+ return;
+ }
const int last_line_max_wrap = get_line_wrap_count(text.size() - 1);
begin_multicaret_edit();
@@ -4594,6 +4600,7 @@ void TextEdit::add_caret_at_carets(bool p_below) {
// Add a new caret.
int new_caret_index = add_caret(caret_line, caret_column);
+ ERR_FAIL_COND_MSG(new_caret_index < 0, "Failed to add a caret.");
// Copy the selection origin and last fit.
set_selection_origin_line(selection_origin_line, true, -1, new_caret_index);
@@ -4733,7 +4740,7 @@ void TextEdit::collapse_carets(int p_from_line, int p_from_column, int p_to_line
// Caret was in the collapsed area.
set_caret_line(collapse_line, false, true, -1, i);
set_caret_column(collapse_column, false, i);
- if (is_in_mulitcaret_edit()) {
+ if (is_in_mulitcaret_edit() && get_caret_count() > 1) {
multicaret_edit_ignore_carets.insert(i);
}
any_collapsed = true;
@@ -4746,7 +4753,7 @@ void TextEdit::collapse_carets(int p_from_line, int p_from_column, int p_to_line
deselect(i);
set_caret_line(collapse_line, false, true, -1, i);
set_caret_column(collapse_column, false, i);
- if (is_in_mulitcaret_edit()) {
+ if (is_in_mulitcaret_edit() && get_caret_count() > 1) {
multicaret_edit_ignore_carets.insert(i);
}
any_collapsed = true;
@@ -4872,10 +4879,16 @@ void TextEdit::merge_overlapping_carets() {
// Starts a multicaret edit operation. Call this before iterating over the carets and call [end_multicaret_edit] afterwards.
void TextEdit::begin_multicaret_edit() {
+ if (!multi_carets_enabled) {
+ return;
+ }
multicaret_edit_count++;
}
void TextEdit::end_multicaret_edit() {
+ if (!multi_carets_enabled) {
+ return;
+ }
if (multicaret_edit_count > 0) {
multicaret_edit_count--;
}
@@ -7060,7 +7073,7 @@ void TextEdit::_paste_internal(int p_caret) {
begin_complex_operation();
begin_multicaret_edit();
Vector<int> sorted_carets = get_sorted_carets();
- for (int i = 0; i < get_caret_count(); i++) {
+ for (int i = 0; i < sorted_carets.size(); i++) {
int caret_index = sorted_carets[i];
if (p_caret != -1 && p_caret != caret_index) {
continue;