Fix right click in selection of additional caret

(cherry picked from commit 5c06c030f2e4b9f6ca2aa3bd8942b3adc165c76a)
This commit is contained in:
Jean-Michel Bernard
2023-05-12 12:07:02 +02:00
committed by Rémi Verschelde
parent f49c69a1e7
commit 53df7c18e0
2 changed files with 34 additions and 23 deletions
+17 -11
View File
@@ -1800,20 +1800,26 @@ void ScriptTextEditor::_text_edit_gui_input(const Ref<InputEvent> &ev) {
int col = pos.x;
tx->set_move_caret_on_right_click_enabled(EDITOR_GET("text_editor/behavior/navigation/move_caret_on_right_click"));
int caret_clicked = -1;
if (tx->is_move_caret_on_right_click_enabled()) {
tx->remove_secondary_carets();
if (tx->has_selection()) {
int from_line = tx->get_selection_from_line();
int to_line = tx->get_selection_to_line();
int from_column = tx->get_selection_from_column();
int to_column = tx->get_selection_to_column();
for (int i = 0; i < tx->get_caret_count(); i++) {
int from_line = tx->get_selection_from_line(i);
int to_line = tx->get_selection_to_line(i);
int from_column = tx->get_selection_from_column(i);
int to_column = tx->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 is outside the selected text
tx->deselect();
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
caret_clicked = i;
break;
}
}
}
if (!tx->has_selection()) {
if (!caret_clicked) {
tx->deselect();
tx->remove_secondary_carets();
caret_clicked = 0;
tx->set_caret_line(row, false, false);
tx->set_caret_column(col);
}
@@ -1821,10 +1827,10 @@ void ScriptTextEditor::_text_edit_gui_input(const Ref<InputEvent> &ev) {
String word_at_pos = tx->get_word_at_pos(local_pos);
if (word_at_pos.is_empty()) {
word_at_pos = tx->get_word_under_caret(0);
word_at_pos = tx->get_word_under_caret(caret_clicked);
}
if (word_at_pos.is_empty()) {
word_at_pos = tx->get_selected_text(0);
word_at_pos = tx->get_selected_text(caret_clicked);
}
bool has_color = (word_at_pos == "Color");