wlroots/xwayland
John Lindgren 5083efe18b xwayland: add wlr_xwayland_surface_offer_focus()
In labwc, we have had trouble with XWayland windows using the Globally
Active input model (see wlr_xwayland_icccm_input_model()). Under
traditional X11, these windows do not expect to be given focus directly
by the window manager; rather, the WM sends them a WM_TAKE_FOCUS message
prompting the client to take focus voluntarily.

Currently, these clients are difficult to support with wlroots, because
wlr_xwayland_surface_activate() assumes the client window will always
accept the keyboard focus after being sent WM_TAKE_FOCUS. Some Globally
Active client windows (e.g. panels/toolbars) don't want to be focused.
It's useless at best to focus them, and might even make them misbehave.
Others do need keyboard focus to be functional -- and there doesn't seem
to be any reliable way to know this in advance.

Adding wlr_xwayland_surface_offer_focus() allows the compositor to send
WM_TAKE_FOCUS to a client window supporting it and then see whether the
client accepts or ignores the offer. If it accepts, the surface will emit
the focus_in signal notifying the compositor that it has received focus.

This is entirely opt-in. A compositor that doesn't want to use the new
function can continue to call wlr_xwayland_surface_activate() directly
just as before.
2024-08-01 13:19:24 +00:00
..
selection xwayland: add a size-safe wrapper for xcb_send_event 2024-04-20 15:12:45 +02:00
meson.build xwayland: enable use of a xserver subproject 2023-05-04 18:02:32 +00:00
server.c Define _POSIX_C_SOURCE globally 2024-02-15 15:41:12 +01:00
shell.c xwayland: fix double free wlr_xwayland_shell_v1 2023-10-06 10:04:11 +02:00
sockets.c Define _POSIX_C_SOURCE globally 2024-02-15 15:41:12 +01:00
sockets.h Add some missing includes/declarations 2023-06-05 21:06:19 +00:00
xwayland.c Define _POSIX_C_SOURCE globally 2024-02-15 15:41:12 +01:00
xwm.c xwayland: add wlr_xwayland_surface_offer_focus() 2024-08-01 13:19:24 +00:00