xwayland: set focus to XCB_POINTER_ROOT rather than XCB_NONE

Fixes an issue with keyboard grabs not working when no XWayland windows
are focused.
This commit is contained in:
John Lindgren 2024-02-14 06:09:45 -05:00 committed by Kirill Primak
parent 5083efe18b
commit f9199bb6d4

View File

@ -363,9 +363,13 @@ static void xwm_focus_window(struct wlr_xwm *xwm,
// We handle cases where focus_surface == xsurface because we // We handle cases where focus_surface == xsurface because we
// want to be able to deny FocusIn events. // want to be able to deny FocusIn events.
if (!xsurface) { if (!xsurface) {
// XCB_POINTER_ROOT is described in xcb documentation but isn't
// actually defined in the headers. It's distinct from XCB_NONE
// (which disables keyboard input entirely and causes issues
// with keyboard grabs for e.g. popups).
xcb_set_input_focus_checked(xwm->xcb_conn, xcb_set_input_focus_checked(xwm->xcb_conn,
XCB_INPUT_FOCUS_POINTER_ROOT, XCB_INPUT_FOCUS_POINTER_ROOT,
XCB_NONE, XCB_CURRENT_TIME); 1L /*XCB_POINTER_ROOT*/, XCB_CURRENT_TIME);
return; return;
} }