From 6a2a52c0ad5b5374413c15178eab6d65055202c0 Mon Sep 17 00:00:00 2001 From: Johan Malm Date: Tue, 19 Dec 2023 17:45:43 +0000 Subject: [PATCH] seat: do not update active_view on layer-shell keyboard focus ...because layer-shell clients are not views and we want to be able to use foreign-toplevel protocol on the active view even if a client such as a panel has taken keyboard focus. Written-by: @Consolatis Fixes: #1336 --- src/seat.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/seat.c b/src/seat.c index 36aa3151..64447df4 100644 --- a/src/seat.c +++ b/src/seat.c @@ -349,8 +349,13 @@ focus_change_notify(struct wl_listener *listener, void *data) struct seat *seat = wl_container_of(listener, seat, focus_change); struct wlr_seat_keyboard_focus_change_event *event = data; struct server *server = seat->server; - struct view *view = event->new_surface ? - view_from_wlr_surface(event->new_surface) : NULL; + struct wlr_surface *surface = event->new_surface; + struct view *view = surface ? view_from_wlr_surface(surface) : NULL; + + /* Prevent focus switch to layershell client from updating view state */ + if (surface && wlr_layer_surface_v1_try_from_wlr_surface(surface)) { + return; + } /* * If an xwayland-unmanaged surface was focused belonging to the