File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -234,15 +234,32 @@ void Node::_propagate_enter_tree() {
234234}
235235
236236void Node::_propagate_after_exit_tree () {
237+ // Clear owner if it was not part of the pruned branch
237238 if (data.owner ) {
238- data.owner ->data .owned .erase (data.OW );
239- data.owner = nullptr ;
239+ bool found = false ;
240+ Node *parent = data.parent ;
241+
242+ while (parent) {
243+ if (parent == data.owner ) {
244+ found = true ;
245+ break ;
246+ }
247+
248+ parent = parent->data .parent ;
249+ }
250+
251+ if (!found) {
252+ data.owner ->data .owned .erase (data.OW );
253+ data.owner = nullptr ;
254+ }
240255 }
256+
241257 data.blocked ++;
242258 for (int i = 0 ; i < data.children .size (); i++) {
243259 data.children [i]->_propagate_after_exit_tree ();
244260 }
245261 data.blocked --;
262+
246263 emit_signal (SceneStringNames::get_singleton ()->tree_exited );
247264}
248265
You can’t perform that action at this time.
0 commit comments