summaryrefslogtreecommitdiff
path: root/fpcsrc/packages/gtk2/src/glib/gmain.inc
blob: 38f7827a0ec3e7bea0fc0b3d033ac49b9e9b0b30 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
// included by glib2.pas

{$IFDEF read_forward_definitions}
{$ENDIF read_forward_definitions}

//------------------------------------------------------------------------------

{$IFDEF read_interface_types}
  PGMainContext = pointer;
  PGMainLoop    = pointer;

  PGSourceFunc = ^TGSourceFunc;
  TGSourceFunc = function (data:gpointer):gboolean;cdecl;

  {< private > }
  PGSourceCallbackFuncs = ^TGSourceCallbackFuncs;

  PGSource = ^TGSource;
  PGSourceFuncs = ^TGSourceFuncs;

  TGSource = record
    callback_data  : gpointer;
    callback_funcs : PGSourceCallbackFuncs;
    source_funcs   : PGSourceFuncs;
    ref_count      : guint;
    context        : PGMainContext;
    priority       : gint;
    flags          : guint;
    source_id      : guint;
    poll_fds       : PGSList;
    prev           : PGSource;
    next           : PGSource;
    reserved1      : gpointer;
    reserved2      : gpointer;
  end;

  TGSourceCallbackFuncs = record
    ref   : procedure (cb_data:gpointer); cdecl;
    unref : procedure (cb_data:gpointer); cdecl;
    get   : procedure (cb_data:gpointer; source:PGSource; func:PGSourceFunc; data:Pgpointer); cdecl;
  end;

  TGSourceDummyMarshal = procedure {no parameters} ;cdecl;
  { Can be NULL  }
  { For use by g_source_set_closure  }
  { Really is of type GClosureMarshal  }

  TGSourceFuncs = record
    prepare  : function  (source:PGSource; timeout:gint):gboolean; cdecl;
    check    : function  (source:PGSource):gboolean; cdecl;
    dispatch : function  (source:PGSource; callback:TGSourceFunc; user_data:gpointer):gboolean; cdecl;
    finalize : procedure (source:PGSource); cdecl;
    closure_callback : TGSourceFunc;
    closure_marshal  : TGSourceDummyMarshal;
  end;

  PGPollFD = ^TGPollFD;
  TGPollFD = record
    fd      : gint;
    events  : gushort;
    revents : gushort;
  end;

  TGPollFunc = function (ufds:PGPollFD; nfsd:guint; timeout:gint):gint;cdecl;
{$ENDIF read_interface_types}

//------------------------------------------------------------------------------

{$IFDEF read_interface_rest}
{ Standard priorities  }

const
  G_PRIORITY_HIGH         = -(100);
  G_PRIORITY_DEFAULT      = 0;
  G_PRIORITY_HIGH_IDLE    = 100;
  G_PRIORITY_DEFAULT_IDLE = 200;
  G_PRIORITY_LOW          = 300;
{ GMainContext:  }

function g_main_context_new:PGMainContext;cdecl;external gliblib name 'g_main_context_new';
procedure g_main_context_ref(context:PGMainContext);cdecl;external gliblib name 'g_main_context_ref';
procedure g_main_context_unref(context:PGMainContext);cdecl;external gliblib name 'g_main_context_unref';
function g_main_context_default:PGMainContext;cdecl;external gliblib name 'g_main_context_default';
function g_main_context_iteration(context:PGMainContext; may_block:gboolean):gboolean;cdecl;external gliblib name 'g_main_context_iteration';
function g_main_context_pending(context:PGMainContext):gboolean;cdecl;external gliblib name 'g_main_context_pending';

{ For implementation of legacy interfaces }
function g_main_context_find_source_by_id(context:PGMainContext; source_id:guint):PGSource;cdecl;external gliblib name 'g_main_context_find_source_by_id';
function g_main_context_find_source_by_user_data(context:PGMainContext; user_data:gpointer):PGSource;cdecl;external gliblib name 'g_main_context_find_source_by_user_data';
function g_main_context_find_source_by_funcs_user_data(context:PGMainContext; funcs:PGSourceFuncs; user_data:gpointer):PGSource;cdecl;external gliblib name 'g_main_context_find_source_by_funcs_user_data';

