Commit e3a582f9 authored by Pekka Paalanen's avatar Pekka Paalanen

libweston-desktop/xwayland: add is_mapped handling for XWAYLAND

The xwayland window type XWAYLAND is not handled by the shell at all,
instead libweston-desktop maps such surfaces itself. However, it forgot
to set weston_surface::is_mapped and weston_view::is_mapped.

weston_surface::is_mapped affects the behaviour of weston_view_unmap()
and weston_surface_attach().

weston_view::is_mapped affects the behaviour of weston_view_unmap() and

When manually mapping a window of type XWAYLAND, mark both the view and
surface as mapped. This follows the expections in libweston, even though
the meaning of is_mapped is not clearly defined for either surface or

Also, when the XWAYLAND window is manually unmapped, unmap the
weston_surface. This updates weston_surface::is_mapped to reflect the
state. However, as a side-effect it will also unmap all sibling views,
should any exist.

v2: rename surface_base to wsurface
Signed-off-by: Pekka Paalanen's avatarPekka Paalanen <>
Reviewed-by: Quentin Glidic's avatarQuentin Glidic <>
Acked-by: Daniel Stone's avatarDaniel Stone <>
parent bbc749af
......@@ -71,6 +71,7 @@ weston_desktop_xwayland_surface_change_state(struct weston_desktop_xwayland_surf
struct weston_desktop_surface *parent,
int32_t x, int32_t y)
struct weston_surface *wsurface;
bool to_add = (parent == NULL && state != XWAYLAND);
assert(state != NONE);
......@@ -81,6 +82,8 @@ weston_desktop_xwayland_surface_change_state(struct weston_desktop_xwayland_surf
wsurface = weston_desktop_surface_get_surface(surface->surface);
if (surface->state != state) {
if (surface->state == XWAYLAND) {
......@@ -88,6 +91,7 @@ weston_desktop_xwayland_surface_change_state(struct weston_desktop_xwayland_surf
surface->view = NULL;
if (to_add) {
......@@ -109,6 +113,8 @@ weston_desktop_xwayland_surface_change_state(struct weston_desktop_xwayland_surf
weston_view_set_position(surface->view, x, y);
surface->view->is_mapped = true;
wsurface->is_mapped = true;
surface->state = state;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment