From abc2c4f00b73e40483fce712d14d62e6aa869651 Mon Sep 17 00:00:00 2001 From: BrassyPanache Date: Wed, 13 Jan 2021 00:56:33 +1100 Subject: [PATCH] Adhere to ICCCM focus specification For certain applications (e.g. JetBrains) the parent window controls input. We need to adhere to the ICCCM input focus specification to properly handle these cases. Relates to swaywm/wlroots#2604 --- sway/tree/view.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/sway/tree/view.c b/sway/tree/view.c index 07ca3dff6..7afcdf31c 100644 --- a/sway/tree/view.c +++ b/sway/tree/view.c @@ -785,7 +785,18 @@ void view_map(struct sway_view *view, struct wlr_surface *wlr_surface, view_execute_criteria(view); - if (should_focus(view)) { + bool set_focus = should_focus(view); + +#if HAVE_XWAYLAND + if (wlr_surface_is_xwayland_surface(wlr_surface)) { + struct wlr_xwayland_surface *xsurface = + wlr_xwayland_surface_from_wlr_surface(wlr_surface); + set_focus = (wlr_xwayland_icccm_input_model(xsurface) != + WLR_ICCCM_INPUT_MODEL_NONE) && set_focus; + } +#endif + + if (set_focus) { input_manager_set_focus(&view->container->node); }