From 20be87904a50ab13f91bd4c5f3ca72ff3084f527 Mon Sep 17 00:00:00 2001 From: Alexander Montag Date: Sun, 29 Sep 2024 21:47:38 +0200 Subject: [PATCH] Focus tree when search panel is closed --- editor/tree_search.cpp | 7 +++++++ editor/tree_search.h | 2 ++ 2 files changed, 9 insertions(+) diff --git a/editor/tree_search.cpp b/editor/tree_search.cpp index df5b76e..160c614 100644 --- a/editor/tree_search.cpp +++ b/editor/tree_search.cpp @@ -383,6 +383,12 @@ void TreeSearch::_select_next_match() { _select_first_match(); } +void TreeSearch::_on_search_panel_visibility_changed() { + if (tree_reference && !search_panel->is_visible()) { + tree_reference->grab_focus(); + } +} + template inline bool TreeSearch::_vector_has_bsearch(Vector &p_vec, T *element) const { int idx = p_vec.bsearch(element, true); @@ -439,6 +445,7 @@ void TreeSearch::update_search(Tree *p_tree) { TreeSearch::TreeSearch(TreeSearchPanel *p_search_panel) { search_panel = p_search_panel; search_panel->connect("text_submitted", callable_mp(this, &TreeSearch::_select_next_match)); + search_panel->connect("visibility_changed", callable_mp(this, &TreeSearch::_on_search_panel_visibility_changed)); } /* !TreeSearch */ diff --git a/editor/tree_search.h b/editor/tree_search.h index 9d78bf7..2b7cf63 100644 --- a/editor/tree_search.h +++ b/editor/tree_search.h @@ -90,6 +90,8 @@ private: void _select_first_match(); void _select_next_match(); + void _on_search_panel_visibility_changed(); + // TODO: make p_vec ref `const` once Vector::bsearch is const. See: https://github.com/godotengine/godot/pull/90341 template bool _vector_has_bsearch(Vector &p_vec, T *element) const;