summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2023-05-08 12:20:25 +0200
committerRémi Verschelde <rverschelde@gmail.com>2023-05-08 12:20:25 +0200
commit32fbba4bf6692d77ace59044d9080f5d1aa9113a (patch)
tree94ca4011e9fca52ca4d4e9ce37874c89a08bd99c
parent49ba2e04479791e9186e72e004a64f3abc68c375 (diff)
parent5c06c030f2e4b9f6ca2aa3bd8942b3adc165c76a (diff)
downloadredot-engine-32fbba4bf6692d77ace59044d9080f5d1aa9113a.tar.gz
Merge pull request #76472 from jmb462/multicarets_selection_popup
Fix right click in selection of additional caret
-rw-r--r--editor/plugins/script_text_editor.cpp30
-rw-r--r--scene/gui/text_edit.cpp31
2 files changed, 36 insertions, 25 deletions
diff --git a/editor/plugins/script_text_editor.cpp b/editor/plugins/script_text_editor.cpp
index 65b7526722..9e10eddd5b 100644
--- a/editor/plugins/script_text_editor.cpp
+++ b/editor/plugins/script_text_editor.cpp
@@ -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");
diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp
index 1564f9bc62..e29f044537 100644
--- a/scene/gui/text_edit.cpp
+++ b/scene/gui/text_edit.cpp
@@ -1851,23 +1851,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();
}