1From 6bd2665d8c15d6ea098c61ca78e00ec051c10ae7 Mon Sep 17 00:00:00 2001 2From: Jeffy Chen <jeffy.chen@rock-chips.com> 3Date: Mon, 19 Oct 2020 18:13:23 +0800 4Subject: [PATCH 35/93] HACK: xdg-shell: Don't abort when client size 5 mismatched 6 7There's a race in qtwayland might causing size mismatch, let's 8workaround it here for now. 9 10Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com> 11--- 12 libweston/desktop/xdg-shell.c | 38 +++++++++++------------------------ 13 1 file changed, 12 insertions(+), 26 deletions(-) 14 15diff --git a/libweston/desktop/xdg-shell.c b/libweston/desktop/xdg-shell.c 16index 636dc29..293b852 100644 17--- a/libweston/desktop/xdg-shell.c 18+++ b/libweston/desktop/xdg-shell.c 19@@ -741,37 +741,23 @@ weston_desktop_xdg_toplevel_committed(struct weston_desktop_xdg_toplevel *toplev 20 if (toplevel->next.state.maximized && 21 (toplevel->next.size.width != geometry.width || 22 toplevel->next.size.height != geometry.height)) { 23- struct weston_desktop_client *client = 24- weston_desktop_surface_get_client(toplevel->base.desktop_surface); 25- struct wl_resource *client_resource = 26- weston_desktop_client_get_resource(client); 27- 28- wl_resource_post_error(client_resource, 29- XDG_WM_BASE_ERROR_INVALID_SURFACE_STATE, 30- "xdg_surface geometry (%" PRIi32 " x %" PRIi32 ") " 31- "does not match the configured maximized state (%" PRIi32 " x %" PRIi32 ")", 32- geometry.width, geometry.height, 33- toplevel->next.size.width, 34- toplevel->next.size.height); 35- return; 36+ weston_desktop_xdg_surface_schedule_configure(&toplevel->base); 37+ weston_log("xdg_surface buffer (%" PRIi32 " x %" PRIi32 ") " 38+ "does not match the configured maximized state (%" PRIi32 " x %" PRIi32 ")", 39+ geometry.width, geometry.height, 40+ toplevel->next.size.width, 41+ toplevel->next.size.height); 42 } 43 44 if (toplevel->next.state.fullscreen && 45 (toplevel->next.size.width < geometry.width || 46 toplevel->next.size.height < geometry.height)) { 47- struct weston_desktop_client *client = 48- weston_desktop_surface_get_client(toplevel->base.desktop_surface); 49- struct wl_resource *client_resource = 50- weston_desktop_client_get_resource(client); 51- 52- wl_resource_post_error(client_resource, 53- XDG_WM_BASE_ERROR_INVALID_SURFACE_STATE, 54- "xdg_surface geometry (%" PRIi32 " x %" PRIi32 ") " 55- "is larger than the configured fullscreen state (%" PRIi32 " x %" PRIi32 ")", 56- geometry.width, geometry.height, 57- toplevel->next.size.width, 58- toplevel->next.size.height); 59- return; 60+ weston_desktop_xdg_surface_schedule_configure(&toplevel->base); 61+ weston_log("xdg_surface geometry (%" PRIi32 " x %" PRIi32 ") " 62+ "is larger than the configured fullscreen state (%" PRIi32 " x %" PRIi32 ")", 63+ geometry.width, geometry.height, 64+ toplevel->next.size.width, 65+ toplevel->next.size.height); 66 } 67 68 toplevel->current.state = toplevel->next.state; 69-- 702.20.1 71 72