timeline: Make sure transitions between rippled clips are never deleted
authorThibault Saunier <thibault.saunier@osg.samsung.com>
Fri, 7 Oct 2016 13:31:40 +0000 (15:31 +0200)
committerThibault Saunier <thibault.saunier@osg.samsung.com>
Fri, 4 Nov 2016 18:56:34 +0000 (15:56 -0300)
Reviewed-by: Alex Băluț <alexandru.balut@gmail.com>
Differential Revision: https://phabricator.freedesktop.org/D1361

ges/ges-timeline.c
tests/check/python/test_timeline.py

index a6e8a7a..30dae41 100644 (file)
@@ -838,11 +838,13 @@ _destroy_auto_transition_cb (GESAutoTransition * auto_transition,
       get_toplevel_container (auto_transition->previous_clip), *toplevel_next =
       get_toplevel_container (auto_transition->next_clip);
 
-  if (mv_ctx->moving_to_layer &&
-      g_hash_table_lookup (mv_ctx->toplevel_containers, toplevel_prev) &&
+  if (g_hash_table_lookup (mv_ctx->toplevel_containers, toplevel_prev) &&
       g_hash_table_lookup (mv_ctx->toplevel_containers, toplevel_next)) {
     GESLayer *nlayer = mv_ctx->moving_to_layer;
 
+    if (!nlayer)
+      return;
+
     ges_clip_move_to_layer (transition, nlayer);
 
     return;
index 86e52cc..f80ad37 100644 (file)
@@ -85,3 +85,13 @@ class TestEditing(common.GESSimpleTimelineTest):
         clip1.edit([], layer2.get_priority(), GES.EditMode.EDIT_RIPPLE, GES.Edge.EDGE_NONE, clip1.props.start)
         self.assertEquals(self.layer.get_clips(), [])
         self.assertEquals(set(layer2.get_clips()), set(all_clips))
+
+    def test_transition_rippling_after_next_clip_stays(self):
+        self.timeline.props.auto_transition = True
+        clip1 = self.add_clip(0, 0, 100)
+        clip2 = self.add_clip(50, 0, 100)
+        all_clips = self.layer.get_clips()
+        self.assertEquals(len(all_clips), 4)
+
+        clip1.edit([], self.layer.get_priority(), GES.EditMode.EDIT_RIPPLE, GES.Edge.EDGE_NONE, clip2.props.start +1)
+        self.assertEquals(set(self.layer.get_clips()), set(all_clips))