ges: Handle the new SourceMoved API in PitiviFormatter
authorThibault Saunier <thibault.saunier@collabora.com>
Wed, 4 Jan 2012 18:06:11 +0000 (15:06 -0300)
committerThibault Saunier <thibault.saunier@collabora.com>
Wed, 11 Jan 2012 14:56:17 +0000 (11:56 -0300)
ges/ges-pitivi-formatter.c

index 73a309075f30c422e69943426d0e4238f5bfa14c..995063e1bd3bf3bc0de4f4387aabc2dfa67234d6 100644 (file)
@@ -16,7 +16,8 @@ static gboolean save_pitivi_timeline_to_uri (GESFormatter * pitivi_formatter,
 static gboolean load_pitivi_file_from_uri (GESFormatter * self,
     GESTimeline * timeline, const gchar * uri);
 static void ges_pitivi_formatter_finalize (GObject * object);
-
+static gboolean pitivi_formatter_update_source_uri (GESFormatter * formatter,
+    GESTimelineFileSource * tfs, gchar * new_uri);
 
 typedef struct SrcMapping
 {
@@ -80,6 +81,7 @@ ges_pitivi_formatter_class_init (GESPitiviFormatterClass * klass)
 
   formatter_klass->save_to_uri = save_pitivi_timeline_to_uri;
   formatter_klass->load_from_uri = load_pitivi_file_from_uri;
+  formatter_klass->update_source_uri = pitivi_formatter_update_source_uri;
   object_class->finalize = ges_pitivi_formatter_finalize;
 }
 
@@ -1077,3 +1079,25 @@ load_pitivi_file_from_uri (GESFormatter * self,
   xmlFreeDoc (doc);
   return ret;
 }
+
+static gboolean
+pitivi_formatter_update_source_uri (GESFormatter * formatter,
+    GESTimelineFileSource * tfs, gchar * new_uri)
+{
+  GESTimelineObject *tlobj = GES_TIMELINE_OBJECT (tfs);
+  GESTimelineLayer *layer = ges_timeline_object_get_layer (tlobj);
+  gboolean ret;
+
+  /*Keep a ref to it as we don't want it to be destroyed! */
+  g_object_ref (tlobj);
+
+  ges_timeline_layer_remove_object (layer, tlobj);
+
+  g_object_set (tfs, "uri", new_uri, NULL);
+  ret = ges_timeline_layer_add_object (layer, tlobj);
+
+  /* We do not need our reference anymore */
+  g_object_unref (tlobj);
+
+  return ret;
+}