diff --git a/ges/ges-clip.c b/ges/ges-clip.c index 73330b9ca7..dded10d65a 100644 --- a/ges/ges-clip.c +++ b/ges/ges-clip.c @@ -649,7 +649,6 @@ _paste (GESTimelineElement * element, GESTimelineElement * ref, if (!ges_layer_add_clip (self->priv->copied_layer, nclip)) { GST_INFO ("%" GES_FORMAT " could not be pasted to %" GST_TIME_FORMAT, GES_ARGS (element), GST_TIME_ARGS (paste_position)); - gst_object_unref (nclip); return NULL; } diff --git a/ges/ges-timeline-element.c b/ges/ges-timeline-element.c index 66a8c2e406..36cf2fe14e 100644 --- a/ges/ges-timeline-element.c +++ b/ges/ges-timeline-element.c @@ -1897,7 +1897,8 @@ ges_timeline_element_get_track_types (GESTimelineElement * self) * using ges_timeline_element_copy with recurse=TRUE set, * otherwise it will fail. * - * Returns: (transfer none): Paste @self copying the element + * Returns: (transfer full): New element resulting of pasting @self + * or %NULL * * Since: 1.6.0 */ @@ -1925,7 +1926,7 @@ ges_timeline_element_paste (GESTimelineElement * self, g_clear_object (&self->priv->copied_from); - return g_object_ref (res); + return res ? g_object_ref (res) : res; } /** diff --git a/tests/check/python/test_timeline.py b/tests/check/python/test_timeline.py index ded93f3899..5126f13ee3 100644 --- a/tests/check/python/test_timeline.py +++ b/tests/check/python/test_timeline.py @@ -677,6 +677,28 @@ class TestInvalidOverlaps(common.GESSimpleTimelineTest): ] ]) + def test_copy_paste_overlapping(self): + self.track_types = [GES.TrackType.AUDIO] + super().setUp() + clip = self.append_clip() + + copy = clip.copy(True) + self.assertIsNone(copy.paste(copy.props.start)) + self.assertTimelineTopology([ + [ + (GES.TestClip, 0, 10), + + ] + ]) + copy = clip.copy(True) + self.assertIsNotNone(copy.paste(copy.props.start + 1)) + self.assertTimelineTopology([ + [ + (GES.TestClip, 0, 10), + (GES.TestClip, 1, 10), + ] + ]) + def test_move_group_with_overlaping_clips(self): self.track_types = [GES.TrackType.AUDIO] super().setUp()