discomfitor pushed a commit to branch enlightenment-0.20. http://git.enlightenment.org/core/enlightenment.git/commit/?id=1a71696c3a6b344d75461f31ed46b50335fd158e
commit 1a71696c3a6b344d75461f31ed46b50335fd158e Author: Mike Blumenkrantz <zm...@osg.samsung.com> Date: Fri Feb 19 17:56:26 2016 -0500 pre-remove pixmap from x11 clients during del hook this breaks the compositor! ref 0ca200513e4d46542192762ffdc2481a32e8db63 --- src/bin/e_client.c | 11 +++++++---- src/bin/e_comp_x.c | 7 +++++++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/bin/e_client.c b/src/bin/e_client.c index 2d2d7fb..bd490b4 100644 --- a/src/bin/e_client.c +++ b/src/bin/e_client.c @@ -462,9 +462,12 @@ _e_client_revert_focus(E_Client *ec) static void _e_client_free(E_Client *ec) { - if (e_pixmap_free(ec->pixmap)) - e_pixmap_client_set(ec->pixmap, NULL); - ec->pixmap = NULL; + if (ec->pixmap) + { + if (e_pixmap_free(ec->pixmap)) + e_pixmap_client_set(ec->pixmap, NULL); + ec->pixmap = NULL; + } e_comp_object_redirected_set(ec->frame, 0); e_comp_object_render_update_del(ec->frame); @@ -639,6 +642,7 @@ _e_client_del(E_Client *ec) evas_object_focus_set(ec->frame, 0); E_FREE_FUNC(ec->ping_poller, ecore_poller_del); + eina_hash_del_by_key(clients_hash[e_pixmap_type_get(ec->pixmap)], &ec->pixmap); /* must be called before parent/child clear */ _e_client_hook_call(E_CLIENT_HOOK_DEL, ec); E_FREE(ec->comp_data); @@ -664,7 +668,6 @@ _e_client_del(E_Client *ec) EINA_LIST_FREE(ec->group, child) child->leader = NULL; - eina_hash_del_by_key(clients_hash[e_pixmap_type_get(ec->pixmap)], &ec->pixmap); e_comp->clients = eina_list_remove(e_comp->clients, ec); e_comp_object_render_update_del(ec->frame); } diff --git a/src/bin/e_comp_x.c b/src/bin/e_comp_x.c index 10d8efc..d5ec68c 100644 --- a/src/bin/e_comp_x.c +++ b/src/bin/e_comp_x.c @@ -4621,7 +4621,14 @@ _e_comp_x_hook_client_del(void *d EINA_UNUSED, E_Client *ec) e_pixmap_free(e_comp_x_client_pixmap_get(ec)); } } + else #endif + { + if (e_pixmap_free(ec->pixmap)) + e_pixmap_client_set(ec->pixmap, NULL); + ec->pixmap = NULL; + } + if (post_clients) post_clients = eina_list_remove(post_clients, ec); --