summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMateu Batle <mateu.batle@collabora.co.uk>2011-11-08 17:29:38 -0500
committerThibault Saunier <thibault.saunier@collabora.com>2012-01-05 08:56:59 -0300
commitd1de4b2114718b63b647a43a169d35a21f69e4b3 (patch)
tree3740e1483570cee76b44a8d2f736724e9b6ea932
parent737acd803ec71a5d6082947025f0b67d795ab27a (diff)
GESTimelineObject: fix trigger notify changing props
Notify signal was not triggered when changing properties through ges_timeline_object_set_* functions, only when done through g_object_set
-rw-r--r--ges/ges-timeline-object.c117
1 files changed, 91 insertions, 26 deletions
diff --git a/ges/ges-timeline-object.c b/ges/ges-timeline-object.c
index edcbeb06..40f42f7d 100644
--- a/ges/ges-timeline-object.c
+++ b/ges/ges-timeline-object.c
@@ -59,6 +59,16 @@ static void update_height (GESTimelineObject * object);
static gint sort_track_effects (gpointer a, gpointer b,
GESTimelineObject * object);
+static gboolean
+ges_timeline_object_set_start_internal (GESTimelineObject * object,
+ guint64 start);
+static gboolean ges_timeline_object_set_inpoint_internal (GESTimelineObject *
+ object, guint64 inpoint);
+static gboolean ges_timeline_object_set_duration_internal (GESTimelineObject *
+ object, guint64 duration);
+static gboolean ges_timeline_object_set_priority_internal (GESTimelineObject *
+ object, guint32 priority);
+
G_DEFINE_ABSTRACT_TYPE (GESTimelineObject, ges_timeline_object,
G_TYPE_INITIALLY_UNOWNED);
@@ -164,16 +174,19 @@ ges_timeline_object_set_property (GObject * object, guint property_id,
switch (property_id) {
case PROP_START:
- ges_timeline_object_set_start (tobj, g_value_get_uint64 (value));
+ ges_timeline_object_set_start_internal (tobj, g_value_get_uint64 (value));
break;
case PROP_INPOINT:
- ges_timeline_object_set_inpoint (tobj, g_value_get_uint64 (value));
+ ges_timeline_object_set_inpoint_internal (tobj,
+ g_value_get_uint64 (value));
break;
case PROP_DURATION:
- ges_timeline_object_set_duration (tobj, g_value_get_uint64 (value));
+ ges_timeline_object_set_duration_internal (tobj,
+ g_value_get_uint64 (value));
break;
case PROP_PRIORITY:
- ges_timeline_object_set_priority (tobj, g_value_get_uint (value));
+ ges_timeline_object_set_priority_internal (tobj,
+ g_value_get_uint (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -621,15 +634,9 @@ find_object_mapping (GESTimelineObject * object, GESTrackObject * child)
return NULL;
}
-/**
- * ges_timeline_object_set_start:
- * @object: a #GESTimelineObject
- * @start: the position in #GstClockTime
- *
- * Set the position of the object in its containing layer
- */
-void
-ges_timeline_object_set_start (GESTimelineObject * object, guint64 start)
+static gboolean
+ges_timeline_object_set_start_internal (GESTimelineObject * object,
+ guint64 start)
{
GList *tmp;
GESTrackObject *tr;
@@ -656,18 +663,30 @@ ges_timeline_object_set_start (GESTimelineObject * object, guint64 start)
object->priv->ignore_notifies = FALSE;
object->start = start;
+ return TRUE;
}
/**
- * ges_timeline_object_set_inpoint:
+ * ges_timeline_object_set_start:
* @object: a #GESTimelineObject
- * @inpoint: the in-point in #GstClockTime
+ * @start: the position in #GstClockTime
*
- * Set the in-point, that is the moment at which the @object will start
- * outputting data from its contents.
+ * Set the position of the object in its containing layer
*/
void
-ges_timeline_object_set_inpoint (GESTimelineObject * object, guint64 inpoint)
+ges_timeline_object_set_start (GESTimelineObject * object, guint64 start)
+{
+ if (ges_timeline_object_set_start_internal (object, start))
+#if GLIB_CHECK_VERSION(2,26,0)
+ g_object_notify_by_pspec (G_OBJECT (object), properties[PROP_START]);
+#else
+ g_object_notify (G_OBJECT (object), "start");
+#endif
+}
+
+static gboolean
+ges_timeline_object_set_inpoint_internal (GESTimelineObject * object,
+ guint64 inpoint)
{
GList *tmp;
GESTrackObject *tr;
@@ -684,17 +703,31 @@ ges_timeline_object_set_inpoint (GESTimelineObject * object, guint64 inpoint)
}
object->inpoint = inpoint;
+ return TRUE;
}
/**
- * ges_timeline_object_set_duration:
+ * ges_timeline_object_set_inpoint:
* @object: a #GESTimelineObject
- * @duration: the duration in #GstClockTime
+ * @inpoint: the in-point in #GstClockTime
*
- * Set the duration of the object
+ * Set the in-point, that is the moment at which the @object will start
+ * outputting data from its contents.
*/
void
-ges_timeline_object_set_duration (GESTimelineObject * object, guint64 duration)
+ges_timeline_object_set_inpoint (GESTimelineObject * object, guint64 inpoint)
+{
+ if (ges_timeline_object_set_inpoint_internal (object, inpoint))
+#if GLIB_CHECK_VERSION(2,26,0)
+ g_object_notify_by_pspec (G_OBJECT (object), properties[PROP_INPOINT]);
+#else
+ g_object_notify (G_OBJECT (object), "in-point");
+#endif
+}
+
+static gboolean
+ges_timeline_object_set_duration_internal (GESTimelineObject * object,
+ guint64 duration)
{
GList *tmp;
GESTrackObject *tr;
@@ -711,17 +744,30 @@ ges_timeline_object_set_duration (GESTimelineObject * object, guint64 duration)
}
object->duration = duration;
+ return TRUE;
}
/**
- * ges_timeline_object_set_priority:
+ * ges_timeline_object_set_duration:
* @object: a #GESTimelineObject
- * @priority: the priority
+ * @duration: the duration in #GstClockTime
*
- * Sets the priority of the object within the containing layer
+ * Set the duration of the object
*/
void
-ges_timeline_object_set_priority (GESTimelineObject * object, guint priority)
+ges_timeline_object_set_duration (GESTimelineObject * object, guint64 duration)
+{
+ if (ges_timeline_object_set_duration_internal (object, duration))
+#if GLIB_CHECK_VERSION(2,26,0)
+ g_object_notify_by_pspec (G_OBJECT (object), properties[PROP_DURATION]);
+#else
+ g_object_notify (G_OBJECT (object), "duration");
+#endif
+}
+
+static gboolean
+ges_timeline_object_set_priority_internal (GESTimelineObject * object,
+ guint priority)
{
GList *tmp;
GESTrackObject *tr;
@@ -750,6 +796,25 @@ ges_timeline_object_set_priority (GESTimelineObject * object, guint priority)
priv->ignore_notifies = FALSE;
object->priority = priority;
+ return TRUE;
+}
+
+/**
+ * ges_timeline_object_set_priority:
+ * @object: a #GESTimelineObject
+ * @priority: the priority
+ *
+ * Sets the priority of the object within the containing layer
+ */
+void
+ges_timeline_object_set_priority (GESTimelineObject * object, guint priority)
+{
+ if (ges_timeline_object_set_priority_internal (object, priority))
+#if GLIB_CHECK_VERSION(2,26,0)
+ g_object_notify_by_pspec (G_OBJECT (object), properties[PROP_PRIORITY]);
+#else
+ g_object_notify (G_OBJECT (object), "priority");
+#endif
}
/**