wlr_scene: Ensure scene_node_update is updating entire node.

The old logic might not update the entire scene node when a node is
disabled. It would only consider the damage last time (the damage was
based on the visible region of the node).

It's important that we update the entire node region because xwayland
stacking will depend on this.
This commit is contained in:
Alexander Orzechowski 2024-08-03 13:16:32 -04:00
parent 823a64bf7d
commit 66d96d244c

View File

@ -540,13 +540,8 @@ static void scene_node_update(struct wlr_scene_node *node,
struct wlr_scene *scene = scene_node_get_root(node); struct wlr_scene *scene = scene_node_get_root(node);
int x, y; int x, y;
if (!wlr_scene_node_coords(node, &x, &y)) { bool enabled = wlr_scene_node_coords(node, &x, &y);
if (damage) { if (!enabled && !damage) {
scene_update_region(scene, damage);
scene_damage_outputs(scene, damage);
pixman_region32_fini(damage);
}
return; return;
} }
@ -565,7 +560,10 @@ static void scene_node_update(struct wlr_scene_node *node,
scene_update_region(scene, &update_region); scene_update_region(scene, &update_region);
pixman_region32_fini(&update_region); pixman_region32_fini(&update_region);
scene_node_visibility(node, damage); if (enabled) {
scene_node_visibility(node, damage);
}
scene_damage_outputs(scene, damage); scene_damage_outputs(scene, damage);
pixman_region32_fini(damage); pixman_region32_fini(damage);
} }