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
|
/* GObject - GLib Type, Object, Parameter and Signal Library
* Copyright (C) 2000 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General
* Public License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307, USA.
*/
#ifndef __G_SIGNAL_H__
#define __G_SIGNAL_H__
#include <gobject/gclosure.h>
#include <gobject/gvalue.h>
#include <gobject/gparam.h>
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/* --- macros --- */
#define G_SIGNAL_HINT_ID(hint) ((hint) >> 8)
#define G_SIGNAL_HINT_RUN_TYPE(hint) ((hint) & 0xff)
/* --- run & match types --- */
typedef enum
{
G_SIGNAL_RUN_FIRST = 1 << 0,
G_SIGNAL_RUN_LAST = 1 << 1,
G_SIGNAL_RUN_CLEANUP = 1 << 2,
G_SIGNAL_NO_RECURSE = 1 << 3,
G_SIGNAL_ACTION = 1 << 4,
G_SIGNAL_NO_HOOKS = 1 << 5
} GSignalType;
typedef enum
{
G_SIGNAL_MATCH_ID = 1 << 0,
G_SIGNAL_MATCH_CLOSURE = 1 << 1,
G_SIGNAL_MATCH_FUNC = 1 << 2,
G_SIGNAL_MATCH_DATA = 1 << 3,
G_SIGNAL_MATCH_UNBLOCKED = 1 << 4,
G_SIGNAL_MATCH_MASK = 0x1f
} GSignalMatchType;
/* --- signal queries --- */
typedef struct _GSignalQuery GSignalQuery;
struct _GSignalQuery
{
guint signal_id;
const gchar *signal_name;
GType itype;
GSignalType signal_flags;
GType return_type;
guint n_params;
const GType *param_types;
};
/* --- function types --- */
typedef gboolean (*GSignalEmissionHook) (guint signal_id,
guint n_values,
const GValue *values);
typedef gboolean (*GSignalAccumulator) (guint signal_id,
GValue *return_accu,
const GValue *return_value);
typedef GClosureMarshal GSignalCMarshaller;
/* --- signals --- */
guint g_signal_newv (const gchar *signal_name,
GType itype,
GSignalType signal_flags,
GClosure *class_closure,
GSignalAccumulator accumulator,
GSignalCMarshaller c_marshaller,
GType return_type,
guint n_params,
GType *param_types);
void g_signal_emitv (const GValue *instance_and_params,
guint signal_id,
GValue *return_value);
guint g_signal_lookup (const gchar *name,
GType itype);
gchar* g_signal_name (guint signal_id);
void g_signal_query (guint signal_id,
GSignalQuery *query);
/* --- signal handlers --- */
guint g_signal_connect_closure (gpointer instance,
guint signal_id,
GClosure *closure,
gboolean after);
void g_signal_handler_disconnect (gpointer instance,
guint handler_id);
void g_signal_handler_block (gpointer instance,
guint handler_id);
void g_signal_handler_unblock (gpointer instance,
guint handler_id);
guint g_signal_handler_find (gpointer instance,
GSignalMatchType mask,
guint signal_id,
GClosure *closure,
gpointer func,
gpointer data);
gboolean g_signal_has_handler_pending (gpointer instance,
guint signal_id,
gboolean may_be_blocked);
/* --- signal emissions --- */
void g_signal_stop_emission (gpointer instance,
guint signal_id);
guint g_signal_add_emission_hook_full (guint signal_id,
GClosure *closure);
void g_signal_remove_emission_hook (guint signal_id,
guint hook_id);
/*< private >*/
void g_signal_handlers_destroy (gpointer instance);
void g_signals_destroy (GType itype);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* __G_SIGNAL_H__ */
|