mirror of
				https://gitlab.gnome.org/GNOME/glib.git
				synced 2025-10-31 00:12:19 +01:00 
			
		
		
		
	Move main loop docs inline
This commit is contained in:
		| @@ -2,99 +2,12 @@ | ||||
| The Main Event Loop | ||||
|  | ||||
| <!-- ##### SECTION Short_Description ##### --> | ||||
| manages all available sources of events | ||||
|  | ||||
|  | ||||
| <!-- ##### SECTION Long_Description ##### --> | ||||
|   <para> | ||||
|     The main event loop manages all the available sources of events for | ||||
|     GLib and GTK+ applications. These events can come from any number of | ||||
|     different types of sources such as file descriptors (plain files, | ||||
|     pipes or sockets) and timeouts.  New types of event sources can also | ||||
|     be added using g_source_attach(). | ||||
|   </para> | ||||
|   <para> | ||||
|     To allow multiple independent sets of sources to be handled in | ||||
|     different threads, each source is associated with a #GMainContext. | ||||
|     A #GMainContext can only be running in a single thread, but | ||||
|     sources can be added to it and removed from it from other threads. | ||||
|   </para> | ||||
|   <para> | ||||
|     Each event source is assigned a priority.  The default priority, | ||||
|     #G_PRIORITY_DEFAULT, is 0.  Values less than 0 denote higher | ||||
|     priorities.  Values greater than 0 denote lower priorities.  Events | ||||
|     from high priority sources are always processed before events from | ||||
|     lower priority sources. | ||||
|   </para> | ||||
|   <para> | ||||
|     Idle functions can also be added, and assigned a priority. These will | ||||
|     be run whenever no events with a higher priority are ready to be | ||||
|     processed. | ||||
|   </para> | ||||
|   <para> | ||||
|     The #GMainLoop data type represents a main event loop.  A #GMainLoop | ||||
|     is created with g_main_loop_new(). After adding the initial event sources, | ||||
|     g_main_loop_run() is called. This continuously checks for new events from | ||||
|     each of the event sources and dispatches them.  Finally, the | ||||
|     processing of an event from one of the sources leads to a call to | ||||
|     g_main_loop_quit() to exit the main loop, and g_main_loop_run() returns. | ||||
|   </para> | ||||
|   <para> | ||||
|     It is possible to create new instances of #GMainLoop recursively. | ||||
|     This is often used in GTK+ applications when showing modal dialog | ||||
|     boxes. Note that event sources are associated with a particular | ||||
|     #GMainContext, and will be checked and dispatched for all main | ||||
|     loops associated with that #GMainContext. | ||||
|   </para> | ||||
|   <para> | ||||
|     GTK+ contains wrappers of some of these functions, e.g. gtk_main(), | ||||
|     gtk_main_quit() and gtk_events_pending().  | ||||
|   </para> | ||||
|   <refsect2> | ||||
|     <title>Creating new sources types</title> | ||||
|     <para> | ||||
|       One of the unusual features of the GTK+ main loop functionality | ||||
|       is that new types of event source can be created and used in | ||||
|       addition to the builtin type of event source. A new event source | ||||
|       type is used for handling GDK events. A new source type is | ||||
|       created by <firstterm>deriving</firstterm> from the #GSource | ||||
|       structure. The derived type of source is represented by a | ||||
|       structure that has the #GSource structure as a first element, | ||||
|       and other elements specific to the new source type. To create | ||||
|       an instance of the new source type, call g_source_new() passing | ||||
|       in the size of the derived structure and a table of functions. | ||||
|       These #GSourceFuncs determine the behavior of the new source | ||||
|       types. | ||||
|     </para> | ||||
|     <para> | ||||
|       New source types basically interact with the main context | ||||
|       in two ways. Their prepare function in #GSourceFuncs can set | ||||
|       a timeout to determine the maximum amount of time that the | ||||
|       main loop will sleep before checking the source again.  In | ||||
|       addition, or as well, the source can add file descriptors to | ||||
|       the set that the main context checks using g_source_add_poll(). | ||||
|     </para> | ||||
|   </refsect2> | ||||
|   <refsect2> | ||||
|     <title>Customizing the main loop iteration</title> | ||||
|     <para> | ||||
|       Single iterations of a #GMainContext can be run with | ||||
|       g_main_context_iteration(). In some cases, more detailed control | ||||
|       of exactly how the details of the main loop work is desired, | ||||
|       for instance, when integrating the #GMainLoop with an external | ||||
|       main loop. In such cases, you can call the component functions | ||||
|       of g_main_context_iteration() directly. These functions | ||||
|       are g_main_context_prepare(), g_main_context_query(), | ||||
|       g_main_context_check() and g_main_context_dispatch(). | ||||
|     </para> | ||||
|     <para> | ||||
|       The operation of these functions can best be seen in terms | ||||
|       of a state diagram, as shown in <xref linkend="mainloop-states"/>. | ||||
|     </para> | ||||
|     <figure id="mainloop-states"> | ||||
|       <title>States of a Main Context</title> | ||||
|       <graphic fileref="mainloop-states.gif" format="GIF"></graphic> | ||||
|     </figure> | ||||
|   </refsect2> | ||||
| <para> | ||||
|  | ||||
| </para> | ||||
|  | ||||
| <!-- ##### SECTION See_Also ##### --> | ||||
| <para> | ||||
| @@ -109,8 +22,7 @@ manages all available sources of events | ||||
|  | ||||
| <!-- ##### STRUCT GMainLoop ##### --> | ||||
| <para> | ||||
| The <structname>GMainLoop</structname> struct is an opaque data type  | ||||
| representing the main event loop of a GLib or GTK+ application. | ||||
|  | ||||
| </para> | ||||
|  | ||||
|  | ||||
| @@ -177,102 +89,82 @@ representing the main event loop of a GLib or GTK+ application. | ||||
|  | ||||
| <!-- ##### MACRO g_main_new ##### --> | ||||
| <para> | ||||
| Creates a new #GMainLoop for the default main loop.  | ||||
|  | ||||
| </para> | ||||
|  | ||||
| @is_running: set to %TRUE to indicate that the loop is running. This is not | ||||
| very important since calling g_main_run() will set this to %TRUE anyway. | ||||
| @Returns: a new #GMainLoop. | ||||
| @Deprecated: 2.2: Use g_main_loop_new() instead. | ||||
| @is_running:  | ||||
|  | ||||
|  | ||||
| <!-- ##### MACRO g_main_destroy ##### --> | ||||
| <para> | ||||
| Frees the memory allocated for the #GMainLoop.  | ||||
|  | ||||
| </para> | ||||
|  | ||||
| @loop: a #GMainLoop. | ||||
| @Deprecated: 2.2: Use g_main_loop_unref() instead. | ||||
| @loop:  | ||||
|  | ||||
|  | ||||
| <!-- ##### MACRO g_main_run ##### --> | ||||
| <para> | ||||
| Runs a main loop until it stops running.  | ||||
|  | ||||
| </para> | ||||
|  | ||||
| @loop: a #GMainLoop. | ||||
| @Deprecated: 2.2: Use g_main_loop_run() instead. | ||||
| @loop:  | ||||
|  | ||||
|  | ||||
| <!-- ##### MACRO g_main_quit ##### --> | ||||
| <para> | ||||
| Stops the #GMainLoop. If g_main_run() was called to run the #GMainLoop, | ||||
| it will now return.  | ||||
|  | ||||
| </para> | ||||
|  | ||||
| @loop: a #GMainLoop. | ||||
| @Deprecated: 2.2: Use g_main_loop_quit() instead. | ||||
| @loop:  | ||||
|  | ||||
|  | ||||
| <!-- ##### MACRO g_main_is_running ##### --> | ||||
| <para> | ||||
| Checks if the main loop is running.  | ||||
|  | ||||
| </para> | ||||
|  | ||||
| @loop: a #GMainLoop. | ||||
| @Returns: %TRUE if the main loop is running. | ||||
| @Deprecated: 2.2: USe g_main_loop_is_running() instead. | ||||
| @loop:  | ||||
|  | ||||
|  | ||||
| <!-- ##### MACRO G_PRIORITY_HIGH ##### --> | ||||
| <para> | ||||
| Use this for high priority event sources. | ||||
| It is not used within GLib or GTK+. | ||||
|  | ||||
| </para> | ||||
|  | ||||
|  | ||||
|  | ||||
| <!-- ##### MACRO G_PRIORITY_DEFAULT ##### --> | ||||
| <para> | ||||
| Use this for default priority event sources. | ||||
| In GLib this priority is used when adding timeout functions with | ||||
| g_timeout_add(). | ||||
| In GDK this priority is used for events from the X server. | ||||
|  | ||||
| </para> | ||||
|  | ||||
|  | ||||
|  | ||||
| <!-- ##### MACRO G_PRIORITY_HIGH_IDLE ##### --> | ||||
| <para> | ||||
| Use this for high priority idle functions. | ||||
| GTK+ uses #G_PRIORITY_HIGH_IDLE + 10 for resizing operations, and | ||||
| #G_PRIORITY_HIGH_IDLE + 20 for redrawing operations. (This is done to | ||||
| ensure that any pending resizes are processed before any pending redraws, | ||||
| so that widgets are not redrawn twice unnecessarily.) | ||||
|  | ||||
| </para> | ||||
|  | ||||
|  | ||||
|  | ||||
| <!-- ##### MACRO G_PRIORITY_DEFAULT_IDLE ##### --> | ||||
| <para> | ||||
| Use this for default priority idle functions. | ||||
| In GLib this priority is used when adding idle functions with g_idle_add(). | ||||
|  | ||||
| </para> | ||||
|  | ||||
|  | ||||
|  | ||||
| <!-- ##### MACRO G_PRIORITY_LOW ##### --> | ||||
| <para> | ||||
| Use this for very low priority background tasks. | ||||
| It is not used within GLib or GTK+. | ||||
|  | ||||
| </para> | ||||
|  | ||||
|  | ||||
|  | ||||
| <!-- ##### STRUCT GMainContext ##### --> | ||||
| <para> | ||||
| The <structname>GMainContext</structname> struct is an opaque data type  | ||||
| representing a set of sources to be handled in a main loop.  | ||||
|  | ||||
| </para> | ||||
|  | ||||
|  | ||||
| @@ -323,15 +215,10 @@ representing a set of sources to be handled in a main loop. | ||||
|  | ||||
| <!-- ##### MACRO g_main_iteration ##### --> | ||||
| <para> | ||||
| Runs a single iteration for the default #GMainContext. | ||||
|  | ||||
| </para> | ||||
|  | ||||
| @may_block: set to %TRUE if it should block (i.e. wait) until an event source | ||||
| becomes ready. It will return after an event source has been processed. | ||||
| If set to %FALSE it will return immediately if no event source is ready to be | ||||
| processed. | ||||
| @Returns: %TRUE if more events are pending. | ||||
| @Deprecated: 2.2: Use g_main_context_iteration() instead. | ||||
| @may_block:  | ||||
|  | ||||
|  | ||||
| <!-- ##### FUNCTION g_main_context_pending ##### --> | ||||
| @@ -345,12 +232,9 @@ processed. | ||||
|  | ||||
| <!-- ##### MACRO g_main_pending ##### --> | ||||
| <para> | ||||
| Checks if any events are pending for the default #GMainContext | ||||
| (i.e. ready to be processed).   | ||||
|  | ||||
| </para> | ||||
|  | ||||
| @Returns: %TRUE if any events are pending. | ||||
| @Deprecated: 2.2: Use g_main_context_pending() instead. | ||||
|  | ||||
|  | ||||
| <!-- ##### FUNCTION g_main_context_find_source_by_id ##### --> | ||||
| @@ -492,17 +376,13 @@ Checks if any events are pending for the default #GMainContext | ||||
|  | ||||
| <!-- ##### USER_FUNCTION GPollFunc ##### --> | ||||
| <para> | ||||
| Specifies the type of function passed to g_main_context_set_poll_func(). | ||||
| The semantics of the function should match those of the | ||||
| <function>poll()</function> system call. | ||||
|  | ||||
| </para> | ||||
|  | ||||
| @ufds: an array of #GPollFD elements. | ||||
| @nfsd: the number of elements in @ufds. | ||||
| @timeout_: the maximum time to wait for an event of the file descriptors. | ||||
|           A negative value indicates an infinite timeout. | ||||
| @Returns: the number of #GPollFD elements which have events or errors reported, | ||||
| or -1 if an error occurred. | ||||
| @ufds:  | ||||
| @nfsd:  | ||||
| @timeout_:  | ||||
| @Returns:  | ||||
|  | ||||
|  | ||||
| <!-- ##### FUNCTION g_main_context_add_poll ##### --> | ||||
| @@ -544,12 +424,10 @@ or -1 if an error occurred. | ||||
|  | ||||
| <!-- ##### MACRO g_main_set_poll_func ##### --> | ||||
| <para> | ||||
| Sets the function to use for the handle polling of file descriptors | ||||
| for the default main context.  | ||||
|  | ||||
| </para> | ||||
|  | ||||
| @func: the function to call to poll all file descriptors. | ||||
| @Deprecated: 2.2: Use g_main_context_set_poll_func() instead. | ||||
| @func:  | ||||
|  | ||||
|  | ||||
| <!-- ##### FUNCTION g_main_context_get_thread_default ##### --> | ||||
| @@ -680,22 +558,18 @@ for the default main context. | ||||
|  | ||||
| <!-- ##### TYPEDEF GPid ##### --> | ||||
| <para> | ||||
| A type which is used to hold a process identification.  | ||||
| On Unix, processes are identified by a process id (an  | ||||
| integer), while Windows uses process handles (which are  | ||||
| pointers). | ||||
|  | ||||
| </para> | ||||
|  | ||||
|  | ||||
| <!-- ##### USER_FUNCTION GChildWatchFunc ##### --> | ||||
| <para> | ||||
| The type of functions to be called when a child exists. | ||||
|  | ||||
| </para> | ||||
|  | ||||
| @pid: the process id of the child process | ||||
| @status: Status information about the child process, | ||||
|   see waitpid(2) for more information about this field | ||||
| @data: user data passed to g_child_watch_add() | ||||
| @pid:  | ||||
| @status:  | ||||
| @data:  | ||||
|  | ||||
|  | ||||
| <!-- ##### FUNCTION g_child_watch_source_new ##### --> | ||||
| @@ -734,32 +608,6 @@ The type of functions to be called when a child exists. | ||||
| <!-- ##### STRUCT GPollFD ##### --> | ||||
| <para> | ||||
|  | ||||
| <informaltable pgwide="1" frame="none" role="struct"> | ||||
| <tgroup cols="2"><colspec colwidth="2*"/><colspec colwidth="8*"/> | ||||
| <tbody> | ||||
|  | ||||
| <row> | ||||
| <entry>#gint fd;</entry> | ||||
| <entry>the file descriptor to poll (or a <type>HANDLE</type> on Win32 platforms).</entry> | ||||
| </row> | ||||
|  | ||||
| <row> | ||||
| <entry>#gushort events;</entry> | ||||
| <entry>a bitwise combination of flags from #GIOCondition, specifying which | ||||
| events should be polled for. Typically for reading from a file descriptor | ||||
| you would use %G_IO_IN | %G_IO_HUP | %G_IO_ERR, and for writing you would use | ||||
| %G_IO_OUT | %G_IO_ERR. | ||||
| </entry> | ||||
| </row> | ||||
|  | ||||
| <row> | ||||
| <entry>#gushort revents;</entry> | ||||
| <entry>a bitwise combination of flags from #GIOCondition, returned from the | ||||
| <function>poll()</function> function to indicate which events occurred. | ||||
| </entry> | ||||
| </row> | ||||
| </tbody></tgroup></informaltable> | ||||
|  | ||||
| </para> | ||||
|  | ||||
| @fd:  | ||||
| @@ -787,8 +635,7 @@ you would use %G_IO_IN | %G_IO_HUP | %G_IO_ERR, and for writing you would use | ||||
|  | ||||
| <!-- ##### STRUCT GSource ##### --> | ||||
| <para> | ||||
| The <structname>GSource</structname> struct is an opaque data type representing | ||||
| an event source. | ||||
|  | ||||
| </para> | ||||
|  | ||||
|  | ||||
| @@ -803,63 +650,24 @@ for dependency reasons. | ||||
|  | ||||
| <!-- ##### STRUCT GSourceFuncs ##### --> | ||||
| <para> | ||||
| The #GSourceFuncs struct contains a table of functions used to handle | ||||
| event sources in a generic manner. | ||||
| </para> | ||||
| <para> | ||||
| For idle sources, the prepare and check functions always return %TRUE to | ||||
| indicate that the source is always ready to be processed. | ||||
| The prepare function also returns a timeout value of 0 to ensure that the | ||||
| poll() call doesn't block (since that would be time  | ||||
| wasted which could have been spent running the idle function). | ||||
| </para> | ||||
| <para> | ||||
| For timeout sources, the prepare and check functions both return %TRUE if the | ||||
| timeout interval has expired. The prepare function also returns a timeout  | ||||
| value to ensure that the poll() call doesn't block too  | ||||
| long and miss the next timeout. | ||||
| </para> | ||||
| <para> | ||||
| For file descriptor sources, the prepare function typically returns %FALSE, | ||||
| since it must wait until poll() has been called before  | ||||
| it knows whether any events need to be processed. It sets the returned  | ||||
| timeout to -1 to indicate that it doesn't mind how long the  | ||||
| poll() call blocks. | ||||
| In the check function, it tests the results of the poll() | ||||
| call to see if the required condition has been met, and returns %TRUE if so. | ||||
|  | ||||
| </para> | ||||
|  | ||||
| @prepare: Called before all the file descriptors are polled. | ||||
| If the source can determine that it is ready here (without waiting for the | ||||
| results of the poll() call) it should return %TRUE. | ||||
| It can also return a @timeout_ value which should be the maximum timeout | ||||
| (in milliseconds) which should be passed to the poll() call. | ||||
| The actual timeout used will be -1 if all sources returned -1, or it will | ||||
| be the minimum of all the @timeout_ values returned which were >= 0. | ||||
| @check: Called after all the file descriptors are polled. | ||||
| The source should return %TRUE if it is ready to be dispatched. | ||||
| Note that some time may have passed since the previous prepare function was | ||||
| called, so the source should be checked again here. | ||||
| @dispatch: Called to dispatch the event source, after it has returned %TRUE in | ||||
| either its @prepare or its @check function. The @dispatch function is | ||||
| passed in a callback function and data. The callback function may be | ||||
| %NULL if the source was never connected to a callback using | ||||
| g_source_set_callback(). The @dispatch function should call the | ||||
| callback function with @user_data and whatever additional parameters are | ||||
| needed for this type of event source. | ||||
| @finalize: Called when the source is finalized. | ||||
| @prepare:  | ||||
| @check:  | ||||
| @dispatch:  | ||||
| @finalize:  | ||||
| @closure_callback:  | ||||
| @closure_marshal:  | ||||
|  | ||||
| <!-- ##### STRUCT GSourceCallbackFuncs ##### --> | ||||
| <para> | ||||
| The <structname>GSourceCallbackFuncs</structname> struct contains | ||||
| functions for managing callback objects.  | ||||
|  | ||||
| </para> | ||||
|  | ||||
| @ref: Called when a reference is added to the callback object. | ||||
| @unref: Called when a reference to the callback object is dropped. | ||||
| @get: Called to extract the callback function and data from the callback object. | ||||
| @ref:  | ||||
| @unref:  | ||||
| @get:  | ||||
|  | ||||
| <!-- ##### FUNCTION g_source_new ##### --> | ||||
| <para> | ||||
|   | ||||
							
								
								
									
										76
									
								
								glib/gmain.c
									
									
									
									
									
								
							
							
						
						
									
										76
									
								
								glib/gmain.c
									
									
									
									
									
								
							| @@ -78,6 +78,82 @@ | ||||
