elementary/elm_transit - fixed a bug.
authorhermet <hermet@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Sun, 21 Aug 2011 12:09:22 +0000 (12:09 +0000)
committerhermet <hermet@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Sun, 21 Aug 2011 12:09:22 +0000 (12:09 +0000)
It could be refered even the transit is deleted.

git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/elementary@62658 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/elm_transit.c

index daadca5..216a28d 100644 (file)
@@ -93,7 +93,7 @@ static void _transit_obj_remove(Elm_Transit *transit, Evas_Object *obj);
 static void _transit_effect_del(Elm_Transit *transit, Elm_Transit_Effect_Module *effect_module);
 static void _transit_remove_dead_effects(Elm_Transit *transit);
 static void _transit_del(Elm_Transit *transit);
-static void _transit_animate_op(Elm_Transit *transit, double progress);
+static Eina_Bool _transit_animate_op(Elm_Transit *transit, double progress);
 static Eina_Bool _transit_animate_cb(void *data);
 
 static char *_transit_key= "_elm_transit_key";
@@ -282,7 +282,8 @@ _transit_del(Elm_Transit *transit)
    free(transit);
 }
 
-static void
+//If the transit is deleted then EINA_FALSE is retruned.
+static Eina_Bool
 _transit_animate_op(Elm_Transit *transit, double progress)
 {
    Elm_Transit_Effect_Module *effect_module;
@@ -296,10 +297,17 @@ _transit_animate_op(Elm_Transit *transit, double progress)
      }
    transit->walking--;
 
-   if (transit->walking) return;
+   if (transit->walking) return EINA_TRUE;
+
+   if (transit->deleted)
+     {
+        _transit_del(transit);
+        return EINA_FALSE;
+     }
 
-   if (transit->deleted) _transit_del(transit);
    else if (transit->effects_pending_del) _transit_remove_dead_effects(transit);
+
+   return EINA_TRUE;
 }
 
 static Eina_Bool
@@ -334,7 +342,11 @@ _transit_animate_cb(void *data)
    /* Reverse? */
    if (transit->repeat.reverse) transit->progress = 1 - transit->progress;
 
-   if (transit->time.duration > 0) _transit_animate_op(transit, transit->progress);
+   if (transit->time.duration > 0)
+     {
+        if (!_transit_animate_op(transit, transit->progress))
+          return ECORE_CALLBACK_CANCEL;
+     }
 
    /* Not end. Keep going. */
    if (elapsed_time < duration) return ECORE_CALLBACK_RENEW;