Parcourir la source

Merge pull request #61578 from YuriSizov/core-fix-events-for-moved-nodes-3.x

Rémi Verschelde il y a 3 ans
Parent
commit
25c87e99cf
2 fichiers modifiés avec 14 ajouts et 5 suppressions
  1. 13 5
      scene/main/node.cpp
  2. 1 0
      scene/main/node.h

+ 13 - 5
scene/main/node.cpp

@@ -429,11 +429,7 @@ void Node::move_child(Node *p_child, int p_pos) {
 	for (int i = motion_from; i <= motion_to; i++) {
 		data.children[i]->notification(NOTIFICATION_MOVED_IN_PARENT);
 	}
-	for (const Map<StringName, GroupData>::Element *E = p_child->data.grouped.front(); E; E = E->next()) {
-		if (E->get().group) {
-			E->get().group->changed = true;
-		}
-	}
+	p_child->_propagate_groups_dirty();
 
 	data.blocked--;
 }
@@ -446,6 +442,18 @@ void Node::raise() {
 	data.parent->move_child(this, data.parent->data.children.size() - 1);
 }
 
+void Node::_propagate_groups_dirty() {
+	for (const Map<StringName, GroupData>::Element *E = data.grouped.front(); E; E = E->next()) {
+		if (E->get().group) {
+			E->get().group->changed = true;
+		}
+	}
+
+	for (int i = 0; i < data.children.size(); i++) {
+		data.children[i]->_propagate_groups_dirty();
+	}
+}
+
 void Node::add_child_notify(Node *p_child) {
 	// to be used when not wanted
 }

+ 1 - 0
scene/main/node.h

@@ -207,6 +207,7 @@ private:
 	void _propagate_physics_interpolation_reset_requested();
 	void _print_stray_nodes();
 	void _propagate_pause_owner(Node *p_owner);
+	void _propagate_groups_dirty();
 	Array _get_node_and_resource(const NodePath &p_path);
 
 	void _duplicate_signals(const Node *p_original, Node *p_copy) const;