GESTrack: keep track of trackobjects and remove/release them in dispose
authorBrandon Lewis <brandon@collabora.co.uk>
Fri, 22 Oct 2010 13:02:29 +0000 (14:02 +0100)
committerEdward Hervey <edward.hervey@collabora.co.uk>
Sat, 27 Nov 2010 16:23:30 +0000 (17:23 +0100)
ges/ges-track.c
ges/ges-track.h

index 4dc4e70e2260fe09a430b6cf6f6923167023b5a3..0c5c79ed6de53ce6b3ae162a3bb3296d0a34823b 100644 (file)
@@ -88,7 +88,11 @@ ges_track_dispose (GObject * object)
 {
   GESTrack *track = (GESTrack *) object;
 
-  /* FIXME : Remove all TrackObjects ! */
+  while (track->trackobjects) {
+    GESTrackObject *trobj = GES_TRACK_OBJECT (track->trackobjects->data);
+    ges_track_remove_object (track, trobj);
+    ges_timeline_object_release_track_object (trobj->timelineobj, trobj);
+  }
 
   if (track->composition) {
     gst_bin_remove (GST_BIN (object), track->composition);
@@ -293,6 +297,8 @@ ges_track_add_object (GESTrack * track, GESTrackObject * object)
     return FALSE;
   }
 
+  track->trackobjects = g_list_append (track->trackobjects, object);
+
   return TRUE;
 }
 
@@ -325,6 +331,7 @@ ges_track_remove_object (GESTrack * track, GESTrackObject * object)
   }
 
   ges_track_object_set_track (object, NULL);
+  track->trackobjects = g_list_remove (track->trackobjects, object);
 
   return TRUE;
 }
index 0213bfc110f6d0a0d938a089f03d223c1edf6852..7ad1e381fa23e9fd59adacefb5a4dc96c9cf5cfa 100644 (file)
@@ -59,6 +59,7 @@ struct _GESTrack {
 
   /*< private >*/
   GESTimeline * timeline;
+  GList * trackobjects;
 
   GstCaps * caps;