summaryrefslogtreecommitdiff
path: root/scene/gui
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2022-11-02 18:54:19 +0100
committerRémi Verschelde <rverschelde@gmail.com>2022-11-02 18:54:19 +0100
commit39cece382d1c0f9f89eaa469a93497c50b516686 (patch)
tree144a6c17f4284a46b514b954f0421ac3540c4146 /scene/gui
parenteefba5bc3309d57c357bc6b9bbf06d25f47a29cf (diff)
parenta862583d05c30030ab42d2f0abe8e9211503ae22 (diff)
Merge pull request #68170 from alfredbaudisch/clear-selection-shortcut
Unified shortcut to clear carets and selections from TextEdit
Diffstat (limited to 'scene/gui')
-rw-r--r--scene/gui/text_edit.cpp27
-rw-r--r--scene/gui/text_edit.h2
2 files changed, 21 insertions, 8 deletions
diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp
index cc9fc99b9c..324273bfa5 100644
--- a/scene/gui/text_edit.cpp
+++ b/scene/gui/text_edit.cpp
@@ -2051,7 +2051,8 @@ void TextEdit::gui_input(const Ref<InputEvent> &p_gui_input) {
}
if (is_shortcut_keys_enabled()) {
- // SELECT ALL, SELECT WORD UNDER CARET, ADD SELECTION FOR NEXT OCCURRENCE, CUT, COPY, PASTE.
+ // SELECT ALL, SELECT WORD UNDER CARET, ADD SELECTION FOR NEXT OCCURRENCE,
+ // CLEAR CARETS AND SELECTIONS, CUT, COPY, PASTE.
if (k->is_action("ui_text_select_all", true)) {
select_all();
accept_event();
@@ -2067,10 +2068,12 @@ void TextEdit::gui_input(const Ref<InputEvent> &p_gui_input) {
accept_event();
return;
}
- if (k->is_action("ui_text_remove_secondary_carets", true) && _should_remove_secondary_carets()) {
- remove_secondary_carets();
- accept_event();
- return;
+ if (k->is_action("ui_text_clear_carets_and_selection", true)) {
+ // Since the default shortcut is ESC, accepts the event only if it's actually performed.
+ if (_clear_carets_and_selection()) {
+ accept_event();
+ return;
+ }
}
if (k->is_action("ui_cut", true)) {
cut();
@@ -2824,8 +2827,18 @@ void TextEdit::_move_caret_document_end(bool p_select) {
}
}
-bool TextEdit::_should_remove_secondary_carets() {
- return carets.size() > 1;
+bool TextEdit::_clear_carets_and_selection() {
+ if (get_caret_count() > 1) {
+ remove_secondary_carets();
+ return true;
+ }
+
+ if (has_selection()) {
+ deselect();
+ return true;
+ }
+
+ return false;
}
void TextEdit::_get_above_below_caret_line_column(int p_old_line, int p_old_wrap_index, int p_old_column, bool p_below, int &p_new_line, int &p_new_column, int p_last_fit_x) const {
diff --git a/scene/gui/text_edit.h b/scene/gui/text_edit.h
index 263a36aba8..92acbaf521 100644
--- a/scene/gui/text_edit.h
+++ b/scene/gui/text_edit.h
@@ -597,7 +597,7 @@ private:
void _delete(bool p_word = false, bool p_all_to_right = false);
void _move_caret_document_start(bool p_select);
void _move_caret_document_end(bool p_select);
- bool _should_remove_secondary_carets();
+ bool _clear_carets_and_selection();
// Used in add_caret_at_carets
void _get_above_below_caret_line_column(int p_old_line, int p_old_wrap_index, int p_old_column, bool p_below, int &p_new_line, int &p_new_column, int p_last_fit_x = -1) const;