commit 541183b3228b986b5d09f12513506c386456df7e parent 5e6a6ea3404330f99d2425d20cd9e298164d5988 Author: Kenny Levinsen <kl@kl.wtf> Date: Thu, 23 May 2024 15:01:46 +0200 idle_inhibit: Explicitly handle layer surfaces Layer surfaces do not have a view, and while they can be occluded they are always visible on their associated output - assuming it is enabled. Diffstat:
| M | sway/desktop/idle_inhibit_v1.c | | | 9 | ++++++++- |
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/sway/desktop/idle_inhibit_v1.c b/sway/desktop/idle_inhibit_v1.c @@ -119,8 +119,15 @@ bool sway_idle_inhibit_v1_is_active(struct sway_idle_inhibitor_v1 *inhibitor) { switch (inhibitor->mode) { case INHIBIT_IDLE_APPLICATION:; + struct wlr_surface *wlr_surface = inhibitor->wlr_inhibitor->surface; + if (wlr_layer_surface_v1_try_from_wlr_surface(wlr_surface)) { + // Layer surfaces can be occluded but are always on screen after + // they have been mapped. + return wlr_surface->mapped; + } + // If there is no view associated with the inhibitor, assume visible - struct sway_view *view = view_from_wlr_surface(inhibitor->wlr_inhibitor->surface); + struct sway_view *view = view_from_wlr_surface(wlr_surface); return !view || !view->container || view_is_visible(view); case INHIBIT_IDLE_FOCUS:; struct sway_seat *seat = NULL;