From 38d18e559d3c99371a9ad7a019ab2fbdd06f0437 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Fri, 7 Jul 2017 16:26:50 -0400 Subject: [PATCH] ecore-wl2: create surfaces once compositor global is bound it's expected that surfaces are created when a window exists @fix --- src/lib/ecore_wl2/ecore_wl2_display.c | 3 +++ src/lib/ecore_wl2/ecore_wl2_private.h | 1 + src/lib/ecore_wl2/ecore_wl2_window.c | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/lib/ecore_wl2/ecore_wl2_display.c b/src/lib/ecore_wl2/ecore_wl2_display.c index b828bdaed6..94fdd56c82 100644 --- a/src/lib/ecore_wl2/ecore_wl2_display.c +++ b/src/lib/ecore_wl2/ecore_wl2_display.c @@ -138,10 +138,13 @@ _cb_global_add(void *data, struct wl_registry *registry, unsigned int id, const if (!strcmp(interface, "wl_compositor")) { + Ecore_Wl2_Window *window; ewd->wl.compositor_version = MIN(version, 4); ewd->wl.compositor = wl_registry_bind(registry, id, &wl_compositor_interface, ewd->wl.compositor_version); + EINA_INLIST_FOREACH(ewd->windows, window) + _ecore_wl2_window_surface_create(window); } else if (!strcmp(interface, "wl_subcompositor")) { diff --git a/src/lib/ecore_wl2/ecore_wl2_private.h b/src/lib/ecore_wl2/ecore_wl2_private.h index da7a8ae3ef..ec2f88768d 100644 --- a/src/lib/ecore_wl2/ecore_wl2_private.h +++ b/src/lib/ecore_wl2/ecore_wl2_private.h @@ -502,6 +502,7 @@ void _ecore_wl2_dnd_del(Ecore_Wl2_Dnd_Source *source); void _ecore_wl2_subsurf_unmap(Ecore_Wl2_Subsurface *subsurf); void _ecore_wl2_subsurf_free(Ecore_Wl2_Subsurface *subsurf); +void _ecore_wl2_window_surface_create(Ecore_Wl2_Window *window); void _ecore_wl2_window_shell_surface_init(Ecore_Wl2_Window *window); void _ecore_wl2_window_www_surface_init(Ecore_Wl2_Window *window); void _ecore_wl2_window_semi_free(Ecore_Wl2_Window *window); diff --git a/src/lib/ecore_wl2/ecore_wl2_window.c b/src/lib/ecore_wl2/ecore_wl2_window.c index 98f25dd175..f16535fb22 100644 --- a/src/lib/ecore_wl2/ecore_wl2_window.c +++ b/src/lib/ecore_wl2/ecore_wl2_window.c @@ -537,7 +537,7 @@ surf_err: ERR("Failed to create surface for window"); } -static void +void _ecore_wl2_window_surface_create(Ecore_Wl2_Window *window) { if (!window->display->wl.compositor) return;