mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-06-26 18:00:49 +00:00
Added some signal shims.
Original commit message from CVS: Added some signal shims. Fixed the queue state_change stuff.
This commit is contained in:
parent
3d71b301a2
commit
4158f4dc3b
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in a new issue