xwm: allow applications to change focus between their own surfaces

Although currently this problem is present in only Steam, and it is
actually a client bug.
This commit is contained in:
Ilia Bozhinov 2020-01-05 18:36:32 +02:00 committed by Simon Ser
parent 51f8c22f4d
commit c067fbc010

View file

@ -1234,8 +1234,17 @@ static void xwm_handle_focus_in(struct wlr_xwm *xwm,
// Do not let X clients change the focus behind the compositor's // Do not let X clients change the focus behind the compositor's
// back. Reset the focus to the old one if it changed. // back. Reset the focus to the old one if it changed.
if (!xwm->focus_surface || ev->event != xwm->focus_surface->window_id) { //
// Note: Some applications rely on being able to change focus, for ex. Steam:
// https://github.com/swaywm/sway/issues/1865
// Because of that, we allow changing focus between surfaces belonging to the
// same application.
struct wlr_xwayland_surface *requested_focus = lookup_surface(xwm, ev->event);
if (!xwm->focus_surface || !requested_focus ||
requested_focus->pid != xwm->focus_surface->pid) {
xwm_send_focus_window(xwm, xwm->focus_surface); xwm_send_focus_window(xwm, xwm->focus_surface);
} else {
xwm->focus_surface = requested_focus;
} }
} }