diff options
author | Quentin Glidic <sardemff7+git@sardemff7.net> | 2017-07-12 09:45:43 +0200 |
---|---|---|
committer | Quentin Glidic <sardemff7+git@sardemff7.net> | 2017-07-18 13:12:30 +0200 |
commit | ac394a10bcecd1aec499ebeaec4aea0430657308 (patch) | |
tree | 77e06eb17583cb0a649adca3f83417c5efae0be0 /libweston-desktop | |
parent | 19d1f6effe1d28a8f905ad87d6fdde0b7393a363 (diff) | |
download | weston-ac394a10bcecd1aec499ebeaec4aea0430657308.tar.gz |
libweston-desktop/xdg-shell: Check surface size against acknowledged size
We were checking against the pending size, which lead some clients
(simple-egl) to crash because they sent a buffer before acknowledging
the latest configure event.
Signed-off-by: Quentin Glidic <sardemff7+git@sardemff7.net>
Tested-by: Emmanuel Gil Peyrot <emmanuel.peyrot@collabora.com>
Reviewed-by: Jonas Ã…dahl <jadahl@gmail.com>
Diffstat (limited to 'libweston-desktop')
-rw-r--r-- | libweston-desktop/xdg-shell-v5.c | 6 | ||||
-rw-r--r-- | libweston-desktop/xdg-shell-v6.c | 6 |
2 files changed, 8 insertions, 4 deletions
diff --git a/libweston-desktop/xdg-shell-v5.c b/libweston-desktop/xdg-shell-v5.c index 0fb067ab..b32b7812 100644 --- a/libweston-desktop/xdg-shell-v5.c +++ b/libweston-desktop/xdg-shell-v5.c @@ -60,6 +60,7 @@ struct weston_desktop_xdg_surface { } pending; struct { struct weston_desktop_xdg_surface_state state; + struct weston_size size; } next; struct { struct weston_desktop_xdg_surface_state state; @@ -244,8 +245,8 @@ weston_desktop_xdg_surface_committed(struct weston_desktop_surface *dsurface, bool reconfigure = false; if (surface->next.state.maximized || surface->next.state.fullscreen) - reconfigure = surface->pending.size.width != wsurface->width || - surface->pending.size.height != wsurface->height; + reconfigure = surface->next.size.width != wsurface->width || + surface->next.size.height != wsurface->height; if (reconfigure) { weston_desktop_xdg_surface_schedule_configure(surface, true); @@ -447,6 +448,7 @@ weston_desktop_xdg_surface_protocol_ack_configure(struct wl_client *wl_client, return; surface->next.state = surface->pending.state; + surface->next.size = surface->pending.size; } static void diff --git a/libweston-desktop/xdg-shell-v6.c b/libweston-desktop/xdg-shell-v6.c index db894d4a..f5e46daa 100644 --- a/libweston-desktop/xdg-shell-v6.c +++ b/libweston-desktop/xdg-shell-v6.c @@ -95,6 +95,7 @@ struct weston_desktop_xdg_toplevel { } pending; struct { struct weston_desktop_xdg_toplevel_state state; + struct weston_size size; struct weston_size min_size, max_size; } next; struct { @@ -424,6 +425,7 @@ static void weston_desktop_xdg_toplevel_ack_configure(struct weston_desktop_xdg_toplevel *toplevel) { toplevel->next.state = toplevel->pending.state; + toplevel->next.size = toplevel->pending.size; } static void @@ -626,8 +628,8 @@ weston_desktop_xdg_toplevel_committed(struct weston_desktop_xdg_toplevel *toplev return; if ((toplevel->next.state.maximized || toplevel->next.state.fullscreen) && - (toplevel->pending.size.width != wsurface->width || - toplevel->pending.size.height != wsurface->height)) { + (toplevel->next.size.width != wsurface->width || + toplevel->next.size.height != wsurface->height)) { struct weston_desktop_client *client = weston_desktop_surface_get_client(toplevel->base.desktop_surface); struct wl_resource *client_resource = |