summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBojidar Marinov <bojidar.marinov.bg@gmail.com>2016-11-17 18:10:53 +0200
committerBojidar Marinov <bojidar.marinov.bg@gmail.com>2016-11-17 18:10:53 +0200
commit184173a9b993c145a2782d9e2488b98221c749e1 (patch)
treea7ef4f689220fb4e17ddf1d8ae15256727a22d5b
parent959683c3d8f7aaa7469d5758c7698e0da108b406 (diff)
Guard agains duplicate calling of _ready when instanced in _enter_tree
Fixes #6005
-rw-r--r--scene/main/node.cpp6
-rw-r--r--scene/main/node.h1
2 files changed, 6 insertions, 1 deletions
diff --git a/scene/main/node.cpp b/scene/main/node.cpp
index f4fb48682c..bff3c3a089 100644
--- a/scene/main/node.cpp
+++ b/scene/main/node.cpp
@@ -166,6 +166,7 @@ void Node::_notification(int p_notification) {
void Node::_propagate_ready() {
+ data.ready_notified=true;
data.blocked++;
for (int i=0;i<data.children.size();i++) {
@@ -2662,7 +2663,9 @@ void Node::_set_tree(SceneTree *p_tree) {
_propagate_enter_tree();
- _propagate_ready(); //reverse_notification(NOTIFICATION_READY);
+ if (!data.parent || data.parent->data.ready_notified) { // No parent (root) or parent ready
+ _propagate_ready(); //reverse_notification(NOTIFICATION_READY);
+ }
tree_changed_b=data.tree;
@@ -2999,6 +3002,7 @@ Node::Node() {
data.fixed_process=false;
data.idle_process=false;
data.inside_tree=false;
+ data.ready_notified=false;
data.owner=NULL;
data.OW=NULL;
diff --git a/scene/main/node.h b/scene/main/node.h
index f18dc81195..7b1444f607 100644
--- a/scene/main/node.h
+++ b/scene/main/node.h
@@ -103,6 +103,7 @@ private:
StringName name;
SceneTree *tree;
bool inside_tree;
+ bool ready_notified;
#ifdef TOOLS_ENABLED
NodePath import_path; //path used when imported, used by scene editors to keep tracking
#endif