From 5c7e68e24a6a2f2d6e39a36aba6730627445af1f Mon Sep 17 00:00:00 2001 From: MinJeong Kim Date: Thu, 17 Nov 2016 21:19:41 +0900 Subject: [PATCH] rotation: fix waiting for removed client Change-Id: I4298c86813342026898acff9686341a0b52db1f4 Signed-off-by: MinJeong Kim --- src/e_mod_effect_rotation.c | 44 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/src/e_mod_effect_rotation.c b/src/e_mod_effect_rotation.c index 341be53..9a28e7a 100644 --- a/src/e_mod_effect_rotation.c +++ b/src/e_mod_effect_rotation.c @@ -780,7 +780,13 @@ _rotation_effect_cb_zone_rotation_end(void *data, int type, void *event) return ECORE_CALLBACK_PASS_ON; } - if (!effect->ctx_end) _rotation_effect_animator_end_prepare(effect); + if (!effect->ctx_end) + { + _rotation_effect_animator_end_prepare(effect); + + if (!effect->ctx_end) + _rotation_effect_clear(effect); + } if (effect->ctx_end) _rotation_effect_start(effect); return ECORE_CALLBACK_PASS_ON; @@ -834,6 +840,39 @@ _rotation_effect_cb_buffer_change(void *data, int ev_type, void *event) return ECORE_CALLBACK_PASS_ON; } +static Eina_Bool +_rotation_effect_cb_client_remove(void *data, int ev_type, void *event) +{ + E_Event_Client *ev = event; + E_Client *ec; + Rotation_Effect *effect; + Rotation_Effect_Object *eobj; + Eina_List *l; + Eina_Bool clear = EINA_FALSE; + + ec = ev->ec; + if (!ec) return ECORE_CALLBACK_PASS_ON; + + effect = (Rotation_Effect *)data; + if (!effect) return ECORE_CALLBACK_PASS_ON; + if (effect->ctx_begin) + { + EINA_LIST_FOREACH(effect->ctx_begin->objects, l, eobj) + { + if (ec == eobj->ec) + { + clear = EINA_TRUE; + break; + } + } + + if (clear) + _rotation_effect_clear(effect); + } + + return ECORE_CALLBACK_PASS_ON; +} + static void _rotation_effect_free(Rotation_Effect *effect) { @@ -916,6 +955,9 @@ _rotation_zone_create(E_Zone *zone) E_EVENT_CLIENT_BUFFER_CHANGE, _rotation_effect_cb_buffer_change, rotation_zone->effect); + E_LIST_HANDLER_APPEND(rotation_zone->event_hdlrs, + E_EVENT_CLIENT_REMOVE, + _rotation_effect_cb_client_remove, rotation_zone->effect); return rotation_zone; } -- 2.7.4