{ Low level functions for implementing custom main loops. }
procedure g_main_context_wakeup(context:PGMainContext);cdecl;external gliblib name 'g_main_context_wakeup';
function g_main_context_acquire(context:PGMainContext):gboolean;cdecl;external gliblib name 'g_main_context_acquire';
procedure g_main_context_release(context:PGMainContext);cdecl;external gliblib name 'g_main_context_release';
function g_main_context_wait(context:PGMainContext; cond:PGCond; mutex:PGMutex):gboolean;cdecl;external gliblib name 'g_main_context_wait';
function g_main_context_prepare(context:PGMainContext; priority:Pgint):gboolean;cdecl;external gliblib name 'g_main_context_prepare';
function g_main_context_query(context:PGMainContext; max_priority:gint; timeout:Pgint; fds:PGPollFD; n_fds:gint):gint;cdecl;external gliblib name 'g_main_context_query';
function g_main_context_check(context:PGMainContext; max_priority:gint; fds:PGPollFD; n_fds:gint):gint;cdecl;external gliblib name 'g_main_context_check';
procedure g_main_context_dispatch(context:PGMainContext);cdecl;external gliblib name 'g_main_context_dispatch';
procedure g_main_context_set_poll_func(context:PGMainContext; func:TGPollFunc);cdecl;external gliblib name 'g_main_context_set_poll_func';
function g_main_context_get_poll_func(context:PGMainContext):TGPollFunc;cdecl;external gliblib name 'g_main_context_get_poll_func';

{ Low level functions for use by source implementations }
procedure g_main_context_add_poll(context:PGMainContext; fd:PGPollFD; priority:gint);cdecl;external gliblib name 'g_main_context_add_poll';
procedure g_main_context_remove_poll(context:PGMainContext; fd:PGPollFD);cdecl;external gliblib name 'g_main_context_remove_poll';

{ GMainLoop:  }
function g_main_loop_new(context:PGMainContext; is_running:gboolean):PGMainLoop;cdecl;external gliblib name 'g_main_loop_new';
procedure g_main_loop_run(loop:PGMainLoop);cdecl;external gliblib name 'g_main_loop_run';
procedure g_main_loop_quit(loop:PGMainLoop);cdecl;external gliblib name 'g_main_loop_quit';
function g_main_loop_ref(loop:PGMainLoop):PGMainLoop;cdecl;external gliblib name 'g_main_loop_ref';
procedure g_main_loop_unref(loop:PGMainLoop);cdecl;external gliblib name 'g_main_loop_unref';
function g_main_loop_is_running(loop:PGMainLoop):gboolean;cdecl;external gliblib name 'g_main_loop_is_running';
function g_main_loop_get_context(loop:PGMainLoop):PGMainContext;cdecl;external gliblib name 'g_main_loop_get_context';

{ GSource:  }
function g_source_new(source_funcs:PGSourceFuncs; struct_size:guint):PGSource;cdecl;external gliblib name 'g_source_new';
function g_source_ref(source:PGSource):PGSource;cdecl;external gliblib name 'g_source_ref';
procedure g_source_unref(source:PGSource);cdecl;external gliblib name 'g_source_unref';
function g_source_attach(source:PGSource; context:PGMainContext):guint;cdecl;external gliblib name 'g_source_attach';
procedure g_source_destroy(source:PGSource);cdecl;external gliblib name 'g_source_destroy';
procedure g_source_set_priority(source:PGSource; priority:gint);cdecl;external gliblib name 'g_source_set_priority';
function g_source_get_priority(source:PGSource):gint;cdecl;external gliblib name 'g_source_get_priority';
procedure g_source_set_can_recurse(source:PGSource; can_recurse:gboolean);cdecl;external gliblib name 'g_source_set_can_recurse';
function g_source_get_can_recurse(source:PGSource):gboolean;cdecl;external gliblib name 'g_source_get_can_recurse';
function g_source_get_id(source:PGSource):guint;cdecl;external gliblib name 'g_source_get_id';
function g_source_get_context(source:PGSource):PGMainContext;cdecl;external gliblib name 'g_source_get_context';
procedure g_source_set_callback(source:PGSource; func:TGSourceFunc; data:gpointer; notify:TGDestroyNotify);cdecl;external gliblib name 'g_source_set_callback';

