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
This commit is contained in:
Rémi Verschelde 2022-07-20 21:04:22 +02:00 committed by GitHub
commit f0fabec358
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 10 additions and 7 deletions

View file

@ -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);

View file

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