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;
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)
{
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;
}