{ Used to implement g_source_connect_closure and internally }
procedure g_source_set_callback_indirect(source:PGSource; callback_data:gpointer; callback_funcs:PGSourceCallbackFuncs);cdecl;external gliblib name 'g_source_set_callback_indirect';
procedure g_source_add_poll(source:PGSource; fd:PGPollFD);cdecl;external gliblib name 'g_source_add_poll';
procedure g_source_remove_poll(source:PGSource; fd:PGPollFD);cdecl;external gliblib name 'g_source_remove_poll';
procedure g_source_get_current_time(source:PGSource; timeval:PGTimeVal);cdecl;external gliblib name 'g_source_get_current_time';

{ void g_source_connect_closure (GSource         source,
                                 GClosure        closure);
 }

{ Specific source types }
function g_idle_source_new:PGSource;cdecl;external gliblib name 'g_idle_source_new';
function g_timeout_source_new(interval:guint):PGSource;cdecl;external gliblib name 'g_timeout_source_new';

{ Miscellaneous functions }
procedure g_get_current_time(result:PGTimeVal);cdecl;external gliblib name 'g_get_current_time';

{ ============== Compat main loop stuff ==================  }

function g_main_new(is_running: gboolean): PGMainLoop;


{ these functions are maped to their newer versions }
procedure g_main_run        (loop:PGMainLoop);cdecl;external gliblib name 'g_main_loop_run';
procedure g_main_quit       (loop:PGMainLoop);cdecl;external gliblib name 'g_main_loop_quit';
procedure g_main_destroy    (loop:PGMainLoop);cdecl;external gliblib name 'g_main_loop_unref';
function  g_main_is_running (loop:PGMainLoop):gboolean;cdecl;external gliblib name 'g_main_loop_is_running';


{ Functions to manipulate the default main loop}
function  g_main_iteration  (may_block: gboolean): gboolean;
function  g_main_pending: gboolean;
//             g_main_context_pending        (NULL)
procedure g_main_set_poll_func(func:  TGPollFunc);
//   g_main_context_set_poll_func (NULL, func)

{ ======= end of Compat main loop stuff ==================  }

{ Source manipulation by ID  }
function g_source_remove(tag:guint):gboolean;cdecl;external gliblib name 'g_source_remove';
function g_source_remove_by_user_data(user_data:gpointer):gboolean;cdecl;external gliblib name 'g_source_remove_by_user_data';
function g_source_remove_by_funcs_user_data(funcs:PGSourceFuncs; user_data:gpointer):gboolean;cdecl;external gliblib name 'g_source_remove_by_funcs_user_data';

{ Idles and timeouts  }
function g_timeout_add_full(priority:gint; interval:guint; _function:TGSourceFunc; data:gpointer; notify:TGDestroyNotify):guint;cdecl;external gliblib name 'g_timeout_add_full';
function g_timeout_add(interval:guint; _function:TGSourceFunc; data:gpointer):guint;cdecl;external gliblib name 'g_timeout_add';
function g_idle_add(_function:TGSourceFunc; data:gpointer):guint;cdecl;external gliblib name 'g_idle_add';
function g_idle_add_full(priority:gint; _function:TGSourceFunc; data:gpointer; notify:TGDestroyNotify):guint;cdecl;external gliblib name 'g_idle_add_full';
function g_idle_remove_by_data(data:gpointer):gboolean;cdecl;external gliblib name 'g_idle_remove_by_data';

{ Hook for GClosure / GSource integration. Don't touch  }
// GLIB_VAR GSourceFuncs g_timeout_funcs;
// GLIB_VAR GSourceFuncs g_idle_funcs;

{$ifdef windows}
procedure g_main_poll_win32_msg_add(priority:gint; fd:PGPollFD; hwnd:guint);cdecl;external gliblib name 'g_main_poll_win32_msg_add';
{$endif}

{$ENDIF read_interface_rest}
// included by glib2.pas