diff options
author | Jean-Michel Bernard <jmb462@gmail.com> | 2023-04-30 18:28:21 +0200 |
---|---|---|
committer | RĂ©mi Verschelde <rverschelde@gmail.com> | 2023-05-12 12:07:02 +0200 |
commit | 53df7c18e033dfe12a2136838602eb105d544168 (patch) | |
tree | a8a0e1838a4b14d00b01e396e5a2fc9d11dd44b6 /scene | |
parent | f49c69a1e77c6c6ec26c1756ceebfc7d7bed1984 (diff) |
Fix right click in selection of additional caret
(cherry picked from commit 5c06c030f2e4b9f6ca2aa3bd8942b3adc165c76a)
Diffstat (limited to 'scene')
-rw-r--r-- | scene/gui/text_edit.cpp | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp index 814af12d60..310177dda7 100644 --- a/scene/gui/text_edit.cpp +++ b/scene/gui/text_edit.cpp @@ -1847,23 +1847,28 @@ void TextEdit::gui_input(const Ref<InputEvent> &p_gui_input) { Point2i pos = get_line_column_at_pos(mpos); int row = pos.y; int col = pos.x; - int caret = carets.size() - 1; + bool selection_clicked = false; if (is_move_caret_on_right_click_enabled()) { - if (has_selection(caret)) { - int from_line = get_selection_from_line(caret); - int to_line = get_selection_to_line(caret); - int from_column = get_selection_from_column(caret); - int to_column = get_selection_to_column(caret); - - if (row < from_line || row > to_line || (row == from_line && col < from_column) || (row == to_line && col > to_column)) { - // Right click is outside the selected text. - deselect(caret); + if (has_selection()) { + for (int i = 0; i < get_caret_count(); i++) { + int from_line = get_selection_from_line(i); + int to_line = get_selection_to_line(i); + int from_column = get_selection_from_column(i); + int to_column = get_selection_to_column(i); + + if (row >= from_line && row <= to_line && (row != from_line || col >= from_column) && (row != to_line || col <= to_column)) { + // Right click in one of the selected text + selection_clicked = true; + break; + } } } - if (!has_selection(caret)) { - set_caret_line(row, true, false, 0, caret); - set_caret_column(col, true, caret); + if (!selection_clicked) { + deselect(); + remove_secondary_carets(); + set_caret_line(row, false, false); + set_caret_column(col); } merge_overlapping_carets(); } |