fix animation refcounting when toggling object visibility very quickly
authorMike Blumenkrantz <zmike@osg.samsung.com>
Fri, 19 Jun 2015 20:28:13 +0000 (16:28 -0400)
committerMike Blumenkrantz <zmike@osg.samsung.com>
Fri, 19 Jun 2015 20:28:13 +0000 (16:28 -0400)
previously the animating flag would receive an additional increment for
every effect, even if it was currently animating a prior effect, leading
to objects which were never deleted

src/bin/e_comp_object.c

index 473b1fe..14cf7f9 100644 (file)
@@ -714,8 +714,10 @@ _e_comp_object_effect_visibility_start(E_Comp_Object *cw, Eina_Bool state)
    int x, y, zw, zh;
 
    if ((!cw->visibility_effect) || (!e_comp_object_effect_allowed_get(cw->smart_obj))) return EINA_TRUE;;
-   _e_comp_object_animating_begin(cw);
-   e_comp_object_effect_stop(cw->smart_obj, _e_comp_object_done_defer);
+   if (!cw->effect_running)
+     _e_comp_object_animating_begin(cw);
+   if (!e_comp_object_effect_stop(cw->smart_obj, _e_comp_object_done_defer))
+     return _e_comp_object_animating_end(cw);
    if (!e_comp_object_effect_set(cw->smart_obj, cw->visibility_effect))
      return _e_comp_object_animating_end(cw);
    /* mouse position is not available for some windows under X11