diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2022-11-02 18:54:19 +0100 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2022-11-02 18:54:19 +0100 |
commit | 39cece382d1c0f9f89eaa469a93497c50b516686 (patch) | |
tree | 144a6c17f4284a46b514b954f0421ac3540c4146 /scene | |
parent | eefba5bc3309d57c357bc6b9bbf06d25f47a29cf (diff) | |
parent | a862583d05c30030ab42d2f0abe8e9211503ae22 (diff) |
Merge pull request #68170 from alfredbaudisch/clear-selection-shortcut
Unified shortcut to clear carets and selections from TextEdit
Diffstat (limited to 'scene')
-rw-r--r-- | scene/gui/text_edit.cpp | 27 | ||||
-rw-r--r-- | scene/gui/text_edit.h | 2 |
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; |