mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-12 13:49:22 +01:00
Add g_source_set_dummy_callback()
Use g_source_set_closure() and g_close_set_meta_marshal() to allow setting a do-nothing callback on any source. https://bugzilla.gnome.org/show_bug.cgi?id=634239
This commit is contained in:
parent
73d823ac1e
commit
e910205557
@ -828,6 +828,7 @@ g_closure_set_marshal
|
|||||||
g_closure_add_marshal_guards
|
g_closure_add_marshal_guards
|
||||||
g_closure_set_meta_marshal
|
g_closure_set_meta_marshal
|
||||||
g_source_set_closure
|
g_source_set_closure
|
||||||
|
g_source_set_dummy_callback
|
||||||
G_TYPE_IO_CHANNEL
|
G_TYPE_IO_CHANNEL
|
||||||
G_TYPE_IO_CONDITION
|
G_TYPE_IO_CONDITION
|
||||||
|
|
||||||
|
@ -128,6 +128,7 @@ g_value_get_flags
|
|||||||
g_io_channel_get_type
|
g_io_channel_get_type
|
||||||
g_io_condition_get_type
|
g_io_condition_get_type
|
||||||
g_source_set_closure
|
g_source_set_closure
|
||||||
|
g_source_set_dummy_callback
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -168,7 +168,7 @@ g_source_set_closure (GSource *source,
|
|||||||
source->source_funcs != &g_timeout_funcs &&
|
source->source_funcs != &g_timeout_funcs &&
|
||||||
source->source_funcs != &g_idle_funcs)
|
source->source_funcs != &g_idle_funcs)
|
||||||
{
|
{
|
||||||
g_critical (G_STRLOC "closure can not be set on closure without GSourceFuncs::closure_callback\n");
|
g_critical (G_STRLOC ": closure can not be set on closure without GSourceFuncs::closure_callback\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -191,3 +191,40 @@ g_source_set_closure (GSource *source,
|
|||||||
g_closure_set_marshal (closure, marshal);
|
g_closure_set_marshal (closure, marshal);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
dummy_closure_marshal (GClosure *closure,
|
||||||
|
GValue *return_value,
|
||||||
|
guint n_param_values,
|
||||||
|
const GValue *param_values,
|
||||||
|
gpointer invocation_hint,
|
||||||
|
gpointer marshal_data)
|
||||||
|
{
|
||||||
|
if (G_VALUE_HOLDS_BOOLEAN (return_value))
|
||||||
|
g_value_set_boolean (return_value, TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* g_source_set_dummy_callback:
|
||||||
|
* @source: the source
|
||||||
|
*
|
||||||
|
* Sets a dummy callback for @source. The callback will do nothing, and
|
||||||
|
* if the source expects a #gboolean return value, it will return %TRUE.
|
||||||
|
* (If the source expects any other type of return value, it will return
|
||||||
|
* a 0/%NULL value; whatever g_value_init() initializes a #GValue to for
|
||||||
|
* that type.)
|
||||||
|
*
|
||||||
|
* If the source is not one of the standard GLib types, the
|
||||||
|
* @closure_callback and @closure_marshal fields of the #GSourceFuncs
|
||||||
|
* structure must have been filled in with pointers to appropriate
|
||||||
|
* functions.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
g_source_set_dummy_callback (GSource *source)
|
||||||
|
{
|
||||||
|
GClosure *closure;
|
||||||
|
|
||||||
|
closure = g_closure_new_simple (sizeof (GClosure), NULL);
|
||||||
|
g_closure_set_meta_marshal (closure, NULL, dummy_closure_marshal);
|
||||||
|
g_source_set_closure (source, closure);
|
||||||
|
}
|
||||||
|
@ -30,6 +30,8 @@ G_BEGIN_DECLS
|
|||||||
void g_source_set_closure (GSource *source,
|
void g_source_set_closure (GSource *source,
|
||||||
GClosure *closure);
|
GClosure *closure);
|
||||||
|
|
||||||
|
void g_source_set_dummy_callback (GSource *source);
|
||||||
|
|
||||||
GType g_io_channel_get_type (void);
|
GType g_io_channel_get_type (void);
|
||||||
GType g_io_condition_get_type (void);
|
GType g_io_condition_get_type (void);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user