00001
00025 #ifndef _GAIM_SIGNAL_H_
00026 #define _GAIM_SIGNAL_H_
00027
00028 #include <glib.h>
00029 #include "value.h"
00030
00031 #define GAIM_CALLBACK(func) ((GaimCallback)func)
00032
00033 typedef void (*GaimCallback)(void);
00034 typedef void (*GaimSignalMarshalFunc)(GaimCallback cb, va_list args,
00035 void *data, void **return_val);
00036
00037 #ifdef __cplusplus
00038 extern "C" {
00039 #endif
00040
00041
00043
00061 gulong gaim_signal_register(void *instance, const char *signal,
00062 GaimSignalMarshalFunc marshal,
00063 GaimValue *ret_value, int num_values, ...);
00064
00071 void gaim_signal_unregister(void *instance, const char *signal);
00072
00078 void gaim_signals_unregister_by_instance(void *instance);
00079
00089 void gaim_signal_get_values(void *instance, const char *signal,
00090 GaimValue **ret_value,
00091 int *num_values, GaimValue ***values);
00092
00109 gulong gaim_signal_connect(void *instance, const char *signal,
00110 void *handle, GaimCallback func, void *data);
00111
00131 gulong gaim_signal_connect_vargs(void *instance, const char *signal,
00132 void *handle, GaimCallback func, void *data);
00133
00144 void gaim_signal_disconnect(void *instance, const char *signal,
00145 void *handle, GaimCallback func);
00146
00152 void gaim_signals_disconnect_by_handle(void *handle);
00153
00163 void gaim_signal_emit(void *instance, const char *signal, ...);
00164
00175 void gaim_signal_emit_vargs(void *instance, const char *signal, va_list args);
00176
00185 void *gaim_signal_emit_return_1(void *instance, const char *signal, ...);
00186
00196 void *gaim_signal_emit_vargs_return_1(void *instance, const char *signal,
00197 va_list args);
00198
00202 void gaim_signals_init();
00203
00207 void gaim_signals_uninit();
00208
00211
00213
00216 void gaim_marshal_VOID(
00217 GaimCallback cb, va_list args, void *data, void **return_val);
00218 void gaim_marshal_VOID__INT(
00219 GaimCallback cb, va_list args, void *data, void **return_val);
00220 void gaim_marshal_VOID__INT_INT(
00221 GaimCallback cb, va_list args, void *data, void **return_val);
00222 void gaim_marshal_VOID__POINTER(
00223 GaimCallback cb, va_list args, void *data, void **return_val);
00224 void gaim_marshal_VOID__POINTER_POINTER(
00225 GaimCallback cb, va_list args, void *data, void **return_val);
00226 void gaim_marshal_VOID__POINTER_POINTER_UINT(
00227 GaimCallback cb, va_list args, void *data, void **return_val);
00228 void gaim_marshal_VOID__POINTER_POINTER_POINTER(
00229 GaimCallback cb, va_list args, void *data, void **return_val);
00230 void gaim_marshal_VOID__POINTER_POINTER_POINTER_POINTER(
00231 GaimCallback cb, va_list args, void *data, void **return_val);
00232 void gaim_marshal_VOID__POINTER_POINTER_POINTER_UINT(
00233 GaimCallback cb, va_list args, void *data, void **return_val);
00234 void gaim_marshal_VOID__POINTER_POINTER_POINTER_UINT_UINT(
00235 GaimCallback cb, va_list args, void *data, void **return_val);
00236
00237 void gaim_marshal_INT__INT(
00238 GaimCallback cb, va_list args, void *data, void **return_val);
00239 void gaim_marshal_INT__INT_INT(
00240 GaimCallback cb, va_list args, void *data, void **return_val);
00241
00242 void gaim_marshal_BOOLEAN__POINTER(
00243 GaimCallback cb, va_list args, void *data, void **return_val);
00244 void gaim_marshal_BOOLEAN__POINTER_POINTER(
00245 GaimCallback cb, va_list args, void *data, void **return_val);
00246 void gaim_marshal_BOOLEAN__POINTER_POINTER_POINTER(
00247 GaimCallback cb, va_list args, void *data, void **return_val);
00248 void gaim_marshal_BOOLEAN__POINTER_POINTER_UINT(
00249 GaimCallback cb, va_list args, void *data, void **return_val);
00250 void gaim_marshal_BOOLEAN__POINTER_POINTER_POINTER_UINT(
00251 GaimCallback cb, va_list args, void *data, void **return_val);
00252 void gaim_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER(
00253 GaimCallback cb, va_list args, void *data, void **return_val);
00254 void gaim_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER_POINTER(
00255 GaimCallback cb, va_list args, void *data, void **return_val);
00256
00259 #ifdef __cplusplus
00260 }
00261 #endif
00262
00263 #endif