discomfitor pushed a commit to branch enlightenment-0.20. http://git.enlightenment.org/core/enlightenment.git/commit/?id=93a2233f28d662a6db4f0d264494659a98ae1f27
commit 93a2233f28d662a6db4f0d264494659a98ae1f27 Author: Mike Blumenkrantz <zm...@osg.samsung.com> Date: Wed May 11 15:36:45 2016 -0400 use window id for internal window pixmaps again on wayland this was breaking internal windows when more than one was open, and especially if any were open which had a parent-child relationship, by using the same id for all internal window pixmaps --- src/bin/e_comp_wl.c | 6 +++++- src/bin/e_win.c | 18 ++++++------------ 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/bin/e_comp_wl.c b/src/bin/e_comp_wl.c index cea36ed..1abbc2b 100644 --- a/src/bin/e_comp_wl.c +++ b/src/bin/e_comp_wl.c @@ -1427,6 +1427,7 @@ _e_comp_wl_surface_destroy(struct wl_resource *resource) if (!(ec = wl_resource_get_user_data(resource))) return; + e_pixmap_alias(ec->pixmap, E_PIXMAP_TYPE_WL, wl_resource_get_id(resource)); e_object_del(E_OBJECT(ec)); evas_object_hide(ec->frame); } @@ -2243,7 +2244,10 @@ _e_comp_wl_client_cb_del(void *data EINA_UNUSED, E_Client *ec) wl_resource_destroy(cb); if (ec->comp_data->surface) - wl_resource_set_user_data(ec->comp_data->surface, NULL); + { + e_pixmap_alias(ec->pixmap, E_PIXMAP_TYPE_WL, wl_resource_get_id(ec->comp_data->surface)); + wl_resource_set_user_data(ec->comp_data->surface, NULL); + } if (ec->internal_elm_win) evas_object_hide(ec->frame); diff --git a/src/bin/e_win.c b/src/bin/e_win.c index 2e0ba14..31667eb 100644 --- a/src/bin/e_win.c +++ b/src/bin/e_win.c @@ -73,7 +73,7 @@ _e_elm_win_trap_show(void *data, Evas_Object *o) E_Client *ec; Ecore_Window win; #ifdef HAVE_WAYLAND - int64_t wl_win_id; + int64_t wl_win_id = -1; #endif E_Pixmap_Type type = E_PIXMAP_TYPE_X; @@ -96,12 +96,7 @@ _e_elm_win_trap_show(void *data, Evas_Object *o) ctx->pointer = e_pointer_window_new(win, EINA_TRUE); } -#ifdef HAVE_WAYLAND - if (type == E_PIXMAP_TYPE_WL) - ec = e_pixmap_find_client(type, wl_win_id); - else -#endif - ec = e_pixmap_find_client(type, win); + ec = e_pixmap_find_client(type, win); if (ec) ctx->client = ec; else @@ -118,13 +113,12 @@ _e_elm_win_trap_show(void *data, Evas_Object *o) title = "E"; ecore_evas_title_set(ee, title); + cp = e_pixmap_new(type, win); + EINA_SAFETY_ON_NULL_RETURN_VAL(cp, EINA_TRUE); #ifdef HAVE_WAYLAND - if (type == E_PIXMAP_TYPE_WL) - cp = e_pixmap_new(type, wl_win_id); - else + if (wl_win_id >= 0) + e_pixmap_alias(cp, type, wl_win_id); #endif - cp = e_pixmap_new(type, win); - EINA_SAFETY_ON_NULL_RETURN_VAL(cp, EINA_TRUE); current_win = ctx; ctx->client = e_client_new(cp, 0, 1); --