correctly check if a scene node is enabled

checking only wlr_scene_node.enabled may result in a false positive because it
does not consider if its ancestors are enabled as well.
This commit is contained in:
Leonardo Hernández Hernández 2023-04-12 21:37:19 -06:00
parent 3c760bcd4a
commit 797e0c74b2
No known key found for this signature in database
GPG Key ID: E538897EE11B9624

8
dwl.c
View File

@ -631,13 +631,13 @@ chvt(const Arg *arg)
void void
checkidleinhibitor(struct wlr_surface *exclude) checkidleinhibitor(struct wlr_surface *exclude)
{ {
int inhibited = 0; int inhibited = 0, unused_lx, unused_ly;
struct wlr_idle_inhibitor_v1 *inhibitor; struct wlr_idle_inhibitor_v1 *inhibitor;
wl_list_for_each(inhibitor, &idle_inhibit_mgr->inhibitors, link) { wl_list_for_each(inhibitor, &idle_inhibit_mgr->inhibitors, link) {
struct wlr_surface *surface = wlr_surface_get_root_surface(inhibitor->surface); struct wlr_surface *surface = wlr_surface_get_root_surface(inhibitor->surface);
struct wlr_scene_tree *tree = surface->data; struct wlr_scene_tree *tree = surface->data;
if (exclude != surface && (bypass_surface_visibility || (!tree if (exclude != surface && (bypass_surface_visibility || (!tree
|| tree->node.enabled))) { || wlr_scene_node_coords(&tree->node, &unused_lx, &unused_ly)))) {
inhibited = 1; inhibited = 1;
break; break;
} }
@ -1201,7 +1201,7 @@ void
focusclient(Client *c, int lift) focusclient(Client *c, int lift)
{ {
struct wlr_surface *old = seat->keyboard_state.focused_surface; struct wlr_surface *old = seat->keyboard_state.focused_surface;
int i; int i, unused_lx, unused_ly;
if (locked) if (locked)
return; return;
@ -1236,7 +1236,7 @@ focusclient(Client *c, int lift)
Client *w = NULL; Client *w = NULL;
LayerSurface *l = NULL; LayerSurface *l = NULL;
int type = toplevel_from_wlr_surface(old, &w, &l); int type = toplevel_from_wlr_surface(old, &w, &l);
if (type == LayerShell && l->scene->node.enabled if (type == LayerShell && wlr_scene_node_coords(&l->scene->node, &unused_lx, &unused_ly)
&& l->layer_surface->current.layer >= ZWLR_LAYER_SHELL_V1_LAYER_TOP) { && l->layer_surface->current.layer >= ZWLR_LAYER_SHELL_V1_LAYER_TOP) {
return; return;
} else if (w && w == exclusive_focus && client_wants_focus(w)) { } else if (w && w == exclusive_focus && client_wants_focus(w)) {