From 87d4e254f08d2d3e0ab170a5f4ecd056947bb1dd Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Fri, 19 Feb 2016 17:56:26 -0500 Subject: [PATCH] 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 12e1b5f9b..44dc952fa 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 f9334bf9f..209baff3d 100644 --- a/src/bin/e_comp_x.c +++ b/src/bin/e_comp_x.c @@ -4629,7 +4629,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);