| #endif | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * SECTION:main | ||||
|  * @title: The Main Event Loop | ||||
|  * @short_description: manages all available sources of events | ||||
|  * | ||||
|  * The main event loop manages all the available sources of events for | ||||
|  * GLib and GTK+ applications. These events can come from any number of | ||||
|  * different types of sources such as file descriptors (plain files, | ||||
|  * pipes or sockets) and timeouts. New types of event sources can also | ||||
|  * be added using g_source_attach(). | ||||
|  * | ||||
|  * To allow multiple independent sets of sources to be handled in | ||||
|  * different threads, each source is associated with a #GMainContext. | ||||
|  * A GMainContext can only be running in a single thread, but | ||||
|  * sources can be added to it and removed from it from other threads. | ||||
|  * | ||||
|  * Each event source is assigned a priority. The default priority, | ||||
|  * #G_PRIORITY_DEFAULT, is 0. Values less than 0 denote higher priorities. | ||||
|  * Values greater than 0 denote lower priorities. Events from high priority | ||||
|  * sources are always processed before events from lower priority sources. | ||||
|  * | ||||
|  * Idle functions can also be added, and assigned a priority. These will | ||||
|  * be run whenever no events with a higher priority are ready to be processed. | ||||
|  * | ||||
|  * The #GMainLoop data type represents a main event loop. A GMainLoop is | ||||
|  * created with g_main_loop_new(). After adding the initial event sources, | ||||
|  * g_main_loop_run() is called. This continuously checks for new events from | ||||
|  * each of the event sources and dispatches them. Finally, the processing of | ||||
|  * an event from one of the sources leads to a call to g_main_loop_quit() to | ||||
|  * exit the main loop, and g_main_loop_run() returns. | ||||
|  * | ||||
|  * It is possible to create new instances of #GMainLoop recursively. | ||||
|  * This is often used in GTK+ applications when showing modal dialog | ||||
|  * boxes. Note that event sources are associated with a particular | ||||
|  * #GMainContext, and will be checked and dispatched for all main | ||||
|  * loops associated with that GMainContext. | ||||
|  * | ||||
|  * GTK+ contains wrappers of some of these functions, e.g. gtk_main(), | ||||
|  * gtk_main_quit() and gtk_events_pending(). | ||||
|  * | ||||
|  * <refsect2><title>Creating new source types</title> | ||||
|  * <para>One of the unusual features of the #GMainLoop functionality | ||||
|  * is that new types of event source can be created and used in | ||||
|  * addition to the builtin type of event source. A new event source | ||||
|  * type is used for handling GDK events. A new source type is created | ||||
|  * by <firstterm>deriving</firstterm> from the #GSource structure. | ||||
|  * The derived type of source is represented by a structure that has | ||||
|  * the #GSource structure as a first element, and other elements specific | ||||
|  * to the new source type. To create an instance of the new source type, | ||||
|  * call g_source_new() passing in the size of the derived structure and | ||||
|  * a table of functions. These #GSourceFuncs determine the behavior of | ||||
|  * the new source type.</para> | ||||
|  * <para>New source types basically interact with the main context | ||||
|  * in two ways. Their prepare function in #GSourceFuncs can set a timeout | ||||
|  * to determine the maximum amount of time that the main loop will sleep | ||||
|  * before checking the source again. In addition, or as well, the source | ||||
|  * can add file descriptors to the set that the main context checks using | ||||
|  * g_source_add_poll().</para> | ||||
|  * </refsect2> | ||||
|  * <refsect2><title>Customizing the main loop iteration</title> | ||||
|  * <para>Single iterations of a #GMainContext can be run with | ||||
|  * g_main_context_iteration(). In some cases, more detailed control | ||||
|  * of exactly how the details of the main loop work is desired, for | ||||
|  * instance, when integrating the #GMainLoop with an external main loop. | ||||
|  * In such cases, you can call the component functions of | ||||
|  * g_main_context_iteration() directly. These functions are | ||||
|  * g_main_context_prepare(), g_main_context_query(), | ||||
|  * g_main_context_check() and g_main_context_dispatch().</para> | ||||
|  * <para>The operation of these functions can best be seen in terms | ||||
|  * of a state diagram, as shown in <xref linkend="mainloop-states"/>.</para> | ||||
|  * <figure id="mainloop-states"><title>States of a Main Context</title> | ||||
|  * <graphic fileref="mainloop-states.gif" format="GIF"></graphic> | ||||
|  * </figure> | ||||
|  * </refsect2> | ||||
|  */ | ||||
|  | ||||
| /* Types */ | ||||
|  | ||||
| typedef struct _GTimeoutSource GTimeoutSource; | ||||
|   | ||||
							
								
								
									
										374
									
								
								glib/gmain.h
									
									
									
									
									
								
							
							
						
						
									
										374
									
								
								glib/gmain.h
									
									
									
									
									
								
							| @@ -8,7 +8,7 @@ | ||||
