Added some signal shims.

Original commit message from CVS:
Added some signal shims.
Fixed the queue state_change stuff.
This commit is contained in:
Wim Taymans 2001-06-20 23:43:00 +00:00
parent 3d71b301a2
commit 4158f4dc3b
3 changed files with 19 additions and 14 deletions

View file

@ -13,6 +13,7 @@
#define G_TYPE_CHECK_CLASS_TYPE GTK_CHECK_CLASS_TYPE #define G_TYPE_CHECK_CLASS_TYPE GTK_CHECK_CLASS_TYPE
#define G_TYPE_FROM_CLASS(klass) (((GtkObjectClass *)(klass))->type) #define G_TYPE_FROM_CLASS(klass) (((GtkObjectClass *)(klass))->type)
#define G_OBJECT_GET_CLASS(object) (GTK_OBJECT(object)->klass) #define G_OBJECT_GET_CLASS(object) (GTK_OBJECT(object)->klass)
#define G_OBJECT_TYPE GTK_OBJECT_TYPE
#define G_OBJECT_CLASS_TYPE(gclass) (gclass->type) #define G_OBJECT_CLASS_TYPE(gclass) (gclass->type)
// types // types
@ -156,6 +157,14 @@ gtk_signal_connect((GtkObject *)object,name,func,func_data)
g_signal_emit_by_name(object,name,data,self) \ g_signal_emit_by_name(object,name,data,self) \
gtk_signal_emit_by_name ((GtkObject *)object,name,data,self) gtk_signal_emit_by_name ((GtkObject *)object,name,data,self)
#define \
g_signal_handler_has_pending(object,name,data,may_block) \
gtk_signal_handler_pending ((GtkObject *)object,name,may_block)
#define g_signal_lookup gtk_signal_lookup
#define g_signal_handler_block gtk_signal_handler_block
#define g_signal_handler_unblock gtk_signal_handler_unblock

View file

@ -439,12 +439,11 @@ gst_queue_change_state (GstElement *element)
gst_queue_flush (queue); gst_queue_flush (queue);
} }
/* FIXME FIXME FIXME FIXME FIXME!!!!
// if we haven't failed already, give the parent class a chance to ;-) // if we haven't failed already, give the parent class a chance to ;-)
if (GST_ELEMENT_CLASS (parent_class)->change_state) if (GST_ELEMENT_CLASS (parent_class)->change_state)
{ {
gboolean valid_handler = FALSE; gboolean valid_handler = FALSE;
guint state_change_id = gtk_signal_lookup("state_change", G_OBJECT_TYPE(element)); guint state_change_id = g_signal_lookup("state_change", G_OBJECT_TYPE(element));
// determine whether we need to block the parent (element) class' // determine whether we need to block the parent (element) class'
// STATE_CHANGE signal so we can UNLOCK before returning. we block // STATE_CHANGE signal so we can UNLOCK before returning. we block
@ -455,23 +454,22 @@ gst_queue_change_state (GstElement *element)
// if element change_state() emits other signals, they need to be blocked // if element change_state() emits other signals, they need to be blocked
// as well. // as well.
if (state_change_id && if (state_change_id &&
gtk_signal_handler_pending(G_OBJECT(element), state_change_id, FALSE)) g_signal_handler_has_pending(G_OBJECT(element), state_change_id, 0, FALSE))
valid_handler = TRUE; valid_handler = TRUE;
if (valid_handler) if (valid_handler)
gtk_signal_handler_block(G_OBJECT(element), state_change_id); g_signal_handler_block(G_OBJECT(element), state_change_id);
ret = GST_ELEMENT_CLASS (parent_class)->change_state (element); ret = GST_ELEMENT_CLASS (parent_class)->change_state (element);
if (valid_handler) if (valid_handler)
gtk_signal_handler_unblock(G_OBJECT(element), state_change_id); g_signal_handler_unblock(G_OBJECT(element), state_change_id);
// UNLOCK, *then* emit signal (if there's one there) // UNLOCK, *then* emit signal (if there's one there)
GST_UNLOCK(queue); GST_UNLOCK(queue);
if (valid_handler) if (valid_handler)
gtk_signal_emit(G_OBJECT (element), state_change_id, GST_STATE(element)); g_signal_emit(G_OBJECT (element), state_change_id, 0, GST_STATE(element));
} }
else else
*/
{ {
ret = GST_STATE_SUCCESS; ret = GST_STATE_SUCCESS;
GST_UNLOCK(queue); GST_UNLOCK(queue);

View file

@ -439,12 +439,11 @@ gst_queue_change_state (GstElement *element)
gst_queue_flush (queue); gst_queue_flush (queue);
} }
/* FIXME FIXME FIXME FIXME FIXME!!!!
// if we haven't failed already, give the parent class a chance to ;-) // if we haven't failed already, give the parent class a chance to ;-)
if (GST_ELEMENT_CLASS (parent_class)->change_state) if (GST_ELEMENT_CLASS (parent_class)->change_state)
{ {
gboolean valid_handler = FALSE; gboolean valid_handler = FALSE;
guint state_change_id = gtk_signal_lookup("state_change", G_OBJECT_TYPE(element)); guint state_change_id = g_signal_lookup("state_change", G_OBJECT_TYPE(element));
// determine whether we need to block the parent (element) class' // determine whether we need to block the parent (element) class'
// STATE_CHANGE signal so we can UNLOCK before returning. we block // STATE_CHANGE signal so we can UNLOCK before returning. we block
@ -455,23 +454,22 @@ gst_queue_change_state (GstElement *element)
// if element change_state() emits other signals, they need to be blocked // if element change_state() emits other signals, they need to be blocked
// as well. // as well.
if (state_change_id && if (state_change_id &&
gtk_signal_handler_pending(G_OBJECT(element), state_change_id, FALSE)) g_signal_handler_has_pending(G_OBJECT(element), state_change_id, 0, FALSE))
valid_handler = TRUE; valid_handler = TRUE;
if (valid_handler) if (valid_handler)
gtk_signal_handler_block(G_OBJECT(element), state_change_id); g_signal_handler_block(G_OBJECT(element), state_change_id);
ret = GST_ELEMENT_CLASS (parent_class)->change_state (element); ret = GST_ELEMENT_CLASS (parent_class)->change_state (element);
if (valid_handler) if (valid_handler)
gtk_signal_handler_unblock(G_OBJECT(element), state_change_id); g_signal_handler_unblock(G_OBJECT(element), state_change_id);
// UNLOCK, *then* emit signal (if there's one there) // UNLOCK, *then* emit signal (if there's one there)
GST_UNLOCK(queue); GST_UNLOCK(queue);
if (valid_handler) if (valid_handler)
gtk_signal_emit(G_OBJECT (element), state_change_id, GST_STATE(element)); g_signal_emit(G_OBJECT (element), state_change_id, 0, GST_STATE(element));
} }
else else
*/
{ {
ret = GST_STATE_SUCCESS; ret = GST_STATE_SUCCESS;
GST_UNLOCK(queue); GST_UNLOCK(queue);