mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2025-10-31 22:25:21 -04:00
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.
This commit is contained in:
parent
eb5312022a
commit
5083efe18b
3 changed files with 47 additions and 4 deletions
|
|
@ -113,6 +113,7 @@ struct wlr_xwm {
|
|||
struct wlr_xwm_selection dnd_selection;
|
||||
|
||||
struct wlr_xwayland_surface *focus_surface;
|
||||
struct wlr_xwayland_surface *offered_focus;
|
||||
|
||||
// Surfaces in creation order
|
||||
struct wl_list surfaces; // wlr_xwayland_surface.link
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue