From 0d7db935aaa32e6b53d83f7b2e33848c740605ff Mon Sep 17 00:00:00 2001 From: Brian MacIntosh Date: Mon, 2 Oct 2023 18:44:54 -0700 Subject: [PATCH] Search terms are now highlighted when the bar opens with a selection. This is achieved by triggering a search when the bar opens. This is slightly inefficient but cleanly updates everything that's dependent on the search and reduces code duplication. --- editor/code_editor.cpp | 50 +++++++++++++++++------------------------- editor/code_editor.h | 2 ++ 2 files changed, 22 insertions(+), 30 deletions(-) diff --git a/editor/code_editor.cpp b/editor/code_editor.cpp index 1842e8c1c4e..9a107669001 100644 --- a/editor/code_editor.cpp +++ b/editor/code_editor.cpp @@ -141,6 +141,20 @@ void FindReplaceBar::_focus_lost() { } } +void FindReplaceBar::_update_flags(bool p_direction_backwards) { + flags = 0; + + if (is_whole_words()) { + flags |= TextEdit::SEARCH_WHOLE_WORDS; + } + if (is_case_sensitive()) { + flags |= TextEdit::SEARCH_MATCH_CASE; + } + if (p_direction_backwards) { + flags |= TextEdit::SEARCH_BACKWARDS; + } +} + bool FindReplaceBar::_search(uint32_t p_flags, int p_from_line, int p_from_col) { if (!preserve_cursor) { text_editor->remove_secondary_carets(); @@ -431,14 +445,7 @@ void FindReplaceBar::_update_matches_label() { } bool FindReplaceBar::search_current() { - flags = 0; - - if (is_whole_words()) { - flags |= TextEdit::SEARCH_WHOLE_WORDS; - } - if (is_case_sensitive()) { - flags |= TextEdit::SEARCH_MATCH_CASE; - } + _update_flags(false); int line, col; _get_search_from(line, col); @@ -455,17 +462,9 @@ bool FindReplaceBar::search_prev() { popup_search(true); } - flags = 0; String text = get_search_text(); - if (is_whole_words()) { - flags |= TextEdit::SEARCH_WHOLE_WORDS; - } - if (is_case_sensitive()) { - flags |= TextEdit::SEARCH_MATCH_CASE; - } - - flags |= TextEdit::SEARCH_BACKWARDS; + _update_flags(true); int line, col; _get_search_from(line, col); @@ -491,14 +490,7 @@ bool FindReplaceBar::search_next() { popup_search(true); } - flags = 0; - - if (is_whole_words()) { - flags |= TextEdit::SEARCH_WHOLE_WORDS; - } - if (is_case_sensitive()) { - flags |= TextEdit::SEARCH_MATCH_CASE; - } + _update_flags(false); int line, col; _get_search_from(line, col, true); @@ -546,11 +538,9 @@ void FindReplaceBar::_show_search(bool p_focus_replace, bool p_show_only) { search_text->set_caret_column(search_text->get_text().length()); } - results_count = -1; - results_count_to_current = -1; - needs_to_count_results = true; - _update_results_count(); - _update_matches_label(); + preserve_cursor = true; + _search_text_changed(get_search_text()); + preserve_cursor = false; } } diff --git a/editor/code_editor.h b/editor/code_editor.h index 911b7193f5a..9d8a3a22293 100644 --- a/editor/code_editor.h +++ b/editor/code_editor.h @@ -110,6 +110,8 @@ protected: virtual void unhandled_input(const Ref &p_event) override; void _focus_lost(); + void _update_flags(bool p_direction_backwards); + bool _search(uint32_t p_flags, int p_from_line, int p_from_col); void _replace();