Skip to content

Commit

Permalink
Fix CanvasItem not exiting its canvas group on canvas exit
Browse files Browse the repository at this point in the history
  • Loading branch information
kleonc committed Jul 20, 2022
1 parent 1cf7ebd commit 57ff403
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 7 deletions.
15 changes: 9 additions & 6 deletions scene/main/canvas_item.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -230,16 +230,16 @@ void CanvasItem::_enter_canvas() {

RenderingServer::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 | SceneTree::GROUP_CALL_DEFERRED, group, SNAME("_top_level_raise_self"));
get_tree()->call_group_flags(SceneTree::GROUP_CALL_UNIQUE | SceneTree::GROUP_CALL_DEFERRED, canvas_group, SNAME("_top_level_raise_self"));

} else {
CanvasItem *parent = get_parent_item();
Expand All @@ -258,7 +258,10 @@ void CanvasItem::_exit_canvas() {
notification(NOTIFICATION_EXIT_CANVAS, true); //reverse the notification
RenderingServer::get_singleton()->canvas_item_set_parent(canvas_item, RID());
canvas_layer = nullptr;
group = StringName();
if (canvas_group != StringName()) {
remove_from_group(canvas_group);
canvas_group = StringName();
}
}

void CanvasItem::_notification(int p_what) {
Expand Down Expand Up @@ -319,8 +322,8 @@ void CanvasItem::_notification(int p_what) {
break;
}

if (group != StringName()) {
get_tree()->call_group_flags(SceneTree::GROUP_CALL_UNIQUE | SceneTree::GROUP_CALL_DEFERRED, group, "_top_level_raise_self");
if (canvas_group != StringName()) {
get_tree()->call_group_flags(SceneTree::GROUP_CALL_UNIQUE | SceneTree::GROUP_CALL_DEFERRED, canvas_group, "_top_level_raise_self");
} else {
CanvasItem *p = get_parent_item();
ERR_FAIL_COND(!p);
Expand Down
2 changes: 1 addition & 1 deletion scene/main/canvas_item.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ class CanvasItem : public Node {
mutable SelfList<Node> xform_change;

RID canvas_item;
StringName group;
StringName canvas_group;

CanvasLayer *canvas_layer = nullptr;

Expand Down

0 comments on commit 57ff403

Please sign in to comment.