source: trunk/third/glib2/glib/gmain.h @ 20721

Revision 20721, 10.5 KB checked in by ghudson, 20 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r20720, which included commits to RCS files with non-trunk default branches.
Line 
1/* gmain.h - the GLib Main loop
2 * Copyright (C) 1998-2000 Red Hat, Inc.
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 * Library General Public License for more details.
13 *
14 * You should have received a copy of the GNU Library General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 * Boston, MA 02111-1307, USA.
18 */
19
20#ifndef __G_MAIN_H__
21#define __G_MAIN_H__
22
23#include <glib/gslist.h>
24#include <glib/gthread.h>
25
26G_BEGIN_DECLS
27
28typedef struct _GMainContext            GMainContext;   /* Opaque */
29typedef struct _GMainLoop               GMainLoop;      /* Opaque */
30typedef struct _GSource                 GSource;
31typedef struct _GSourceCallbackFuncs    GSourceCallbackFuncs;
32typedef struct _GSourceFuncs            GSourceFuncs;
33
34typedef gboolean (*GSourceFunc)       (gpointer data);
35typedef void     (*GChildWatchFunc)   (GPid     pid,
36                                       gint     status,
37                                       gpointer data);
38struct _GSource
39{
40  /*< private >*/
41  gpointer callback_data;
42  GSourceCallbackFuncs *callback_funcs;
43
44  GSourceFuncs *source_funcs;
45  guint ref_count;
46
47  GMainContext *context;
48
49  gint priority;
50  guint flags;
51  guint source_id;
52
53  GSList *poll_fds;
54 
55  GSource *prev;
56  GSource *next;
57
58  gpointer reserved1;
59  gpointer reserved2;
60};
61
62struct _GSourceCallbackFuncs
63{
64  void (*ref)   (gpointer     cb_data);
65  void (*unref) (gpointer     cb_data);
66  void (*get)   (gpointer     cb_data,
67                 GSource     *source,
68                 GSourceFunc *func,
69                 gpointer    *data);
70};
71
72typedef void (*GSourceDummyMarshal) (void);
73
74struct _GSourceFuncs
75{
76  gboolean (*prepare)  (GSource    *source,
77                        gint       *timeout_);
78  gboolean (*check)    (GSource    *source);
79  gboolean (*dispatch) (GSource    *source,
80                        GSourceFunc callback,
81                        gpointer    user_data);
82  void     (*finalize) (GSource    *source); /* Can be NULL */
83
84  /* For use by g_source_set_closure */
85  GSourceFunc     closure_callback;       
86  GSourceDummyMarshal closure_marshal; /* Really is of type GClosureMarshal */
87};
88
89/* Any definitions using GPollFD or GPollFunc are primarily
90 * for Unix and not guaranteed to be the compatible on all
91 * operating systems on which GLib runs. Right now, the
92 * GLib does use these functions on Win32 as well, but interprets
93 * them in a fairly different way than on Unix. If you use
94 * these definitions, you are should be prepared to recode
95 * for different operating systems.
96 *
97 *
98 * On Win32, the fd in a GPollFD should be Win32 HANDLE (*not* a file
99 * descriptor as provided by the C runtime) that can be used by
100 * MsgWaitForMultipleObjects. This does *not* include file handles
101 * from CreateFile, SOCKETs, nor pipe handles. (But you can use
102 * WSAEventSelect to signal events when a SOCKET is readable).
103 *
104 * On Win32, fd can also be the special value G_WIN32_MSG_HANDLE to
105 * indicate polling for messages.
106 *
107 * But note that G_WIN32_MSG_HANDLE GPollFDs should not be used by GDK
108 * (GTK) programs, as GDK itself wants to read messages and convert them
109 * to GDK events.
110 *
111 * So, unless you really know what you are doing, it's best not to try
112 * to use the main loop polling stuff for your own needs on
113 * Win32. It's really only written for the GIMP's needs so
114 * far.
115 */
116typedef struct _GPollFD GPollFD;
117typedef gint    (*GPollFunc)    (GPollFD *ufds,
118                                 guint    nfsd,
119                                 gint     timeout_);
120
121struct _GPollFD
122{
123  gint          fd;
124  gushort       events;
125  gushort       revents;
126};
127
128/* Standard priorities */
129
130#define G_PRIORITY_HIGH            -100
131#define G_PRIORITY_DEFAULT          0
132#define G_PRIORITY_HIGH_IDLE        100
133#define G_PRIORITY_DEFAULT_IDLE     200
134#define G_PRIORITY_LOW              300
135
136/* GMainContext: */
137
138GMainContext *g_main_context_new       (void);
139void          g_main_context_ref       (GMainContext *context);
140void          g_main_context_unref     (GMainContext *context);
141GMainContext *g_main_context_default   (void);
142
143gboolean      g_main_context_iteration (GMainContext *context,
144                                        gboolean      may_block);
145gboolean      g_main_context_pending   (GMainContext *context);
146
147/* For implementation of legacy interfaces
148 */
149GSource      *g_main_context_find_source_by_id              (GMainContext *context,
150                                                             guint         source_id);
151GSource      *g_main_context_find_source_by_user_data       (GMainContext *context,
152                                                             gpointer      user_data);
153GSource      *g_main_context_find_source_by_funcs_user_data (GMainContext *context,
154                                                             GSourceFuncs *funcs,
155                                                             gpointer      user_data);
156
157/* Low level functions for implementing custom main loops.
158 */
159void     g_main_context_wakeup  (GMainContext *context);
160gboolean g_main_context_acquire (GMainContext *context);
161void     g_main_context_release (GMainContext *context);
162gboolean g_main_context_wait    (GMainContext *context,
163                                 GCond        *cond,
164                                 GMutex       *mutex);
165
166gboolean g_main_context_prepare  (GMainContext *context,
167                                  gint         *priority);
168gint     g_main_context_query    (GMainContext *context,
169                                  gint          max_priority,
170                                  gint         *timeout_,
171                                  GPollFD      *fds,
172                                  gint          n_fds);
173gint     g_main_context_check    (GMainContext *context,
174                                  gint          max_priority,
175                                  GPollFD      *fds,
176                                  gint          n_fds);
177void     g_main_context_dispatch (GMainContext *context);
178
179void      g_main_context_set_poll_func (GMainContext *context,
180                                        GPollFunc     func);
181GPollFunc g_main_context_get_poll_func (GMainContext *context);
182
183/* Low level functions for use by source implementations
184 */
185void g_main_context_add_poll      (GMainContext *context,
186                                   GPollFD      *fd,
187                                   gint          priority);
188void g_main_context_remove_poll   (GMainContext *context,
189                                   GPollFD      *fd);
190
191int g_main_depth (void);
192
193/* GMainLoop: */
194
195GMainLoop *g_main_loop_new        (GMainContext *context,
196                                   gboolean      is_running);
197void       g_main_loop_run        (GMainLoop    *loop);
198void       g_main_loop_quit       (GMainLoop    *loop);
199GMainLoop *g_main_loop_ref        (GMainLoop    *loop);
200void       g_main_loop_unref      (GMainLoop    *loop);
201gboolean   g_main_loop_is_running (GMainLoop    *loop);
202GMainContext *g_main_loop_get_context (GMainLoop    *loop);
203
204/* GSource: */
205
206GSource *g_source_new             (GSourceFuncs   *source_funcs,
207                                   guint           struct_size);
208GSource *g_source_ref             (GSource        *source);
209void     g_source_unref           (GSource        *source);
210
211guint    g_source_attach          (GSource        *source,
212                                   GMainContext   *context);
213void     g_source_destroy         (GSource        *source);
214
215void     g_source_set_priority    (GSource        *source,
216                                   gint            priority);
217gint     g_source_get_priority    (GSource        *source);
218void     g_source_set_can_recurse (GSource        *source,
219                                   gboolean        can_recurse);
220gboolean g_source_get_can_recurse (GSource        *source);
221guint    g_source_get_id          (GSource        *source);
222
223GMainContext *g_source_get_context (GSource       *source);
224
225void g_source_set_callback          (GSource              *source,
226                                     GSourceFunc           func,
227                                     gpointer              data,
228                                     GDestroyNotify        notify);
229
230
231/* Used to implement g_source_connect_closure and internally*/
232void g_source_set_callback_indirect (GSource              *source,
233                                     gpointer              callback_data,
234                                     GSourceCallbackFuncs *callback_funcs);
235
236void     g_source_add_poll         (GSource        *source,
237                                    GPollFD        *fd);
238void     g_source_remove_poll      (GSource        *source,
239                                    GPollFD        *fd);
240
241void     g_source_get_current_time (GSource        *source,
242                                    GTimeVal       *timeval);
243
244 /* void g_source_connect_closure (GSource        *source,
245                                  GClosure       *closure);
246 */
247
248/* Specific source types
249 */
250GSource *g_idle_source_new        (void);
251GSource *g_child_watch_source_new (GPid pid);
252GSource *g_timeout_source_new     (guint interval);
253
254/* Miscellaneous functions
255 */
256void g_get_current_time                 (GTimeVal       *result);
257
258/* ============== Compat main loop stuff ================== */
259
260#ifndef G_DISABLE_DEPRECATED
261
262/* Legacy names for GMainLoop functions
263 */
264#define         g_main_new(is_running)  g_main_loop_new (NULL, is_running);
265#define         g_main_run(loop)        g_main_loop_run(loop)
266#define         g_main_quit(loop)       g_main_loop_quit(loop)
267#define         g_main_destroy(loop)    g_main_loop_unref(loop)
268#define         g_main_is_running(loop) g_main_loop_is_running(loop)
269
270/* Functions to manipulate the default main loop
271 */
272
273#define g_main_iteration(may_block) g_main_context_iteration      (NULL, may_block)
274#define g_main_pending()            g_main_context_pending        (NULL)
275
276#define g_main_set_poll_func(func)   g_main_context_set_poll_func (NULL, func)
277
278#endif /* G_DISABLE_DEPRECATED */
279
280/* Source manipulation by ID */
281gboolean g_source_remove                     (guint          tag);
282gboolean g_source_remove_by_user_data        (gpointer       user_data);
283gboolean g_source_remove_by_funcs_user_data  (GSourceFuncs  *funcs,
284                                              gpointer       user_data);
285
286/* Idles, child watchers and timeouts */
287guint    g_timeout_add_full     (gint            priority,
288                                 guint           interval,
289                                 GSourceFunc     function,
290                                 gpointer        data,
291                                 GDestroyNotify  notify);
292guint    g_timeout_add          (guint           interval,
293                                 GSourceFunc     function,
294                                 gpointer        data);
295guint    g_child_watch_add_full (gint            priority,
296                                 GPid            pid,
297                                 GChildWatchFunc function,
298                                 gpointer        data,
299                                 GDestroyNotify  notify);
300guint    g_child_watch_add      (GPid            pid,
301                                 GChildWatchFunc function,
302                                 gpointer        data);
303guint    g_idle_add             (GSourceFunc     function,
304                                 gpointer        data);
305guint    g_idle_add_full        (gint            priority,
306                                 GSourceFunc     function,
307                                 gpointer        data,
308                                 GDestroyNotify  notify);
309gboolean g_idle_remove_by_data  (gpointer        data);
310
311/* Hook for GClosure / GSource integration. Don't touch */
312GLIB_VAR GSourceFuncs g_timeout_funcs;
313GLIB_VAR GSourceFuncs g_child_watch_funcs;
314GLIB_VAR GSourceFuncs g_idle_funcs;
315
316G_END_DECLS
317
318#endif /* __G_MAIN_H__ */
Note: See TracBrowser for help on using the repository browser.