Explorar o código

Merge pull request #63234 from kleonc/canvas-item-remove-from-canvas-group-3x

[3.x] Fix `CanvasItem` not exiting its canvas group on canvas exit
Rémi Verschelde %!s(int64=3) %!d(string=hai) anos
pai
achega
f0fabec358
Modificáronse 2 ficheiros con 10 adicións e 7 borrados
  1. 9 6
      scene/2d/canvas_item.cpp
  2. 1 1
      scene/2d/canvas_item.h

+ 9 - 6
scene/2d/canvas_item.cpp

@@ -530,16 +530,16 @@ void CanvasItem::_enter_canvas() {
 
 		VisualServer::get_singleton()->canvas_item_set_parent(canvas_item, canvas);
 
-		group = "root_canvas" + itos(canvas.get_id());
+		canvas_group = "root_canvas" + itos(canvas.get_id());
 
-		add_to_group(group);
+		add_to_group(canvas_group);
 		if (canvas_layer) {
 			canvas_layer->reset_sort_index();
 		} else {
 			get_viewport()->gui_reset_canvas_sort_index();
 		}
 
-		get_tree()->call_group_flags(SceneTree::GROUP_CALL_UNIQUE, group, "_toplevel_raise_self");
+		get_tree()->call_group_flags(SceneTree::GROUP_CALL_UNIQUE, canvas_group, "_toplevel_raise_self");
 
 	} else {
 		CanvasItem *parent = get_parent_item();
@@ -558,7 +558,10 @@ void CanvasItem::_exit_canvas() {
 	notification(NOTIFICATION_EXIT_CANVAS, true); //reverse the notification
 	VisualServer::get_singleton()->canvas_item_set_parent(canvas_item, RID());
 	canvas_layer = nullptr;
-	group = "";
+	if (canvas_group != "") {
+		remove_from_group(canvas_group);
+		canvas_group = "";
+	}
 }
 
 void CanvasItem::_notification(int p_what) {
@@ -584,8 +587,8 @@ void CanvasItem::_notification(int p_what) {
 				break;
 			}
 
-			if (group != "") {
-				get_tree()->call_group_flags(SceneTree::GROUP_CALL_UNIQUE, group, "_toplevel_raise_self");
+			if (canvas_group != "") {
+				get_tree()->call_group_flags(SceneTree::GROUP_CALL_UNIQUE, canvas_group, "_toplevel_raise_self");
 			} else {
 				CanvasItem *p = get_parent_item();
 				ERR_FAIL_COND(!p);

+ 1 - 1
scene/2d/canvas_item.h

@@ -179,7 +179,7 @@ private:
 	mutable SelfList<Node> xform_change;
 
 	RID canvas_item;
-	String group;
+	String canvas_group;
 
 	CanvasLayer *canvas_layer;