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