From cd9ad5302e043b717e3cef27bb1f0b2a8a446c16 Mon Sep 17 00:00:00 2001 From: Brandon Lewis Date: Thu, 5 Aug 2010 12:50:19 +0200 Subject: [PATCH] add object-moved signal to simple timeline layer --- ges/ges-simple-timeline-layer.c | 26 ++++++++++++++++++++++++-- ges/ges-simple-timeline-layer.h | 4 ++++ ges/gesmarshal.list | 1 + 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/ges/ges-simple-timeline-layer.c b/ges/ges-simple-timeline-layer.c index de0c2a46eb..1d54d068b6 100644 --- a/ges/ges-simple-timeline-layer.c +++ b/ges/ges-simple-timeline-layer.c @@ -38,6 +38,7 @@ #include "ges-timeline-object.h" #include "ges-timeline-source.h" #include "ges-timeline-transition.h" +#include "gesmarshal.h" static void ges_simple_timeline_layer_object_removed (GESTimelineLayer * layer, @@ -54,6 +55,14 @@ timeline_object_height_changed_cb (GESTimelineObject * object G_GNUC_UNUSED, G_DEFINE_TYPE (GESSimpleTimelineLayer, ges_simple_timeline_layer, GES_TYPE_TIMELINE_LAYER); +enum +{ + OBJECT_MOVED, + LAST_SIGNAL, +}; + +static guint gstl_signals[LAST_SIGNAL] = { 0 }; + static void ges_simple_timeline_layer_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) @@ -100,6 +109,14 @@ ges_simple_timeline_layer_class_init (GESSimpleTimelineLayerClass * klass) /* Be informed when objects are being added/removed from elsewhere */ layer_class->object_removed = ges_simple_timeline_layer_object_removed; layer_class->object_added = ges_simple_timeline_layer_object_added; + + gstl_signals[OBJECT_MOVED] = + g_signal_new ("object-moved", G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET (GESSimpleTimelineLayerClass, + object_moved), + NULL, NULL, + ges_marshal_VOID__OBJECT_INT_INT, G_TYPE_NONE, 3, + GES_TYPE_TIMELINE_OBJECT, G_TYPE_INT, G_TYPE_INT); } static void @@ -317,13 +334,18 @@ ges_simple_timeline_layer_move_object (GESSimpleTimelineLayer * layer, /* pop it off the list */ layer->objects = g_list_remove (layer->objects, object); + newposition = (newposition >= 0 && newposition < idx) ? newposition : + newposition - 1; + /* re-add it at the proper position */ - layer->objects = g_list_insert (layer->objects, object, (newposition >= 0 - && newposition < idx) ? newposition : newposition - 1); + layer->objects = g_list_insert (layer->objects, object, newposition); /* recalculate positions */ gstl_recalculate (layer); + g_signal_emit (layer, gstl_signals[OBJECT_MOVED], 0, object, idx, + newposition); + return TRUE; } diff --git a/ges/ges-simple-timeline-layer.h b/ges/ges-simple-timeline-layer.h index 8111510370..cbde229320 100644 --- a/ges/ges-simple-timeline-layer.h +++ b/ges/ges-simple-timeline-layer.h @@ -67,6 +67,10 @@ struct _GESSimpleTimelineLayer { struct _GESSimpleTimelineLayerClass { GESTimelineLayerClass parent_class; + /*< signals >*/ + + void (*object_moved) (GESTimelineLayer * layer, GESTimelineObject * object, + gint old_position, gint new_position); /*< private >*/ }; diff --git a/ges/gesmarshal.list b/ges/gesmarshal.list index e22aea6aa5..1c28a896c1 100644 --- a/ges/gesmarshal.list +++ b/ges/gesmarshal.list @@ -1 +1,2 @@ VOID:OBJECT +VOID:OBJECT,INT,INT