Function
Gdkthreads_add_idle_full
since: 2.12
Declaration [src]
guint
gdk_threads_add_idle_full (
gint priority,
GSourceFunc function,
gpointer data,
GDestroyNotify notify
)
Description [src]
Adds a function to be called whenever there are no higher priority
events pending. If the function returns FALSE
it is automatically
removed from the list of event sources and will not be called again.
This variant of g_idle_add_full()
calls function
with the GDK lock
held. It can be thought of a MT-safe version for GTK+ widgets for the
following use case, where you have to worry about idle_callback()
running in thread A and accessing self
after it has been finalized
in thread B:
static gboolean
idle_callback (gpointer data)
{
// gdk_threads_enter(); would be needed for g_idle_add()
SomeWidget *self = data;
// do stuff with self
self->idle_id = 0;
// gdk_threads_leave(); would be needed for g_idle_add()
return FALSE;
}
static void
some_widget_do_stuff_later (SomeWidget *self)
{
self->idle_id = gdk_threads_add_idle (idle_callback, self)
// using `g_idle_add()` here would require thread protection in the callback
}
static void
some_widget_finalize (GObject *object)
{
SomeWidget *self = SOME_WIDGET (object);
if (self->idle_id)
g_source_remove (self->idle_id);
G_OBJECT_CLASS (parent_class)->finalize (object);
}
Available since: 2.12
This function is renamed to gdk_threads_add_idle()
in language bindings.
Parameters
priority
-
Type:
gint
The priority of the idle source. Typically this will be in the range between #G_PRIORITY_DEFAULT_IDLE and #G_PRIORITY_HIGH_IDLE.
function
-
Type:
GSourceFunc
Function to call.
data
-
Type:
gpointer
Data to pass to
function
.The argument can be NULL
.The data is owned by the caller of the function. notify
-
Type:
GDestroyNotify
Function to call when the idle is removed, or
NULL
.The argument can be NULL
.