|  * | ||||
|  * This library is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  * Library General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU Library General Public | ||||
| @@ -30,16 +30,112 @@ | ||||
|  | ||||
| G_BEGIN_DECLS | ||||
|  | ||||
| typedef struct _GMainContext	        GMainContext;	/* Opaque */ | ||||
| typedef struct _GMainLoop	        GMainLoop;	/* Opaque */ | ||||
| typedef struct _GSource	                GSource; | ||||
| typedef struct _GSourceCallbackFuncs	GSourceCallbackFuncs; | ||||
| typedef struct _GSourceFuncs	        GSourceFuncs; | ||||
| /** | ||||
|  * GMainContext: | ||||
|  * | ||||
|  * The <structname>GMainContext</structname> struct is an opaque data | ||||
|  * type representing a set of sources to be handled in a main loop. | ||||
|  */ | ||||
| typedef struct _GMainContext            GMainContext; | ||||
|  | ||||
| /** | ||||
|  * GMainLoop: | ||||
|  * | ||||
|  * The <structname>GMainLoop</structname> struct is an opaque data type | ||||
|  * representing the main event loop of a GLib or GTK+ application. | ||||
|  */ | ||||
| typedef struct _GMainLoop               GMainLoop; | ||||
|  | ||||
| /** | ||||
|  * GSource: | ||||
|  * | ||||
|  * The <structname>GSource</structname> struct is an opaque data type | ||||
|  * representing an event source. | ||||
|  */ | ||||
| typedef struct _GSource                 GSource; | ||||
|  | ||||
| /** | ||||
|  * GSourceCallbackFuncs: | ||||
|  * @ref: Called when a reference is added to the callback object | ||||
|  * @unref: Called when a reference to the callback object is dropped | ||||
|  * @get: Called to extract the callback function and data from the | ||||
|  *     callback object. | ||||
|  | ||||
|  * The <structname>GSourceCallbackFuncs</structname> struct contains | ||||
|  * functions for managing callback objects. | ||||
|  */ | ||||
| typedef struct _GSourceCallbackFuncs    GSourceCallbackFuncs; | ||||
|  | ||||
| /** | ||||
|  * GSourceFuncs: | ||||
|  * @prepare: Called before all the file descriptors are polled. If the | ||||
|  *     source can determine that it is ready here (without waiting for the | ||||
|  *     results of the poll() call) it should return %TRUE. It can also return | ||||
|  *     a @timeout_ value which should be the maximum timeout (in milliseconds) | ||||
|  *     which should be passed to the poll() call. The actual timeout used will | ||||
|  *     be -1 if all sources returned -1, or it will be the minimum of all the | ||||
|  *     @timeout_ values returned which were >= 0. | ||||
|  * @check: Called after all the file descriptors are polled. The source | ||||
|  *     should return %TRUE if it is ready to be dispatched. Note that some | ||||
|  *     time may have passed since the previous prepare function was called, | ||||
|  *     so the source should be checked again here. | ||||
|  * @dispatch: Called to dispatch the event source, after it has returned | ||||
|  *     %TRUE in either its @prepare or its @check function. The @dispatch | ||||
|  *     function is passed in a callback function and data. The callback | ||||
|  *     function may be %NULL if the source was never connected to a callback | ||||
|  *     using g_source_set_callback(). The @dispatch function should call the | ||||
|  *     callback function with @user_data and whatever additional parameters | ||||
|  *     are needed for this type of event source. | ||||
|  * @finalize: Called when the source is finalized. | ||||
|  * @closure_callback: | ||||
|  * @closure_marshal: | ||||
|  * | ||||
|  * The <structname>GSourceFuncs</structname> struct contains a table of | ||||
|  * functions used to handle event sources in a generic manner. | ||||
|  * | ||||
|  * For idle sources, the prepare and check functions always return %TRUE | ||||
|  * to indicate that the source is always ready to be processed. The prepare | ||||
|  * function also returns a timeout value of 0 to ensure that the poll() call | ||||
|  * doesn't block (since that would be time wasted which could have been spent | ||||
|  * running the idle function). | ||||
|  * | ||||
|  * For timeout sources, the prepare and check functions both return %TRUE | ||||
|  * if the timeout interval has expired. The prepare function also returns | ||||
|  * a timeout value to ensure that the poll() call doesn't block too long | ||||
|  * and miss the next timeout. | ||||
|  * | ||||
|  * For file descriptor sources, the prepare function typically returns %FALSE, | ||||
|  * since it must wait until poll() has been called before it knows whether | ||||
|  * any events need to be processed. It sets the returned timeout to -1 to | ||||
|  * indicate that it doesn't mind how long the poll() call blocks. In the | ||||
|  * check function, it tests the results of the poll() call to see if the | ||||
|  * required condition has been met, and returns %TRUE if so. | ||||
|  */ | ||||
| typedef struct _GSourceFuncs            GSourceFuncs; | ||||
|  | ||||
| /** | ||||
|  * GPid: | ||||
|  * | ||||
|  * A type which is used to hold a process identification. | ||||
|  * | ||||
|  * On UNIX, processes are identified by a process id (an integer), | ||||
|  * while Windows uses process handles (which are pointers). | ||||
|  */ | ||||
|  | ||||
| typedef gboolean (*GSourceFunc)       (gpointer data); | ||||
|  | ||||
| /** | ||||
|  * GChildWatchFunc: | ||||
|  * @pid: the process id of the child process | ||||
|  * @status: Status information about the child process, | ||||
|  *     see waitpid(2) for more information about this field | ||||
|  * @data: user data passed to g_child_watch_add() | ||||
|  * | ||||
|  * The type of functions to be called when a child exists. | ||||
|  */ | ||||
| typedef void     (*GChildWatchFunc)   (GPid     pid, | ||||
| 				       gint     status, | ||||
| 				       gpointer data); | ||||
|                                        gint     status, | ||||
|                                        gpointer data); | ||||
| struct _GSource | ||||
| { | ||||
|   /*< private >*/ | ||||
| @@ -69,9 +165,9 @@ struct _GSourceCallbackFuncs | ||||
|   void (*ref)   (gpointer     cb_data); | ||||
|   void (*unref) (gpointer     cb_data); | ||||
|   void (*get)   (gpointer     cb_data, | ||||
| 		 GSource     *source,  | ||||
| 		 GSourceFunc *func, | ||||
| 		 gpointer    *data); | ||||
|                  GSource     *source,  | ||||
|                  GSourceFunc *func, | ||||
|                  gpointer    *data); | ||||
| }; | ||||
|  | ||||
| typedef void (*GSourceDummyMarshal) (void); | ||||
| @@ -79,25 +175,70 @@ typedef void (*GSourceDummyMarshal) (void); | ||||
| struct _GSourceFuncs | ||||
| { | ||||
|   gboolean (*prepare)  (GSource    *source, | ||||
| 			gint       *timeout_); | ||||
|                         gint       *timeout_); | ||||
|   gboolean (*check)    (GSource    *source); | ||||
|   gboolean (*dispatch) (GSource    *source, | ||||
| 			GSourceFunc callback, | ||||
| 			gpointer    user_data); | ||||
|                         GSourceFunc callback, | ||||
|                         gpointer    user_data); | ||||
|   void     (*finalize) (GSource    *source); /* Can be NULL */ | ||||
|  | ||||
|   /* For use by g_source_set_closure */ | ||||
|   GSourceFunc     closure_callback;	    | ||||
|   GSourceFunc     closure_callback;         | ||||
|   GSourceDummyMarshal closure_marshal; /* Really is of type GClosureMarshal */ | ||||
| }; | ||||
|  | ||||
| /* Standard priorities */ | ||||
|  | ||||
| /** | ||||
|  * G_PRIORITY_HIGH: | ||||
|  * | ||||
|  * Use this for high priority event sources. | ||||
|  * | ||||
|  * It is not used within GLib or GTK+. | ||||
|  */ | ||||
| #define G_PRIORITY_HIGH            -100 | ||||
|  | ||||
| /** | ||||
|  * G_PRIORITY_DEFAULT: | ||||
|  * | ||||
|  * Use this for default priority event sources. | ||||
|  * | ||||
|  * In GLib this priority is used when adding timeout functions | ||||
|  * with g_timeout_add(). In GDK this priority is used for events | ||||
|  * from the X server. | ||||
|  */ | ||||
| #define G_PRIORITY_DEFAULT          0 | ||||
|  | ||||
| /** | ||||
|  * G_PRIORITY_HIGH_IDLE: | ||||
|  * | ||||
|  * Use this for high priority idle functions. | ||||
|  * | ||||
|  * GTK+ uses #G_PRIORITY_HIGH_IDLE + 10 for resizing operations, | ||||
|  * and #G_PRIORITY_HIGH_IDLE + 20 for redrawing operations. (This is | ||||
|  * done to ensure that any pending resizes are processed before any | ||||
|  * pending redraws, so that widgets are not redrawn twice unnecessarily.) | ||||
|  */ | ||||
| #define G_PRIORITY_HIGH_IDLE        100 | ||||
|  | ||||
| /** | ||||
|  * G_PRIORITY_DEFAULT_IDLE: | ||||
|  * | ||||
|  * Use this for default priority idle functions. | ||||
|  * | ||||
|  * In GLib this priority is used when adding idle functions with | ||||
|  * g_idle_add(). | ||||
|  */ | ||||
| #define G_PRIORITY_DEFAULT_IDLE     200 | ||||
| #define G_PRIORITY_LOW	            300 | ||||
|  | ||||
| /** | ||||
|  * G_PRIORITY_LOW: | ||||
|  * | ||||
|  * Use this for very low priority background tasks. | ||||
|  * | ||||
|  * It is not used within GLib or GTK+. | ||||
|  */ | ||||
| #define G_PRIORITY_LOW              300 | ||||
|  | ||||
| /* GMainContext: */ | ||||
|  | ||||
| @@ -107,18 +248,18 @@ void          g_main_context_unref     (GMainContext *context); | ||||
| GMainContext *g_main_context_default   (void); | ||||
|  | ||||
| gboolean      g_main_context_iteration (GMainContext *context, | ||||
| 					gboolean      may_block); | ||||
|                                         gboolean      may_block); | ||||
| gboolean      g_main_context_pending   (GMainContext *context); | ||||
|  | ||||
| /* For implementation of legacy interfaces | ||||
|  */ | ||||
| GSource      *g_main_context_find_source_by_id              (GMainContext *context, | ||||
| 							     guint         source_id); | ||||
|                                                              guint         source_id); | ||||
| GSource      *g_main_context_find_source_by_user_data       (GMainContext *context, | ||||
| 							     gpointer      user_data); | ||||
|                                                              gpointer      user_data); | ||||
| GSource      *g_main_context_find_source_by_funcs_user_data (GMainContext *context, | ||||
|  							     GSourceFuncs *funcs, | ||||
| 							     gpointer      user_data); | ||||
|                                                              GSourceFuncs *funcs, | ||||
|                                                              gpointer      user_data); | ||||
|  | ||||
| /* Low level functions for implementing custom main loops. | ||||
|  */ | ||||
| @@ -127,33 +268,33 @@ gboolean g_main_context_acquire (GMainContext *context); | ||||
| void     g_main_context_release (GMainContext *context); | ||||
| gboolean g_main_context_is_owner (GMainContext *context); | ||||
| gboolean g_main_context_wait    (GMainContext *context, | ||||
| 				 GCond        *cond, | ||||
| 				 GMutex       *mutex); | ||||
|                                  GCond        *cond, | ||||
|                                  GMutex       *mutex); | ||||
|  | ||||
| gboolean g_main_context_prepare  (GMainContext *context, | ||||
| 				  gint         *priority); | ||||
|                                   gint         *priority); | ||||
| gint     g_main_context_query    (GMainContext *context, | ||||
| 				  gint          max_priority, | ||||
| 				  gint         *timeout_, | ||||
| 				  GPollFD      *fds, | ||||
| 				  gint          n_fds); | ||||
|                                   gint          max_priority, | ||||
|                                   gint         *timeout_, | ||||
|                                   GPollFD      *fds, | ||||
|                                   gint          n_fds); | ||||
| gint     g_main_context_check    (GMainContext *context, | ||||
| 				  gint          max_priority, | ||||
| 				  GPollFD      *fds, | ||||
| 				  gint          n_fds); | ||||
|                                   gint          max_priority, | ||||
|                                   GPollFD      *fds, | ||||
|                                   gint          n_fds); | ||||
| void     g_main_context_dispatch (GMainContext *context); | ||||
|  | ||||
| void     g_main_context_set_poll_func (GMainContext *context, | ||||
| 				       GPollFunc     func); | ||||
|                                        GPollFunc     func); | ||||
| GPollFunc g_main_context_get_poll_func (GMainContext *context); | ||||
|  | ||||
| /* Low level functions for use by source implementations | ||||
|  */ | ||||
| void     g_main_context_add_poll    (GMainContext *context, | ||||
| 				     GPollFD      *fd, | ||||
| 				     gint          priority); | ||||
|                                      GPollFD      *fd, | ||||
|                                      gint          priority); | ||||
| void     g_main_context_remove_poll (GMainContext *context, | ||||
| 				     GPollFD      *fd); | ||||
|                                      GPollFD      *fd); | ||||
|  | ||||
| gint     g_main_depth               (void); | ||||
| GSource *g_main_current_source      (void); | ||||
| @@ -167,7 +308,7 @@ GMainContext *g_main_context_get_thread_default  (void); | ||||
| /* GMainLoop: */ | ||||
|  | ||||
| GMainLoop *g_main_loop_new        (GMainContext *context, | ||||
| 			    	   gboolean      is_running); | ||||
|                                    gboolean      is_running); | ||||
| void       g_main_loop_run        (GMainLoop    *loop); | ||||
| void       g_main_loop_quit       (GMainLoop    *loop); | ||||
| GMainLoop *g_main_loop_ref        (GMainLoop    *loop); | ||||
| @@ -178,28 +319,28 @@ GMainContext *g_main_loop_get_context (GMainLoop    *loop); | ||||
| /* GSource: */ | ||||
|  | ||||
| GSource *g_source_new             (GSourceFuncs   *source_funcs, | ||||
| 				   guint           struct_size); | ||||
|                                    guint           struct_size); | ||||
| GSource *g_source_ref             (GSource        *source); | ||||
| void     g_source_unref           (GSource        *source); | ||||
|  | ||||
| guint    g_source_attach          (GSource        *source, | ||||
| 				   GMainContext   *context); | ||||
|                                    GMainContext   *context); | ||||
| void     g_source_destroy         (GSource        *source); | ||||
|  | ||||
| void     g_source_set_priority    (GSource        *source, | ||||
| 				   gint            priority); | ||||
|                                    gint            priority); | ||||
| gint     g_source_get_priority    (GSource        *source); | ||||
| void     g_source_set_can_recurse (GSource        *source, | ||||
| 				   gboolean        can_recurse); | ||||
|                                    gboolean        can_recurse); | ||||
| gboolean g_source_get_can_recurse (GSource        *source); | ||||
| guint    g_source_get_id          (GSource        *source); | ||||
|  | ||||
| GMainContext *g_source_get_context (GSource       *source); | ||||
|  | ||||
| void     g_source_set_callback    (GSource        *source, | ||||
| 				   GSourceFunc     func, | ||||
| 				   gpointer        data, | ||||
| 				   GDestroyNotify  notify); | ||||
|                                    GSourceFunc     func, | ||||
|                                    gpointer        data, | ||||
|                                    GDestroyNotify  notify); | ||||
|  | ||||
| void     g_source_set_funcs       (GSource        *source, | ||||
|                                    GSourceFuncs   *funcs); | ||||
| @@ -214,16 +355,16 @@ void                 g_source_set_name_by_id (guint           tag, | ||||
|  | ||||
| /* Used to implement g_source_connect_closure and internally*/ | ||||
| void g_source_set_callback_indirect (GSource              *source, | ||||
| 				     gpointer              callback_data, | ||||
| 				     GSourceCallbackFuncs *callback_funcs); | ||||
|                                      gpointer              callback_data, | ||||
|                                      GSourceCallbackFuncs *callback_funcs); | ||||
|  | ||||
| void     g_source_add_poll         (GSource        *source, | ||||
| 				    GPollFD        *fd); | ||||
|                                     GPollFD        *fd); | ||||
| void     g_source_remove_poll      (GSource        *source, | ||||
| 				    GPollFD        *fd); | ||||
|                                     GPollFD        *fd); | ||||
|  | ||||
| void     g_source_get_current_time (GSource        *source, | ||||
| 				    GTimeVal       *timeval); | ||||
|                                     GTimeVal       *timeval); | ||||
|  | ||||
|  /* void g_source_connect_closure (GSource        *source, | ||||
|                                   GClosure       *closure); | ||||
| @@ -238,27 +379,106 @@ GSource *g_timeout_source_new_seconds (guint interval); | ||||
|  | ||||
| /* Miscellaneous functions | ||||
|  */ | ||||
| void g_get_current_time		        (GTimeVal	*result); | ||||
| void g_get_current_time                 (GTimeVal       *result); | ||||
|  | ||||
| /* ============== Compat main loop stuff ================== */ | ||||
|  | ||||
| #ifndef G_DISABLE_DEPRECATED | ||||
|  | ||||
| /* Legacy names for GMainLoop functions | ||||
| /** | ||||
|  * g_main_new: | ||||
|  * @is_running: set to %TRUE to indicate that the loop is running. This | ||||
|  *     is not very important since calling g_main_run() will set this | ||||
|  *     to %TRUE anyway. | ||||
|  * | ||||
|  * Creates a new #GMainLoop for th default main context. | ||||
|  * | ||||
|  * Returns: a new #GMainLoop | ||||
|  * | ||||
|  * Deprecated: 2.2: Use g_main_loop_new() instead | ||||
|  */ | ||||
| #define         g_main_new(is_running)  g_main_loop_new (NULL, is_running) | ||||
|  | ||||
| /** | ||||
|  * g_main_run: | ||||
|  * @loop: a #GMainLoop | ||||
|  * | ||||
|  * Runs a main loop until it stops running. | ||||
|  * | ||||
|  * Deprecated: 2.2: Use g_main_loop_run() instead | ||||
|  */ | ||||
| #define 	g_main_new(is_running)	g_main_loop_new (NULL, is_running); | ||||
| #define         g_main_run(loop)        g_main_loop_run(loop) | ||||
| #define         g_main_quit(loop)       g_main_loop_quit(loop) | ||||
| #define         g_main_destroy(loop)    g_main_loop_unref(loop) | ||||
| #define         g_main_is_running(loop) g_main_loop_is_running(loop) | ||||
|  | ||||
| /* Functions to manipulate the default main loop | ||||
| /** | ||||
|  * g_main_quit: | ||||
|  * @loop: a #GMainLoop | ||||
|  * | ||||
|  * Stops the #GMainLoop. | ||||
|  * If g_main_run() was called to run the #GMainLoop, it will now return. | ||||
|  * | ||||
|  * Deprecated: 2.2: Use g_main_loop_quit() instead | ||||
|  */ | ||||
| #define g_main_quit(loop)       g_main_loop_quit(loop) | ||||
|  | ||||
| #define	g_main_iteration(may_block) g_main_context_iteration      (NULL, may_block) | ||||
| #define g_main_pending()            g_main_context_pending        (NULL) | ||||
| /** | ||||
|  * g_main_destroy: | ||||
|  * @loop: a #GMainLoop | ||||
|  * | ||||
|  * Frees the memory allocated for the #GMainLoop. | ||||
|  * | ||||
|  * Deprecated: 2.2: Use g_main_loop_unref() instead | ||||
|  */ | ||||
| #define g_main_destroy(loop)    g_main_loop_unref(loop) | ||||
|  | ||||
| #define g_main_set_poll_func(func)   g_main_context_set_poll_func (NULL, func) | ||||
| /** | ||||
|  * g_main_is_running: | ||||
|  * @loop: a #GMainLoop | ||||
|  * | ||||
|  * Checks if the main loop is running. | ||||
|  * | ||||
|  * Returns: %TRUE if the main loop is running | ||||
|  * | ||||
|  * Deprecated: 2.2: Use g_main_loop_is_running() instead | ||||
|  */ | ||||
| #define g_main_is_running(loop) g_main_loop_is_running(loop) | ||||
|  | ||||
| /** | ||||
|  * g_main_iteration: | ||||
|  * @may_block: set to %TRUE if it should block (i.e. wait) until an event | ||||
|  *     source becomes ready. It will return after an event source has been | ||||
|  *     processed. If set to %FALSE it will return immediately if no event | ||||
|  *     source is ready to be processed. | ||||
|  * | ||||
|  * Runs a single iteration for the default #GMainContext. | ||||
|  * | ||||
|  * Returns: %TRUE if more events are pending. | ||||
|  * | ||||
|  * Deprecated: 2.2: Use g_main_context_iteration() instead. | ||||
|  */ | ||||
| #define g_main_iteration(may_block) g_main_context_iteration (NULL, may_block) | ||||
|  | ||||
| /** | ||||
|  * g_main_pending: | ||||
|  * | ||||
|  * Checks if any events are pending for the default #GMainContext | ||||
|  * (i.e. ready to be processed). | ||||
|  * | ||||
|  * Returns: %TRUE if any events are pending. | ||||
|  * | ||||
|  * Deprected: 2.2: Use g_main_context_pending() instead. | ||||
|  */ | ||||
| #define g_main_pending()            g_main_context_pending (NULL) | ||||
|  | ||||
| /** | ||||
|  * g_main_set_poll_func: | ||||
|  * @func: the function to call to poll all file descriptors | ||||
|  * | ||||
|  * Sets the function to use for the handle polling of file descriptors | ||||
|  * for the default main context. | ||||
|  * | ||||
|  * Deprecated: 2.2: Use g_main_context_set_poll_func() again | ||||
|  */ | ||||
| #define g_main_set_poll_func(func)  g_main_context_set_poll_func (NULL, func) | ||||
|  | ||||
| #endif /* G_DISABLE_DEPRECATED */ | ||||
|  | ||||
| @@ -266,39 +486,39 @@ void g_get_current_time		        (GTimeVal	*result); | ||||
| gboolean g_source_remove                     (guint          tag); | ||||
| gboolean g_source_remove_by_user_data        (gpointer       user_data); | ||||
| gboolean g_source_remove_by_funcs_user_data  (GSourceFuncs  *funcs, | ||||
| 					      gpointer       user_data); | ||||
|                                               gpointer       user_data); | ||||
|  | ||||
| /* Idles, child watchers and timeouts */ | ||||
| guint    g_timeout_add_full         (gint            priority, | ||||
| 				     guint           interval, | ||||
| 				     GSourceFunc     function, | ||||
| 				     gpointer        data, | ||||
| 				     GDestroyNotify  notify); | ||||
|                                      guint           interval, | ||||
|                                      GSourceFunc     function, | ||||
|                                      gpointer        data, | ||||
|                                      GDestroyNotify  notify); | ||||
| guint    g_timeout_add              (guint           interval, | ||||
| 				     GSourceFunc     function, | ||||
| 				     gpointer        data); | ||||
|                                      GSourceFunc     function, | ||||
|                                      gpointer        data); | ||||
| guint    g_timeout_add_seconds_full (gint            priority, | ||||
|                                      guint           interval, | ||||
|                                      GSourceFunc     function, | ||||
|                                      gpointer        data, | ||||
|                                      GDestroyNotify  notify); | ||||
| guint    g_timeout_add_seconds      (guint           interval, | ||||
| 				     GSourceFunc     function, | ||||
| 				     gpointer        data); | ||||
|                                      GSourceFunc     function, | ||||
|                                      gpointer        data); | ||||
| guint    g_child_watch_add_full     (gint            priority, | ||||
| 				     GPid            pid, | ||||
| 				     GChildWatchFunc function, | ||||
| 				     gpointer        data, | ||||
| 				     GDestroyNotify  notify); | ||||
|                                      GPid            pid, | ||||
|                                      GChildWatchFunc function, | ||||
|                                      gpointer        data, | ||||
|                                      GDestroyNotify  notify); | ||||
| guint    g_child_watch_add          (GPid            pid, | ||||
| 				     GChildWatchFunc function, | ||||
| 				     gpointer        data); | ||||
|                                      GChildWatchFunc function, | ||||
|                                      gpointer        data); | ||||
| guint    g_idle_add                 (GSourceFunc     function, | ||||
| 				     gpointer        data); | ||||
|                                      gpointer        data); | ||||
| guint    g_idle_add_full            (gint            priority, | ||||
| 				     GSourceFunc     function, | ||||
| 				     gpointer        data, | ||||
| 				     GDestroyNotify  notify); | ||||
|                                      GSourceFunc     function, | ||||
|                                      gpointer        data, | ||||
|                                      GDestroyNotify  notify); | ||||
| gboolean g_idle_remove_by_data      (gpointer        data); | ||||
|  | ||||
| /* Hook for GClosure / GSource integration. Don't touch */ | ||||
|   | ||||
							
								
								
									
										30
									
								
								glib/gpoll.h
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								glib/gpoll.h
									
									
									
									
									
								
							| @@ -59,10 +59,34 @@ G_BEGIN_DECLS | ||||
