timeline: Do not snap object within the moving context
authorThibault Saunier <tsaunier@gnome.org>
Tue, 7 Nov 2017 13:15:58 +0000 (10:15 -0300)
committerThibault Saunier <tsaunier@gnome.org>
Tue, 7 Nov 2017 13:18:45 +0000 (10:18 -0300)
Reviewed-by: Alex Băluț <<alexandru.balut@gmail.com>>
Differential Revision: https://phabricator.freedesktop.org/D1873

ges/ges-auto-transition.c
ges/ges-timeline.c

index d52d1c49d79e1ba63ba79c0907f5e6196b66a882..3267edd4d8658a0ca4b1626727c56aebc3612a0d 100644 (file)
@@ -169,9 +169,16 @@ ges_auto_transition_new (GESTrackElement * transition,
       G_CALLBACK (_track_changed_cb), self);
 
   GST_DEBUG_OBJECT (self, "Created transition %" GST_PTR_FORMAT
-      " between %" GST_PTR_FORMAT " and: %" GST_PTR_FORMAT
+      " between %" GST_PTR_FORMAT "[% " GST_TIME_FORMAT
+      " - %" GST_TIME_FORMAT "] and: %" GST_PTR_FORMAT
+      "[% " GST_TIME_FORMAT " - %" GST_TIME_FORMAT "]"
       " in layer nb %i, start: %" GST_TIME_FORMAT " duration: %"
-      GST_TIME_FORMAT, transition, next_source, previous_source,
+      GST_TIME_FORMAT, transition, previous_source,
+      GST_TIME_ARGS (_START (previous_source)),
+      GST_TIME_ARGS (_END (previous_source)),
+      next_source,
+      GST_TIME_ARGS (_START (next_source)),
+      GST_TIME_ARGS (_END (next_source)),
       ges_layer_get_priority (ges_clip_get_layer
           (self->previous_clip)),
       GST_TIME_ARGS (_START (transition)),
index 0a9013ab0be42bdbc8a13f083fbfbf147b968079..71f5247bd4d6895413c617e3aaaf1c7b7181e793 100644 (file)
@@ -1306,6 +1306,10 @@ ges_timeline_snap_position (GESTimeline * timeline,
     if (tmp_container == container)
       continue;
 
+    if (g_hash_table_lookup (priv->movecontext.toplevel_containers,
+            tmp_container))
+      continue;
+
     if (timecode > *iter_tc)
       diff = timecode - *iter_tc;
     else
@@ -1481,11 +1485,14 @@ ges_timeline_set_moving_context (GESTimeline * timeline, GESTrackElement * obj,
     return TRUE;
   }
 
+
   GST_DEBUG_OBJECT (clip,
       "Changing context:\nold: obj: %p, mode: %d, edge: %d \n"
       "new: obj: %p, mode: %d, edge: %d ! Has changed %i", mv_ctx->clip,
       mv_ctx->mode, mv_ctx->edge, clip, mode, edge, mv_ctx->needs_move_ctx);
 
+  /* Make sure snapping context is reset when changing the moving context */
+  ges_timeline_emit_snappig (timeline, NULL, NULL);
   clean_movecontext (mv_ctx);
   mv_ctx->edge = edge;
   mv_ctx->mode = mode;