Mercurial > pidgin
annotate src/signals.h @ 7154:19cc14ea7599
[gaim-migrate @ 7721]
i always liked the way xchat does this
committer: Tailor Script <tailor@pidgin.im>
author | Nathan Walp <nwalp@pidgin.im> |
---|---|
date | Sun, 05 Oct 2003 01:25:01 +0000 |
parents | 7dba3e17cb21 |
children | fa6395637e2c |
rev | line source |
---|---|
6485 | 1 /** |
6488
e5e8d21bd4d8
[gaim-migrate @ 7002]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
2 * @file signals.h Signal API |
6485 | 3 * @ingroup core |
4 * | |
5 * gaim | |
6 * | |
7 * Copyright (C) 2003 Christian Hammond <chipx86@gnupdate.org> | |
8 * | |
9 * This program is free software; you can redistribute it and/or modify | |
10 * it under the terms of the GNU General Public License as published by | |
11 * the Free Software Foundation; either version 2 of the License, or | |
12 * (at your option) any later version. | |
13 * | |
14 * This program is distributed in the hope that it will be useful, | |
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
17 * GNU General Public License for more details. | |
18 * | |
19 * You should have received a copy of the GNU General Public License | |
20 * along with this program; if not, write to the Free Software | |
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
22 */ | |
23 #ifndef _GAIM_SIGNAL_H_ | |
24 #define _GAIM_SIGNAL_H_ | |
25 | |
26 #include <glib.h> | |
6564
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6562
diff
changeset
|
27 #include "value.h" |
6485 | 28 |
29 #define GAIM_CALLBACK(func) ((GaimCallback)func) | |
30 | |
31 typedef void (*GaimCallback)(void); | |
32 typedef void (*GaimSignalMarshalFunc)(GaimCallback cb, va_list args, | |
33 void *data, void **return_val); | |
34 | |
35 #ifdef __cplusplus | |
36 extern "C" { | |
37 #endif | |
38 | |
39 /**************************************************************************/ | |
40 /** @name Signal API */ | |
41 /**************************************************************************/ | |
42 /*@{*/ | |
43 | |
44 /** | |
45 * Registers a signal in an instance. | |
46 * | |
6720
41120df7ed94
[gaim-migrate @ 7247]
Christian Hammond <chipx86@chipx86.com>
parents:
6564
diff
changeset
|
47 * @param instance The instance to register the signal for. |
41120df7ed94
[gaim-migrate @ 7247]
Christian Hammond <chipx86@chipx86.com>
parents:
6564
diff
changeset
|
48 * @param signal The signal name. |
41120df7ed94
[gaim-migrate @ 7247]
Christian Hammond <chipx86@chipx86.com>
parents:
6564
diff
changeset
|
49 * @param marshal The marshal function. |
41120df7ed94
[gaim-migrate @ 7247]
Christian Hammond <chipx86@chipx86.com>
parents:
6564
diff
changeset
|
50 * @param ret_value The return value type, or NULL for no return value. |
41120df7ed94
[gaim-migrate @ 7247]
Christian Hammond <chipx86@chipx86.com>
parents:
6564
diff
changeset
|
51 * @param num_values The number of values to be passed to the callbacks. |
41120df7ed94
[gaim-migrate @ 7247]
Christian Hammond <chipx86@chipx86.com>
parents:
6564
diff
changeset
|
52 * @param ... The values to pass to the callbacks. |
6485 | 53 * |
54 * @return The signal ID local to that instance, or 0 if the signal | |
55 * couldn't be registered. | |
6564
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6562
diff
changeset
|
56 * |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6562
diff
changeset
|
57 * @see GaimValue |
6485 | 58 */ |
59 gulong gaim_signal_register(void *instance, const char *signal, | |
6564
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6562
diff
changeset
|
60 GaimSignalMarshalFunc marshal, |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6562
diff
changeset
|
61 GaimValue *ret_value, int num_values, ...); |
6485 | 62 |
63 /** | |
64 * Unregisters a signal in an instance. | |
65 * | |
66 * @param instance The instance to unregister the signal for. | |
67 * @param signal The signal name. | |
68 */ | |
69 void gaim_signal_unregister(void *instance, const char *signal); | |
70 | |
71 /** | |
72 * Unregisters all signals in an instance. | |
73 * | |
74 * @param instance The instance to unregister the signal for. | |
75 */ | |
76 void gaim_signals_unregister_by_instance(void *instance); | |
77 | |
78 /** | |
6564
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6562
diff
changeset
|
79 * Returns a list of value types used for a signal. |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6562
diff
changeset
|
80 * |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6562
diff
changeset
|
81 * @param instance The instance the signal is registered to. |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6562
diff
changeset
|
82 * @param signal The signal. |
6720
41120df7ed94
[gaim-migrate @ 7247]
Christian Hammond <chipx86@chipx86.com>
parents:
6564
diff
changeset
|
83 * @param ret_value The return value from the last signal handler. |
6564
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6562
diff
changeset
|
84 * @param num_values The returned number of values. |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6562
diff
changeset
|
85 * @param values The returned list of values. |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6562
diff
changeset
|
86 */ |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6562
diff
changeset
|
87 void gaim_signal_get_values(void *instance, const char *signal, |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6562
diff
changeset
|
88 GaimValue **ret_value, |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6562
diff
changeset
|
89 int *num_values, GaimValue ***values); |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6562
diff
changeset
|
90 |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6562
diff
changeset
|
91 /** |
6485 | 92 * Connects a signal handler to a signal for a particular object. |
93 * | |
94 * Take care not to register a handler function twice. Gaim will | |
95 * not correct any mistakes for you in this area. | |
96 * | |
97 * @param instance The instance to connect to. | |
98 * @param signal The name of the signal to connect. | |
99 * @param handle The handle of the receiver. | |
100 * @param func The callback function. | |
101 * @param data The data to pass to the callback function. | |
102 * | |
103 * @return The signal handler ID. | |
104 * | |
105 * @see gaim_signal_disconnect() | |
106 */ | |
107 gulong gaim_signal_connect(void *instance, const char *signal, | |
108 void *handle, GaimCallback func, void *data); | |
109 | |
110 /** | |
6548
d01ba50e3f3e
[gaim-migrate @ 7070]
Christian Hammond <chipx86@chipx86.com>
parents:
6509
diff
changeset
|
111 * Connects a signal handler to a signal for a particular object. |
d01ba50e3f3e
[gaim-migrate @ 7070]
Christian Hammond <chipx86@chipx86.com>
parents:
6509
diff
changeset
|
112 * |
d01ba50e3f3e
[gaim-migrate @ 7070]
Christian Hammond <chipx86@chipx86.com>
parents:
6509
diff
changeset
|
113 * The signal handler will take a va_args of arguments, instead of |
d01ba50e3f3e
[gaim-migrate @ 7070]
Christian Hammond <chipx86@chipx86.com>
parents:
6509
diff
changeset
|
114 * individual arguments. |
d01ba50e3f3e
[gaim-migrate @ 7070]
Christian Hammond <chipx86@chipx86.com>
parents:
6509
diff
changeset
|
115 * |
d01ba50e3f3e
[gaim-migrate @ 7070]
Christian Hammond <chipx86@chipx86.com>
parents:
6509
diff
changeset
|
116 * Take care not to register a handler function twice. Gaim will |
d01ba50e3f3e
[gaim-migrate @ 7070]
Christian Hammond <chipx86@chipx86.com>
parents:
6509
diff
changeset
|
117 * not correct any mistakes for you in this area. |
d01ba50e3f3e
[gaim-migrate @ 7070]
Christian Hammond <chipx86@chipx86.com>
parents:
6509
diff
changeset
|
118 * |
d01ba50e3f3e
[gaim-migrate @ 7070]
Christian Hammond <chipx86@chipx86.com>
parents:
6509
diff
changeset
|
119 * @param instance The instance to connect to. |
d01ba50e3f3e
[gaim-migrate @ 7070]
Christian Hammond <chipx86@chipx86.com>
parents:
6509
diff
changeset
|
120 * @param signal The name of the signal to connect. |
d01ba50e3f3e
[gaim-migrate @ 7070]
Christian Hammond <chipx86@chipx86.com>
parents:
6509
diff
changeset
|
121 * @param handle The handle of the receiver. |
d01ba50e3f3e
[gaim-migrate @ 7070]
Christian Hammond <chipx86@chipx86.com>
parents:
6509
diff
changeset
|
122 * @param func The callback function. |
d01ba50e3f3e
[gaim-migrate @ 7070]
Christian Hammond <chipx86@chipx86.com>
parents:
6509
diff
changeset
|
123 * @param data The data to pass to the callback function. |
d01ba50e3f3e
[gaim-migrate @ 7070]
Christian Hammond <chipx86@chipx86.com>
parents:
6509
diff
changeset
|
124 * |
d01ba50e3f3e
[gaim-migrate @ 7070]
Christian Hammond <chipx86@chipx86.com>
parents:
6509
diff
changeset
|
125 * @return The signal handler ID. |
d01ba50e3f3e
[gaim-migrate @ 7070]
Christian Hammond <chipx86@chipx86.com>
parents:
6509
diff
changeset
|
126 * |
d01ba50e3f3e
[gaim-migrate @ 7070]
Christian Hammond <chipx86@chipx86.com>
parents:
6509
diff
changeset
|
127 * @see gaim_signal_disconnect() |
d01ba50e3f3e
[gaim-migrate @ 7070]
Christian Hammond <chipx86@chipx86.com>
parents:
6509
diff
changeset
|
128 */ |
d01ba50e3f3e
[gaim-migrate @ 7070]
Christian Hammond <chipx86@chipx86.com>
parents:
6509
diff
changeset
|
129 gulong gaim_signal_connect_vargs(void *instance, const char *signal, |
d01ba50e3f3e
[gaim-migrate @ 7070]
Christian Hammond <chipx86@chipx86.com>
parents:
6509
diff
changeset
|
130 void *handle, GaimCallback func, void *data); |
d01ba50e3f3e
[gaim-migrate @ 7070]
Christian Hammond <chipx86@chipx86.com>
parents:
6509
diff
changeset
|
131 |
d01ba50e3f3e
[gaim-migrate @ 7070]
Christian Hammond <chipx86@chipx86.com>
parents:
6509
diff
changeset
|
132 /** |
6485 | 133 * Disconnects a signal handler from a signal on an object. |
134 * | |
135 * @param instance The instance to disconnect from. | |
136 * @param signal The name of the signal to disconnect. | |
137 * @param handle The handle of the receiver. | |
138 * @param func The registered function to disconnect. | |
139 * | |
140 * @see gaim_signal_connect() | |
141 */ | |
142 void gaim_signal_disconnect(void *instance, const char *signal, | |
143 void *handle, GaimCallback func); | |
144 | |
145 /** | |
146 * Removes all callbacks associated with a receiver handle. | |
147 * | |
148 * @param handle The receiver handle. | |
149 */ | |
150 void gaim_signals_disconnect_by_handle(void *handle); | |
151 | |
152 /** | |
153 * Emits a signal. | |
154 * | |
155 * @param instance The instance emitting the signal. | |
156 * @param signal The signal being emitted. | |
157 * | |
158 * @see gaim_signal_connect() | |
159 * @see gaim_signal_disconnect() | |
160 */ | |
161 void gaim_signal_emit(void *instance, const char *signal, ...); | |
162 | |
163 /** | |
164 * Emits a signal, using a va_list of arguments. | |
165 * | |
166 * @param instance The instance emitting the signal. | |
167 * @param signal The signal being emitted. | |
168 * @param args The arguments list. | |
169 * | |
170 * @see gaim_signal_connect() | |
171 * @see gaim_signal_disconnect() | |
172 */ | |
173 void gaim_signal_emit_vargs(void *instance, const char *signal, va_list args); | |
174 | |
175 /** | |
176 * Emits a signal and returns the return value from the last handler. | |
177 * | |
178 * @param instance The instance emitting the signal. | |
179 * @param signal The signal being emitted. | |
180 * | |
181 * @return The return value from the last handler. | |
182 */ | |
183 void *gaim_signal_emit_return_1(void *instance, const char *signal, ...); | |
184 | |
185 /** | |
186 * Emits a signal and returns the return value from the last handler. | |
187 * | |
188 * @param instance The instance emitting the signal. | |
189 * @param signal The signal being emitted. | |
190 * @param args The arguments list. | |
191 * | |
192 * @return The return value from the last handler. | |
193 */ | |
194 void *gaim_signal_emit_vargs_return_1(void *instance, const char *signal, | |
195 va_list args); | |
196 | |
197 /** | |
198 * Initializes the signals subsystem. | |
199 */ | |
200 void gaim_signals_init(); | |
201 | |
202 /** | |
203 * Uninitializes the signals subsystem. | |
204 */ | |
205 void gaim_signals_uninit(); | |
206 | |
207 /*@}*/ | |
208 | |
209 /**************************************************************************/ | |
210 /** @name Marshal Functions */ | |
211 /**************************************************************************/ | |
212 /*@{*/ | |
213 | |
214 void gaim_marshal_VOID( | |
215 GaimCallback cb, va_list args, void *data, void **return_val); | |
6822
7dba3e17cb21
[gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents:
6720
diff
changeset
|
216 void gaim_marshal_VOID__INT( |
7dba3e17cb21
[gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents:
6720
diff
changeset
|
217 GaimCallback cb, va_list args, void *data, void **return_val); |
7dba3e17cb21
[gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents:
6720
diff
changeset
|
218 void gaim_marshal_VOID__INT_INT( |
7dba3e17cb21
[gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents:
6720
diff
changeset
|
219 GaimCallback cb, va_list args, void *data, void **return_val); |
6485 | 220 void gaim_marshal_VOID__POINTER( |
221 GaimCallback cb, va_list args, void *data, void **return_val); | |
222 void gaim_marshal_VOID__POINTER_POINTER( | |
223 GaimCallback cb, va_list args, void *data, void **return_val); | |
224 void gaim_marshal_VOID__POINTER_POINTER_UINT( | |
225 GaimCallback cb, va_list args, void *data, void **return_val); | |
226 void gaim_marshal_VOID__POINTER_POINTER_POINTER( | |
227 GaimCallback cb, va_list args, void *data, void **return_val); | |
228 void gaim_marshal_VOID__POINTER_POINTER_POINTER_POINTER( | |
229 GaimCallback cb, va_list args, void *data, void **return_val); | |
6509 | 230 void gaim_marshal_VOID__POINTER_POINTER_POINTER_UINT( |
231 GaimCallback cb, va_list args, void *data, void **return_val); | |
6485 | 232 void gaim_marshal_VOID__POINTER_POINTER_POINTER_UINT_UINT( |
233 GaimCallback cb, va_list args, void *data, void **return_val); | |
234 | |
6822
7dba3e17cb21
[gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents:
6720
diff
changeset
|
235 void gaim_marshal_INT__INT( |
7dba3e17cb21
[gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents:
6720
diff
changeset
|
236 GaimCallback cb, va_list args, void *data, void **return_val); |
7dba3e17cb21
[gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents:
6720
diff
changeset
|
237 void gaim_marshal_INT__INT_INT( |
7dba3e17cb21
[gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents:
6720
diff
changeset
|
238 GaimCallback cb, va_list args, void *data, void **return_val); |
7dba3e17cb21
[gaim-migrate @ 7366]
Christian Hammond <chipx86@chipx86.com>
parents:
6720
diff
changeset
|
239 |
6485 | 240 void gaim_marshal_BOOLEAN__POINTER( |
241 GaimCallback cb, va_list args, void *data, void **return_val); | |
242 void gaim_marshal_BOOLEAN__POINTER_POINTER( | |
243 GaimCallback cb, va_list args, void *data, void **return_val); | |
6509 | 244 void gaim_marshal_BOOLEAN__POINTER_POINTER_POINTER( |
245 GaimCallback cb, va_list args, void *data, void **return_val); | |
246 void gaim_marshal_BOOLEAN__POINTER_POINTER_UINT( | |
247 GaimCallback cb, va_list args, void *data, void **return_val); | |
6485 | 248 void gaim_marshal_BOOLEAN__POINTER_POINTER_POINTER_UINT( |
249 GaimCallback cb, va_list args, void *data, void **return_val); | |
250 void gaim_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER( | |
251 GaimCallback cb, va_list args, void *data, void **return_val); | |
252 void gaim_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER_POINTER( | |
253 GaimCallback cb, va_list args, void *data, void **return_val); | |
254 | |
255 /*@}*/ | |
256 | |
257 #ifdef __cplusplus | |
258 } | |
259 #endif | |
260 | |
261 #endif /* _GAIM_SIGNAL_H_ */ |