summaryrefslogtreecommitdiff
path: root/scene/main
diff options
context:
space:
mode:
authorRĂ©mi Verschelde <remi@verschelde.fr>2022-01-05 15:32:06 +0100
committerGitHub <noreply@github.com>2022-01-05 15:32:06 +0100
commitbb4157a9afbce9adfa95c69ee20442590d4d66de (patch)
tree5b89c1fbd6c55465cbf35dadc905e001e9c26bf6 /scene/main
parent75c06289c40b90275c3d715708e1924d920a8112 (diff)
parent2db9397fb949086cd403cd6180240334a3272c30 (diff)
Merge pull request #56519 from RandomShaper/fix_scene_cleared
Diffstat (limited to 'scene/main')
-rw-r--r--scene/main/node.cpp21
1 files changed, 19 insertions, 2 deletions
diff --git a/scene/main/node.cpp b/scene/main/node.cpp
index bec01762d8..8b5883a742 100644
--- a/scene/main/node.cpp
+++ b/scene/main/node.cpp
@@ -229,15 +229,32 @@ void Node::_propagate_enter_tree() {
}
void Node::_propagate_after_exit_tree() {
+ // Clear owner if it was not part of the pruned branch
if (data.owner) {
- data.owner->data.owned.erase(data.OW);
- data.owner = nullptr;
+ bool found = false;
+ Node *parent = data.parent;
+
+ while (parent) {
+ if (parent == data.owner) {
+ found = true;
+ break;
+ }
+
+ parent = parent->data.parent;
+ }
+
+ if (!found) {
+ data.owner->data.owned.erase(data.OW);
+ data.owner = nullptr;
+ }
}
+
data.blocked++;
for (int i = data.children.size() - 1; i >= 0; i--) {
data.children[i]->_propagate_after_exit_tree();
}
data.blocked--;
+
emit_signal(SceneStringNames::get_singleton()->tree_exited);
}