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
This commit is contained in:
BrassyPanache 2021-01-13 00:56:33 +11:00 committed by Simon Ser
parent 38571e6a0c
commit 62ec528c8c
1 changed files with 12 additions and 1 deletions

View File

@ -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);
}