|
@@ -1805,20 +1805,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();
|
|
|
-
|
|
|
- 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();
|
|
|
+ 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 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);
|
|
|
}
|
|
@@ -1826,10 +1832,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");
|