mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2025-10-29 05:40:12 -04:00
add xwayland unmanaged tests to support dmenu
This adds `wlr_xwayland_surface_is_unamanged`, to allow compositors more fine grained control over XWayland focus. A surface that is unmanaged should not receive focus, while other windows that are just override redirect may want it (dmenu). The way unamanged is determined is taken from wlc.
This commit is contained in:
parent
3bce37f99a
commit
bb676013ed
8 changed files with 60 additions and 2 deletions
|
|
@ -405,3 +405,24 @@ void wlr_xwayland_set_seat(struct wlr_xwayland *xwayland,
|
|||
xwayland->seat_destroy.notify = wlr_xwayland_handle_seat_destroy;
|
||||
wl_signal_add(&seat->events.destroy, &xwayland->seat_destroy);
|
||||
}
|
||||
|
||||
|
||||
bool wlr_xwayland_surface_is_unmanaged(const struct wlr_xwayland_surface *surface) {
|
||||
static enum atom_name needles[] = {
|
||||
NET_WM_WINDOW_TYPE_UTILITY,
|
||||
NET_WM_WINDOW_TYPE_TOOLTIP,
|
||||
NET_WM_WINDOW_TYPE_DND,
|
||||
NET_WM_WINDOW_TYPE_DROPDOWN_MENU,
|
||||
NET_WM_WINDOW_TYPE_POPUP_MENU,
|
||||
NET_WM_WINDOW_TYPE_COMBO,
|
||||
};
|
||||
|
||||
for (size_t i = 0; i < sizeof(needles) / sizeof(needles[0]); ++i) {
|
||||
if (wlr_xwm_atoms_contains(surface->xwm, surface->window_type,
|
||||
surface->window_type_len, needles[i])) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue