From 0669ca31ff898a691c2333214189aff0dab410f2 Mon Sep 17 00:00:00 2001 From: Derek Foreman Date: Thu, 19 Jan 2017 15:25:17 -0600 Subject: [PATCH] wayland: Try not to draw into surfaces without roles xdg v6 will barf if we attach a buffer to the surface before we receive a configure - even if we attach before trying to make a shell surface. So we need to prevent any drawing into surfaces until we've decided what kind of surface they'll ultimately be. Fix T5090 --- src/lib/ecore_wl2/ecore_wl2_display.c | 2 ++ src/lib/ecore_wl2/ecore_wl2_window.c | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/src/lib/ecore_wl2/ecore_wl2_display.c b/src/lib/ecore_wl2/ecore_wl2_display.c index 99e73342f1..c2fc38d73f 100644 --- a/src/lib/ecore_wl2/ecore_wl2_display.c +++ b/src/lib/ecore_wl2/ecore_wl2_display.c @@ -176,6 +176,8 @@ _cb_global_add(void *data, struct wl_registry *registry, unsigned int id, const if ((window->type != ECORE_WL2_WINDOW_TYPE_DND) && (window->type != ECORE_WL2_WINDOW_TYPE_NONE)) _ecore_wl2_window_shell_surface_init(window); + else + window->pending.configure = EINA_FALSE; } else if (!strcmp(interface, "zxdg_shell_v6")) { diff --git a/src/lib/ecore_wl2/ecore_wl2_window.c b/src/lib/ecore_wl2/ecore_wl2_window.c index 327185c084..8acb7d555b 100644 --- a/src/lib/ecore_wl2/ecore_wl2_window.c +++ b/src/lib/ecore_wl2/ecore_wl2_window.c @@ -512,6 +512,7 @@ _ecore_wl2_window_shell_surface_init(Ecore_Wl2_Window *window) &_xdg_surface_listener, window); window->configure_ack = xdg_surface_ack_configure; + window->pending.configure = EINA_FALSE; _ecore_wl2_window_type_set(window); } else if ((window->display->wl.wl_shell) && (!window->wl_shell_surface)) @@ -528,6 +529,7 @@ _ecore_wl2_window_shell_surface_init(Ecore_Wl2_Window *window) wl_shell_surface_add_listener(window->wl_shell_surface, &_wl_shell_surface_listener, window); + window->pending.configure = EINA_FALSE; _ecore_wl2_window_type_set(window); } @@ -615,6 +617,8 @@ ecore_wl2_window_new(Ecore_Wl2_Display *display, Ecore_Wl2_Window *parent, int x win->type = ECORE_WL2_WINDOW_TYPE_TOPLEVEL; + win->pending.configure = EINA_TRUE; + display->windows = eina_inlist_append(display->windows, EINA_INLIST_GET(win)); @@ -668,6 +672,8 @@ ecore_wl2_window_show(Ecore_Wl2_Window *window) _ecore_wl2_window_shell_surface_init(window); _ecore_wl2_window_www_surface_init(window); } + else + window->pending.configure = EINA_FALSE; } EAPI void