Fix parent inconsistency in Node::remove_child

`NOTIFICATION_CHILD_ORDER_CHANGED` could be triggered, while there
was an inconsistent state:
- parent node no longer had child listed as child
- child node still had parent node listed as parent

Bring these two in sync, before emitting the notification.
This commit is contained in:
Markus Sauermann 2023-06-08 22:49:40 +02:00
parent e188d61922
commit 7561e176e8

View File

@ -1439,12 +1439,12 @@ void Node::remove_child(Node *p_child) {
bool success = data.children.erase(p_child->data.name);
ERR_FAIL_COND_MSG(!success, "Children name does not match parent name in hashtable, this is a bug.");
notification(NOTIFICATION_CHILD_ORDER_CHANGED);
emit_signal(SNAME("child_order_changed"));
p_child->data.parent = nullptr;
p_child->data.index = -1;
notification(NOTIFICATION_CHILD_ORDER_CHANGED);
emit_signal(SNAME("child_order_changed"));
if (data.inside_tree) {
p_child->_propagate_after_exit_tree();
}