summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThibault Saunier <tsaunier@igalia.com>2020-07-08 15:47:55 -0400
committerThibault Saunier <tsaunier@igalia.com>2020-07-30 18:44:13 -0400
commite6683f0c197f0adfef91d59c731ad1ae3be35af7 (patch)
treef9560505375a97dcc12e5eeeabf6155a4d8a88ef
parent3a32247630d8a711434aecbebe5be7e53bc1c034 (diff)
timeline: Add a simplified version of track selection signal
Most user do not need to select several tracks for a single TrackElement and this signal is not binding friendly so this is adding a simpler, more user and binding friendly version Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-editing-services/-/merge_requests/198>
-rw-r--r--ges/ges-timeline.c35
1 files changed, 33 insertions, 2 deletions
diff --git a/ges/ges-timeline.c b/ges/ges-timeline.c
index 23227cb3..38cce07c 100644
--- a/ges/ges-timeline.c
+++ b/ges/ges-timeline.c
@@ -272,6 +272,7 @@ enum
SNAPING_ENDED,
SELECT_TRACKS_FOR_OBJECT,
COMMITED,
+ SELECT_ELEMENT_TRACK,
LAST_SIGNAL
};
@@ -845,6 +846,25 @@ ges_timeline_class_init (GESTimelineClass * klass)
G_TYPE_PTR_ARRAY, 2, GES_TYPE_CLIP, GES_TYPE_TRACK_ELEMENT);
/**
+ * GESTimeline::select-element-track:
+ * @timeline: The #GESTimeline
+ * @clip: The clip that @track_element is being added to
+ * @track_element: The element being added
+ *
+ * Simplified version of #GESTimeline::select-tracks-for-object which only
+ * allows @track_element to be added to a single #GESTrack.
+ *
+ * Returns: (transfer full): A track to put @track_element into, or %NULL if
+ * it should be discarded.
+ *
+ * Since: 1.18
+ */
+ ges_timeline_signals[SELECT_ELEMENT_TRACK] =
+ g_signal_new ("select-element-track", G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL,
+ GES_TYPE_TRACK, 2, GES_TYPE_CLIP, GES_TYPE_TRACK_ELEMENT);
+
+ /**
* GESTimeline::commited:
* @timeline: The #GESTimeline
*
@@ -1437,10 +1457,21 @@ _get_selected_tracks (GESTimeline * timeline, GESClip * clip,
{
guint i, j;
GPtrArray *tracks = NULL;
+ GESTrack *track = NULL;
g_signal_emit (G_OBJECT (timeline),
- ges_timeline_signals[SELECT_TRACKS_FOR_OBJECT], 0, clip, track_element,
- &tracks);
+ ges_timeline_signals[SELECT_ELEMENT_TRACK], 0, clip, track_element,
+ &track);
+
+ if (track) {
+ tracks = g_ptr_array_new ();
+
+ g_ptr_array_add (tracks, track);
+ } else {
+ g_signal_emit (G_OBJECT (timeline),
+ ges_timeline_signals[SELECT_TRACKS_FOR_OBJECT], 0, clip, track_element,
+ &tracks);
+ }
if (tracks == NULL)
tracks = g_ptr_array_new ();