From: Brandon Lewis Date: Thu, 7 Oct 2010 11:29:05 +0000 (+0100) Subject: GESTimeline: release timeline objects when a layer is removed X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f521d31b404a81c29e7431f51d1aab1c56059bf8;p=platform%2Fupstream%2Fgst-editing-services.git GESTimeline: release timeline objects when a layer is removed --- diff --git a/ges/ges-timeline.c b/ges/ges-timeline.c index 537bf18..ac4c2a9 100644 --- a/ges/ges-timeline.c +++ b/ges/ges-timeline.c @@ -566,6 +566,8 @@ ges_timeline_add_layer (GESTimeline * timeline, GESTimelineLayer * layer) gboolean ges_timeline_remove_layer (GESTimeline * timeline, GESTimelineLayer * layer) { + GList *layer_objects, *tmp; + GST_DEBUG ("timeline:%p, layer:%p", timeline, layer); if (G_UNLIKELY (!g_list_find (timeline->layers, layer))) { @@ -573,6 +575,16 @@ ges_timeline_remove_layer (GESTimeline * timeline, GESTimelineLayer * layer) return FALSE; } + /* remove objects from any private data structures */ + + layer_objects = ges_timeline_layer_get_objects (layer); + for (tmp = layer_objects; tmp; tmp = tmp->next) { + layer_object_removed_cb (layer, GES_TIMELINE_OBJECT (tmp->data), timeline); + g_object_unref (G_OBJECT (tmp->data)); + tmp->data = NULL; + } + g_list_free (layer_objects); + /* Disconnect signals */ GST_DEBUG ("Disconnecting signal callbacks"); g_signal_handlers_disconnect_by_func (layer, layer_object_added_cb, timeline);