source: trunk/third/glib2/gobject/gsignal.h @ 20721

Revision 20721, 10.2 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/* GObject - GLib Type, Object, Parameter and Signal Library
2 * Copyright (C) 2000-2001 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 Lesser 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 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General
15 * Public 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#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION)
20#error "Only <glib-object.h> can be included directly."
21#endif
22
23#ifndef __G_SIGNAL_H__
24#define __G_SIGNAL_H__
25
26#include        <gobject/gclosure.h>
27#include        <gobject/gvalue.h>
28#include        <gobject/gparam.h>
29#include        <gobject/gmarshal.h>
30
31G_BEGIN_DECLS
32
33/* --- typedefs --- */
34typedef struct _GSignalQuery             GSignalQuery;
35typedef struct _GSignalInvocationHint    GSignalInvocationHint;
36typedef GClosureMarshal                  GSignalCMarshaller;
37typedef gboolean (*GSignalEmissionHook) (GSignalInvocationHint *ihint,
38                                         guint                  n_param_values,
39                                         const GValue          *param_values,
40                                         gpointer               data);
41typedef gboolean (*GSignalAccumulator)  (GSignalInvocationHint *ihint,
42                                         GValue                *return_accu,
43                                         const GValue          *handler_return,
44                                         gpointer               data);
45
46
47/* --- run, match and connect types --- */
48typedef enum
49{
50  G_SIGNAL_RUN_FIRST    = 1 << 0,
51  G_SIGNAL_RUN_LAST     = 1 << 1,
52  G_SIGNAL_RUN_CLEANUP  = 1 << 2,
53  G_SIGNAL_NO_RECURSE   = 1 << 3,
54  G_SIGNAL_DETAILED     = 1 << 4,
55  G_SIGNAL_ACTION       = 1 << 5,
56  G_SIGNAL_NO_HOOKS     = 1 << 6
57} GSignalFlags;
58#define G_SIGNAL_FLAGS_MASK  0x7f
59typedef enum
60{
61  G_CONNECT_AFTER       = 1 << 0,
62  G_CONNECT_SWAPPED     = 1 << 1
63} GConnectFlags;
64typedef enum
65{
66  G_SIGNAL_MATCH_ID        = 1 << 0,
67  G_SIGNAL_MATCH_DETAIL    = 1 << 1,
68  G_SIGNAL_MATCH_CLOSURE   = 1 << 2,
69  G_SIGNAL_MATCH_FUNC      = 1 << 3,
70  G_SIGNAL_MATCH_DATA      = 1 << 4,
71  G_SIGNAL_MATCH_UNBLOCKED = 1 << 5
72} GSignalMatchType;
73#define G_SIGNAL_MATCH_MASK  0x3f
74#define G_SIGNAL_TYPE_STATIC_SCOPE (G_TYPE_FLAG_RESERVED_ID_BIT)
75
76
77/* --- signal information --- */
78struct _GSignalInvocationHint
79{
80  guint         signal_id;
81  GQuark        detail;
82  GSignalFlags  run_type;
83};
84struct _GSignalQuery
85{
86  guint         signal_id;
87  const gchar  *signal_name;
88  GType         itype;
89  GSignalFlags  signal_flags;
90  GType         return_type; /* mangled with G_SIGNAL_TYPE_STATIC_SCOPE flag */
91  guint         n_params;
92  const GType  *param_types; /* mangled with G_SIGNAL_TYPE_STATIC_SCOPE flag */
93};
94
95
96/* --- signals --- */
97guint                 g_signal_newv         (const gchar        *signal_name,
98                                             GType               itype,
99                                             GSignalFlags        signal_flags,
100                                             GClosure           *class_closure,
101                                             GSignalAccumulator  accumulator,
102                                             gpointer            accu_data,
103                                             GSignalCMarshaller  c_marshaller,
104                                             GType               return_type,
105                                             guint               n_params,
106                                             GType              *param_types);
107guint                 g_signal_new_valist   (const gchar        *signal_name,
108                                             GType               itype,
109                                             GSignalFlags        signal_flags,
110                                             GClosure           *class_closure,
111                                             GSignalAccumulator  accumulator,
112                                             gpointer            accu_data,
113                                             GSignalCMarshaller  c_marshaller,
114                                             GType               return_type,
115                                             guint               n_params,
116                                             va_list             args);
117guint                 g_signal_new          (const gchar        *signal_name,
118                                             GType               itype,
119                                             GSignalFlags        signal_flags,
120                                             guint               class_offset,
121                                             GSignalAccumulator  accumulator,
122                                             gpointer            accu_data,
123                                             GSignalCMarshaller  c_marshaller,
124                                             GType               return_type,
125                                             guint               n_params,
126                                             ...);
127void                  g_signal_emitv        (const GValue       *instance_and_params,
128                                             guint               signal_id,
129                                             GQuark              detail,
130                                             GValue             *return_value);
131void                  g_signal_emit_valist  (gpointer            instance,
132                                             guint               signal_id,
133                                             GQuark              detail,
134                                             va_list             var_args);
135void                  g_signal_emit         (gpointer            instance,
136                                             guint               signal_id,
137                                             GQuark              detail,
138                                             ...);
139void                  g_signal_emit_by_name (gpointer            instance,
140                                             const gchar        *detailed_signal,
141                                             ...);
142guint                 g_signal_lookup       (const gchar        *name,
143                                             GType               itype);
144G_CONST_RETURN gchar* g_signal_name         (guint               signal_id);
145void                  g_signal_query        (guint               signal_id,
146                                             GSignalQuery       *query);
147guint*                g_signal_list_ids     (GType               itype,
148                                             guint              *n_ids);
149gboolean              g_signal_parse_name   (const gchar        *detailed_signal,
150                                             GType               itype,
151                                             guint              *signal_id_p,
152                                             GQuark             *detail_p,
153                                             gboolean            force_detail_quark);
154GSignalInvocationHint* g_signal_get_invocation_hint (gpointer    instance);
155
156
157/* --- signal emissions --- */
158void    g_signal_stop_emission              (gpointer             instance,
159                                             guint                signal_id,
160                                             GQuark               detail);
161void    g_signal_stop_emission_by_name      (gpointer             instance,
162                                             const gchar         *detailed_signal);
163gulong  g_signal_add_emission_hook          (guint                signal_id,
164                                             GQuark               detail,
165                                             GSignalEmissionHook  hook_func,
166                                             gpointer             hook_data,
167                                             GDestroyNotify       data_destroy);
168void    g_signal_remove_emission_hook       (guint                signal_id,
169                                             gulong               hook_id);
170
171
172/* --- signal handlers --- */
173gboolean g_signal_has_handler_pending         (gpointer           instance,
174                                               guint              signal_id,
175                                               GQuark             detail,
176                                               gboolean           may_be_blocked);
177gulong   g_signal_connect_closure_by_id       (gpointer           instance,
178                                               guint              signal_id,
179                                               GQuark             detail,
180                                               GClosure          *closure,
181                                               gboolean           after);
182gulong   g_signal_connect_closure             (gpointer           instance,
183                                               const gchar       *detailed_signal,
184                                               GClosure          *closure,
185                                               gboolean           after);
186gulong   g_signal_connect_data                (gpointer           instance,
187                                               const gchar       *detailed_signal,
188                                               GCallback          c_handler,
189                                               gpointer           data,
190                                               GClosureNotify     destroy_data,
191                                               GConnectFlags      connect_flags);
192void     g_signal_handler_block               (gpointer           instance,
193                                               gulong             handler_id);
194void     g_signal_handler_unblock             (gpointer           instance,
195                                               gulong             handler_id);
196void     g_signal_handler_disconnect          (gpointer           instance,
197                                               gulong             handler_id);
198gboolean g_signal_handler_is_connected        (gpointer           instance,
199                                               gulong             handler_id);
200gulong   g_signal_handler_find                (gpointer           instance,
201                                               GSignalMatchType   mask,
202                                               guint              signal_id,
203                                               GQuark             detail,
204                                               GClosure          *closure,
205                                               gpointer           func,
206                                               gpointer           data);
207guint    g_signal_handlers_block_matched      (gpointer           instance,
208                                               GSignalMatchType   mask,
209                                               guint              signal_id,
210                                               GQuark             detail,
211                                               GClosure          *closure,
212                                               gpointer           func,
213                                               gpointer           data);
214guint    g_signal_handlers_unblock_matched    (gpointer           instance,
215                                               GSignalMatchType   mask,
216                                               guint              signal_id,
217                                               GQuark             detail,
218                                               GClosure          *closure,
219                                               gpointer           func,
220                                               gpointer           data);
221guint    g_signal_handlers_disconnect_matched (gpointer           instance,
222                                               GSignalMatchType   mask,
223                                               guint              signal_id,
224                                               GQuark             detail,
225                                               GClosure          *closure,
226                                               gpointer           func,
227                                               gpointer           data);
228
229
230/* --- chaining for language bindings --- */
231void    g_signal_override_class_closure       (guint              signal_id,
232                                               GType              instance_type,
233                                               GClosure          *class_closure);
234void    g_signal_chain_from_overridden        (const GValue      *instance_and_params,
235                                               GValue            *return_value);
236
237
238/* --- convenience --- */
239#define g_signal_connect(instance, detailed_signal, c_handler, data) \
240    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
241#define g_signal_connect_after(instance, detailed_signal, c_handler, data) \
242    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, G_CONNECT_AFTER)
243#define g_signal_connect_swapped(instance, detailed_signal, c_handler, data) \
244    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, G_CONNECT_SWAPPED)
245#define g_signal_handlers_disconnect_by_func(instance, func, data)                                              \
246    g_signal_handlers_disconnect_matched ((instance),                                                           \
247                                          (GSignalMatchType) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA),       \
248                                          0, 0, NULL, (func), (data))
249#define g_signal_handlers_block_by_func(instance, func, data)                                                   \
250    g_signal_handlers_block_matched      ((instance),                                                           \
251                                          (GSignalMatchType) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA),       \
252                                          0, 0, NULL, (func), (data))
253#define g_signal_handlers_unblock_by_func(instance, func, data)                                                 \
254    g_signal_handlers_unblock_matched    ((instance),                                                           \
255                                          (GSignalMatchType) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA),       \
256                                          0, 0, NULL, (func), (data))
257
258
259gboolean g_signal_accumulator_true_handled (GSignalInvocationHint *ihint,
260                                            GValue                *return_accu,
261                                            const GValue          *handler_return,
262                                            gpointer               dummy);
263
264/*< private >*/
265void     g_signal_handlers_destroy            (gpointer           instance);
266void     _g_signals_destroy                   (GType              itype);
267
268G_END_DECLS
269
270#endif /* __G_SIGNAL_H__ */
Note: See TracBrowser for help on using the repository browser.