mirror of
https://gitlab.freedesktop.org/wayland/weston
synced 2024-10-03 03:12:18 +00:00
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 weston_view_destroy(). 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 view. 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 <pekka.paalanen@collabora.co.uk> Reviewed-by: Quentin Glidic <sardemff7+git@sardemff7.net> Acked-by: Daniel Stone <daniels@collabora.com>
This commit is contained in:
parent
bbc749af73
commit
e3a582f9ff
|
@ -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
|
|||
return;
|
||||
}
|
||||
|
||||
wsurface = weston_desktop_surface_get_surface(surface->surface);
|
||||
|
||||
if (surface->state != state) {
|
||||
if (surface->state == XWAYLAND) {
|
||||
assert(!surface->added);
|
||||
|
@ -88,6 +91,7 @@ weston_desktop_xwayland_surface_change_state(struct weston_desktop_xwayland_surf
|
|||
weston_desktop_surface_unlink_view(surface->view);
|
||||
weston_view_destroy(surface->view);
|
||||
surface->view = NULL;
|
||||
weston_surface_unmap(wsurface);
|
||||
}
|
||||
|
||||
if (to_add) {
|
||||
|
@ -109,6 +113,8 @@ weston_desktop_xwayland_surface_change_state(struct weston_desktop_xwayland_surf
|
|||
weston_layer_entry_insert(&surface->xwayland->layer.view_list,
|
||||
&surface->view->layer_link);
|
||||
weston_view_set_position(surface->view, x, y);
|
||||
surface->view->is_mapped = true;
|
||||
wsurface->is_mapped = true;
|
||||
}
|
||||
|
||||
surface->state = state;
|
||||
|
|
Loading…
Reference in a new issue