diff --git a/editor/docks/scene_tree_dock.cpp b/editor/docks/scene_tree_dock.cpp index c2713a1f5d..364de90438 100644 --- a/editor/docks/scene_tree_dock.cpp +++ b/editor/docks/scene_tree_dock.cpp @@ -1721,11 +1721,6 @@ void SceneTreeDock::_notification(int p_what) { filter->set_right_icon(get_editor_theme_icon(SNAME("Search"))); - PopupMenu *filter_menu = filter->get_menu(); - filter_menu->set_item_icon(filter_menu->get_item_idx_from_text(TTR("Filters")), get_editor_theme_icon(SNAME("Search"))); - filter_menu->set_item_icon(filter_menu->get_item_index(FILTER_BY_TYPE), get_editor_theme_icon(SNAME("Node"))); - filter_menu->set_item_icon(filter_menu->get_item_index(FILTER_BY_GROUP), get_editor_theme_icon(SNAME("Groups"))); - // These buttons are created on READY, because reasons... if (button_2d) { button_2d->set_button_icon(get_editor_theme_icon(SNAME("Node2D"))); @@ -4049,9 +4044,6 @@ void SceneTreeDock::_update_tree_menu() { PopupMenu *tree_menu = button_tree_menu->get_popup(); tree_menu->clear(); - _append_filter_options_to(tree_menu); - - tree_menu->add_separator(); tree_menu->add_check_item(TTR("Auto Expand to Selected"), TOOL_AUTO_EXPAND); tree_menu->set_item_checked(-1, EDITOR_GET("docks/scene_tree/auto_expand_to_selected")); @@ -4071,6 +4063,8 @@ void SceneTreeDock::_update_tree_menu() { resource_list->connect("about_to_popup", callable_mp(this, &SceneTreeDock::_list_all_subresources).bind(resource_list)); resource_list->connect("index_pressed", callable_mp(this, &SceneTreeDock::_edit_subresource).bind(resource_list)); tree_menu->add_submenu_node_item(TTR("All Scene Sub-Resources"), resource_list); + + _append_filter_options_to(tree_menu); } void SceneTreeDock::_filter_changed(const String &p_filter) { @@ -4093,9 +4087,14 @@ void SceneTreeDock::_filter_gui_input(const Ref &p_event) { } if (mb->is_pressed() && mb->get_button_index() == MouseButton::MIDDLE) { - filter_quick_menu->clear(); + if (filter_quick_menu == nullptr) { + filter_quick_menu = memnew(PopupMenu); + filter_quick_menu->set_theme_type_variation("FlatMenuButton"); + _append_filter_options_to(filter_quick_menu); + filter_quick_menu->connect(SceneStringName(id_pressed), callable_mp(this, &SceneTreeDock::_filter_option_selected)); + filter->add_child(filter_quick_menu); + } - _append_filter_options_to(filter_quick_menu, false); filter_quick_menu->set_position(get_screen_position() + get_local_mouse_position()); filter_quick_menu->reset_size(); filter_quick_menu->popup(); @@ -4122,15 +4121,16 @@ void SceneTreeDock::_filter_option_selected(int p_option) { } } -void SceneTreeDock::_append_filter_options_to(PopupMenu *p_menu, bool p_include_separator) { - if (p_include_separator) { - p_menu->add_separator(TTR("Filters")); +void SceneTreeDock::_append_filter_options_to(PopupMenu *p_menu) { + if (p_menu->get_item_count() > 0) { + p_menu->add_separator(); } - p_menu->add_item(TTR("Filter by Type"), FILTER_BY_TYPE); - p_menu->add_item(TTR("Filter by Group"), FILTER_BY_GROUP); - p_menu->set_item_tooltip(p_menu->get_item_index(FILTER_BY_TYPE), TTR("Selects all Nodes of the given type.")); - p_menu->set_item_tooltip(p_menu->get_item_index(FILTER_BY_GROUP), TTR("Selects all Nodes belonging to the given group.\nIf empty, selects any Node belonging to any group.")); + p_menu->add_item(TTRC("Filter by Type"), FILTER_BY_TYPE); + p_menu->set_item_tooltip(-1, TTRC("Selects all Nodes of the given type.\nInserts \"type:\". You can also use the shorthand \"t:\".")); + + p_menu->add_item(TTRC("Filter by Group"), FILTER_BY_GROUP); + p_menu->set_item_tooltip(-1, TTRC("Selects all Nodes belonging to the given group.\nIf empty, selects any Node belonging to any group.\nInserts \"group:\". You can also use the shorthand \"g:\".")); } String SceneTreeDock::get_filter() { @@ -4791,11 +4791,6 @@ SceneTreeDock::SceneTreeDock(Node *p_scene_root, EditorSelection *p_editor_selec filter->get_menu()->connect(SceneStringName(id_pressed), callable_mp(this, &SceneTreeDock::_filter_option_selected)); _append_filter_options_to(filter->get_menu()); - filter_quick_menu = memnew(PopupMenu); - filter_quick_menu->set_theme_type_variation("FlatMenuButton"); - filter_quick_menu->connect(SceneStringName(id_pressed), callable_mp(this, &SceneTreeDock::_filter_option_selected)); - filter->add_child(filter_quick_menu); - button_create_script = memnew(Button); button_create_script->set_theme_type_variation("FlatMenuButton"); button_create_script->connect(SceneStringName(pressed), callable_mp(this, &SceneTreeDock::_tool_selected).bind(TOOL_ATTACH_SCRIPT, false)); diff --git a/editor/docks/scene_tree_dock.h b/editor/docks/scene_tree_dock.h index a73dd39ae1..f34f13daa4 100644 --- a/editor/docks/scene_tree_dock.h +++ b/editor/docks/scene_tree_dock.h @@ -274,7 +274,7 @@ class SceneTreeDock : public EditorDock { void _filter_changed(const String &p_filter); void _filter_gui_input(const Ref &p_event); void _filter_option_selected(int option); - void _append_filter_options_to(PopupMenu *p_menu, bool p_include_separator = true); + void _append_filter_options_to(PopupMenu *p_menu); void _perform_instantiate_scenes(const Vector &p_files, Node *p_parent, int p_pos); void _perform_create_audio_stream_players(const Vector &p_files, Node *p_parent, int p_pos);