diff --git a/editor/debugger/editor_debugger_tree.cpp b/editor/debugger/editor_debugger_tree.cpp index 8e2ef980285..73e0102fd63 100644 --- a/editor/debugger/editor_debugger_tree.cpp +++ b/editor/debugger/editor_debugger_tree.cpp @@ -66,6 +66,7 @@ void EditorDebuggerTree::_notification(int p_what) { case NOTIFICATION_POSTINITIALIZE: { set_auto_translate_mode(AUTO_TRANSLATE_MODE_DISABLED); + connect("cell_selected", callable_mp(this, &EditorDebuggerTree::_scene_tree_selected)); connect("multi_selected", callable_mp(this, &EditorDebuggerTree::_scene_tree_selection_changed)); connect("nothing_selected", callable_mp(this, &EditorDebuggerTree::_scene_tree_nothing_selected)); connect("item_collapsed", callable_mp(this, &EditorDebuggerTree::_scene_tree_folded)); @@ -85,6 +86,27 @@ void EditorDebuggerTree::_bind_methods() { ADD_SIGNAL(MethodInfo("open")); } +void EditorDebuggerTree::_scene_tree_selected() { + TreeItem *item = get_selected(); + if (!item) { + return; + } + + if (!inspected_object_ids.is_empty()) { + inspected_object_ids.clear(); + deselect_all(); + item->select(0); + } + + uint64_t id = uint64_t(item->get_metadata(0)); + inspected_object_ids.append(id); + + if (!notify_selection_queued) { + callable_mp(this, &EditorDebuggerTree::_notify_selection_changed).call_deferred(); + notify_selection_queued = true; + } +} + void EditorDebuggerTree::_scene_tree_selection_changed(TreeItem *p_item, int p_column, bool p_selected) { if (updating_scene_tree || !p_item) { return; diff --git a/editor/debugger/editor_debugger_tree.h b/editor/debugger/editor_debugger_tree.h index 0281722cfcf..50f0cd44537 100644 --- a/editor/debugger/editor_debugger_tree.h +++ b/editor/debugger/editor_debugger_tree.h @@ -72,6 +72,7 @@ private: String last_filter; void _scene_tree_folded(Object *p_obj); + void _scene_tree_selected(); void _scene_tree_selection_changed(TreeItem *p_item, int p_column, bool p_selected); void _scene_tree_nothing_selected(); void _notify_selection_changed();