|  * Windows. | ||||
|  */ | ||||
| typedef struct _GPollFD GPollFD; | ||||
| typedef gint	(*GPollFunc)	(GPollFD *ufds, | ||||
| 				 guint	  nfsd, | ||||
| 				 gint     timeout_); | ||||
|  | ||||
| /** | ||||
|  * GPollFunc: | ||||
|  * @ufds: an array of #GPollFD elements | ||||
|  * @nfsd: the number of elements in @ufds | ||||
|  * @timeout_: the maximum time to wait for an event of the file descriptors. | ||||
|  *     A negative value indicates an infinite timeout. | ||||
|  * | ||||
|  * Specifies the type of function passed to g_main_context_set_poll_func(). | ||||
|  * The semantics of the function should match those of the poll() system call. | ||||
|  * | ||||
|  * Returns: the number of #GPollFD elements which have events or errors | ||||
|  *     reported, or -1 if an error occurred. | ||||
|  */ | ||||
| typedef gint    (*GPollFunc)    (GPollFD *ufds, | ||||
|                                  guint    nfsd, | ||||
|                                  gint     timeout_); | ||||
|  | ||||
| /** | ||||
|  * GPollFD: | ||||
|  * @fd: the file descriptor to poll (or a <type>HANDLE</type> on Win32) | ||||
|  * @events: a bitwise combination from #GIOCondition, specifying which | ||||
|  *     events should be polled for. Typically for reading from a file | ||||
|  *     descriptor you would use %G_IO_IN | %G_IO_HUP | %G_IO_ERR, and | ||||
|  *     for writing you would use %G_IO_OUT | %G_IO_ERR. | ||||
|  * @revents: a bitwise combination of flags from #GIOCondition, returned | ||||
|  *     from the poll() function to indicate which events occurred. | ||||
|  */ | ||||
| struct _GPollFD | ||||
| { | ||||
| #if defined (G_OS_WIN32) && GLIB_SIZEOF_VOID_P == 8 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user