diff --git a/editor/node_dock.cpp b/editor/node_dock.cpp index 65217304734..372e696ed89 100644 --- a/editor/node_dock.cpp +++ b/editor/node_dock.cpp @@ -67,14 +67,23 @@ void NodeDock::update_lists() { connections->update_tree(); } +void NodeDock::_on_node_tree_exited() { + set_node(nullptr); +} + void NodeDock::set_node(Node *p_node) { - connections->set_node(p_node); - groups->set_current(p_node); - if (p_node) { - last_valid_node = p_node; + if (last_valid_node) { + last_valid_node->disconnect("tree_exited", callable_mp(this, &NodeDock::_on_node_tree_exited)); + last_valid_node = nullptr; } + connections->set_node(p_node); + groups->set_current(p_node); + if (p_node) { + last_valid_node = p_node; + last_valid_node->connect("tree_exited", callable_mp(this, &NodeDock::_on_node_tree_exited)); + if (connections_button->is_pressed()) { connections->show(); } else { diff --git a/editor/node_dock.h b/editor/node_dock.h index cc221714530..41495ffeadd 100644 --- a/editor/node_dock.h +++ b/editor/node_dock.h @@ -58,6 +58,7 @@ public: protected: static void _bind_methods(); void _notification(int p_what); + void _on_node_tree_exited(); public: void set_node(Node *p_node);