timeline: Emit last ::completed before ::stopped
authorEmmanuele Bassi <ebassi@linux.intel.com>
Tue, 12 Jun 2012 21:44:42 +0000 (22:44 +0100)
committerEmmanuele Bassi <ebassi@linux.intel.com>
Wed, 13 Jun 2012 07:42:29 +0000 (08:42 +0100)
The ::stopped signal should be emitted at the end of the Timeline, after
the last ::completed signal emission, in order to have a proper
chronological progress of signal emissions:

  started → new-frame → [ ... ] → completed → stopped

This way, ::stopped can perform a proper teardown of the state set up
during ::started, without interfering with the potential cyclical
emission of ::completed.

clutter/clutter-timeline.c

index ae1d3e0..55a17a8 100644 (file)
@@ -1034,10 +1034,12 @@ clutter_timeline_do_frame (ClutterTimeline *timeline)
            * done in the above new-frame signal handler?
            */
           set_is_playing (timeline, FALSE);
+
+          g_signal_emit (timeline, timeline_signals[COMPLETED], 0);
           g_signal_emit (timeline, timeline_signals[STOPPED], 0, TRUE);
         }
-
-      g_signal_emit (timeline, timeline_signals[COMPLETED], 0);
+      else
+        g_signal_emit (timeline, timeline_signals[COMPLETED], 0);
 
       priv->current_repeat += 1;