mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-08-24 09:58:54 +02:00
gmain: add g_source_add_child_source and g_source_remove_child_source
This adds "child source" support to GSource. A child source behaves basically like a GPollFD; when you add a source to a context, all of its child sources are added with the same priority; when you destroy a source, all of its child sources are destroyed; and when a child source triggers, its parent source's dispatch function is run. Use cases include: - adding a GTimeoutSource to another source to cause the source to automatically trigger after a certain timeout. - wrapping an existing source type with a new type that has a different callback signature - creating a source that triggers based on different conditions at different times. https://bugzilla.gnome.org/show_bug.cgi?id=634239
This commit is contained in:
17
glib/gmain.h
17
glib/gmain.h
@@ -53,6 +53,7 @@ typedef struct _GMainLoop GMainLoop;
|
||||
* representing an event source.
|
||||
*/
|
||||
typedef struct _GSource GSource;
|
||||
typedef struct _GSourcePrivate GSourcePrivate;
|
||||
|
||||
/**
|
||||
* GSourceCallbackFuncs:
|
||||
@@ -157,7 +158,8 @@ struct _GSource
|
||||
GSource *next;
|
||||
|
||||
char *name;
|
||||
gpointer reserved2;
|
||||
|
||||
GSourcePrivate *priv;
|
||||
};
|
||||
|
||||
struct _GSourceCallbackFuncs
|
||||
@@ -358,10 +360,15 @@ void g_source_set_callback_indirect (GSource *source,
|
||||
gpointer callback_data,
|
||||
GSourceCallbackFuncs *callback_funcs);
|
||||
|
||||
void g_source_add_poll (GSource *source,
|
||||
GPollFD *fd);
|
||||
void g_source_remove_poll (GSource *source,
|
||||
GPollFD *fd);
|
||||
void g_source_add_poll (GSource *source,
|
||||
GPollFD *fd);
|
||||
void g_source_remove_poll (GSource *source,
|
||||
GPollFD *fd);
|
||||
|
||||
void g_source_add_child_source (GSource *source,
|
||||
GSource *child_source);
|
||||
void g_source_remove_child_source (GSource *source,
|
||||
GSource *child_source);
|
||||
|
||||
#ifndef G_DISABLE_DEPRECATED
|
||||
void g_source_get_current_time (GSource *source,
|
||||
|
Reference in New Issue
Block a user