diff --git a/ges/ges-pitivi-formatter.c b/ges/ges-pitivi-formatter.c index 73a309075f..995063e1bd 100644 --- a/ges/ges-pitivi-formatter.c +++ b/ges/ges-pitivi-formatter.c @@ -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; +}