From e82bd9a475e94d79f014e607002ba64cbc3cb4f6 Mon Sep 17 00:00:00 2001 From: Jeffy Chen Date: Mon, 19 Oct 2020 18:13:23 +0800 Subject: [PATCH 32/62] HACK: xdg-shell: Don't abort when client size mismatched There's a race in qtwayland might causing size mismatch, let's workaround it here for now. Signed-off-by: Jeffy Chen --- libweston-desktop/xdg-shell.c | 37 ++++++++++++----------------------- 1 file changed, 12 insertions(+), 25 deletions(-) diff --git a/libweston-desktop/xdg-shell.c b/libweston-desktop/xdg-shell.c index 57828103..2df7e7f6 100644 --- a/libweston-desktop/xdg-shell.c +++ b/libweston-desktop/xdg-shell.c @@ -706,37 +706,24 @@ weston_desktop_xdg_toplevel_committed(struct weston_desktop_xdg_toplevel *toplev if (toplevel->next.state.maximized && (toplevel->next.size.width != geometry.width || toplevel->next.size.height != geometry.height)) { - struct weston_desktop_client *client = - weston_desktop_surface_get_client(toplevel->base.desktop_surface); - struct wl_resource *client_resource = - weston_desktop_client_get_resource(client); + weston_desktop_xdg_surface_schedule_configure(&toplevel->base); + weston_log("xdg_surface buffer (%" PRIi32 " x %" PRIi32 ") " + "does not match the configured maximized state (%" PRIi32 " x %" PRIi32 ")", + geometry.width, geometry.height, + toplevel->next.size.width, + toplevel->next.size.height); - wl_resource_post_error(client_resource, - XDG_WM_BASE_ERROR_INVALID_SURFACE_STATE, - "xdg_surface buffer (%" PRIi32 " x %" PRIi32 ") " - "does not match the configured maximized state (%" PRIi32 " x %" PRIi32 ")", - geometry.width, geometry.height, - toplevel->next.size.width, - toplevel->next.size.height); - return; } if (toplevel->next.state.fullscreen && (toplevel->next.size.width < geometry.width || toplevel->next.size.height < geometry.height)) { - struct weston_desktop_client *client = - weston_desktop_surface_get_client(toplevel->base.desktop_surface); - struct wl_resource *client_resource = - weston_desktop_client_get_resource(client); - - wl_resource_post_error(client_resource, - XDG_WM_BASE_ERROR_INVALID_SURFACE_STATE, - "xdg_surface geometry (%" PRIi32 " x %" PRIi32 ") " - "is larger than the configured fullscreen state (%" PRIi32 " x %" PRIi32 ")", - geometry.width, geometry.height, - toplevel->next.size.width, - toplevel->next.size.height); - return; + weston_desktop_xdg_surface_schedule_configure(&toplevel->base); + weston_log("xdg_surface geometry (%" PRIi32 " x %" PRIi32 ") " + "is larger than the configured fullscreen state (%" PRIi32 " x %" PRIi32 ")", + geometry.width, geometry.height, + toplevel->next.size.width, + toplevel->next.size.height); } toplevel->current.state = toplevel->next.state; -- 2.20.1