xwayland: sync always-on-top to X11

This commit is contained in:
Consolatis 2026-03-12 13:25:50 +01:00
parent 3b6fe26301
commit 17d6c29037
2 changed files with 20 additions and 0 deletions

View file

@ -59,6 +59,12 @@ struct xwayland_view {
/* Not (yet) implemented */ /* Not (yet) implemented */
/* struct wl_listener set_role; */ /* struct wl_listener set_role; */
/* struct wl_listener set_hints; */ /* struct wl_listener set_hints; */
/* Events coming in from the view itself */
struct {
struct wl_listener always_on_top;
} on_view;
}; };
void xwayland_unmanaged_create(struct server *server, void xwayland_unmanaged_create(struct server *server,

View file

@ -368,6 +368,8 @@ handle_destroy(struct wl_listener *listener, void *data)
wl_list_remove(&xwayland_view->focus_in.link); wl_list_remove(&xwayland_view->focus_in.link);
wl_list_remove(&xwayland_view->map_request.link); wl_list_remove(&xwayland_view->map_request.link);
wl_list_remove(&xwayland_view->on_view.always_on_top.link);
view_destroy(view); view_destroy(view);
} }
@ -1032,6 +1034,15 @@ static const struct view_impl xwayland_view_impl = {
.get_pid = xwayland_view_get_pid, .get_pid = xwayland_view_get_pid,
}; };
static void
handle_always_on_top(struct wl_listener *listener, void *data)
{
struct xwayland_view *xwayland_view =
wl_container_of(listener, xwayland_view, on_view.always_on_top);
wlr_xwayland_surface_set_above(xwayland_view->xwayland_surface,
xwayland_view->base.layer == VIEW_LAYER_ALWAYS_ON_TOP);
}
void void
xwayland_view_create(struct server *server, xwayland_view_create(struct server *server,
struct wlr_xwayland_surface *xsurface, bool mapped) struct wlr_xwayland_surface *xsurface, bool mapped)
@ -1083,6 +1094,9 @@ xwayland_view_create(struct server *server,
CONNECT_SIGNAL(xsurface, xwayland_view, focus_in); CONNECT_SIGNAL(xsurface, xwayland_view, focus_in);
CONNECT_SIGNAL(xsurface, xwayland_view, map_request); CONNECT_SIGNAL(xsurface, xwayland_view, map_request);
/* Events from the view itself */
CONNECT_SIGNAL(view, &xwayland_view->on_view, always_on_top);
wl_list_insert(&view->server->views, &view->link); wl_list_insert(&view->server->views, &view->link);
view->creation_id = view->server->next_view_creation_id++; view->creation_id = view->server->next_view_creation_id++;