Frameworks/libpurple.framework/Versions/0.6.2/Headers/signals.h
author Zachary West <zacw@adium.im>
Fri Aug 21 13:25:11 2009 -0700 (2009-08-21)
changeset 2592 e8d15275025e
parent 2279 Frameworks/libpurple.framework/Versions/0.6.0/Headers/signals.h@5c0f96f647c6
permissions -rw-r--r--
im.pidgin.adium.1-4 at 267c6165e02e34318a1823960bd04c0639952f73
Evan@653
     1
/**
Evan@653
     2
 * @file signals.h Signal API
Evan@653
     3
 * @ingroup core
Evan@653
     4
 */
Evan@653
     5
Evan@653
     6
/* purple
Evan@653
     7
 *
Evan@653
     8
 * Purple is the legal property of its developers, whose names are too numerous
Evan@653
     9
 * to list here.  Please refer to the COPYRIGHT file distributed with this
Evan@653
    10
 * source distribution.
Evan@653
    11
 *
Evan@653
    12
 * This program is free software; you can redistribute it and/or modify
Evan@653
    13
 * it under the terms of the GNU General Public License as published by
Evan@653
    14
 * the Free Software Foundation; either version 2 of the License, or
Evan@653
    15
 * (at your option) any later version.
Evan@653
    16
 *
Evan@653
    17
 * This program is distributed in the hope that it will be useful,
Evan@653
    18
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Evan@653
    19
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Evan@653
    20
 * GNU General Public License for more details.
Evan@653
    21
 *
Evan@653
    22
 * You should have received a copy of the GNU General Public License
Evan@653
    23
 * along with this program; if not, write to the Free Software
Evan@653
    24
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
Evan@653
    25
 */
Evan@653
    26
#ifndef _PURPLE_SIGNALS_H_
Evan@653
    27
#define _PURPLE_SIGNALS_H_
Evan@653
    28
Evan@653
    29
#include <glib.h>
Evan@653
    30
#include "value.h"
Evan@653
    31
Evan@653
    32
#define PURPLE_CALLBACK(func) ((PurpleCallback)func)
Evan@653
    33
Evan@653
    34
typedef void (*PurpleCallback)(void);
Evan@653
    35
typedef void (*PurpleSignalMarshalFunc)(PurpleCallback cb, va_list args,
Evan@653
    36
									  void *data, void **return_val);
Evan@653
    37
Evan@653
    38
#ifdef __cplusplus
Evan@653
    39
extern "C" {
Evan@653
    40
#endif
Evan@653
    41
Evan@653
    42
/**************************************************************************/
Evan@653
    43
/** @name Signal API                                                      */
Evan@653
    44
/**************************************************************************/
Evan@653
    45
/*@{*/
Evan@653
    46
Evan@653
    47
/** The priority of a signal connected using purple_signal_connect().
Evan@653
    48
 *
Evan@653
    49
 *  @see purple_signal_connect_priority()
Evan@653
    50
 */
Evan@653
    51
#define PURPLE_SIGNAL_PRIORITY_DEFAULT     0
Evan@653
    52
/** The largest signal priority; signals with this priority will be called
Evan@653
    53
 *  <em>last</em>.  (This is highest as in numerical value, not as in order of
Evan@653
    54
 *  importance.)
Evan@653
    55
 *
Evan@653
    56
 *  @see purple_signal_connect_priority().
Evan@653
    57
 */
Evan@653
    58
#define PURPLE_SIGNAL_PRIORITY_HIGHEST  9999
Evan@653
    59
/** The smallest signal priority; signals with this priority will be called
Evan@653
    60
 *  <em>first</em>.  (This is lowest as in numerical value, not as in order of
Evan@653
    61
 *  importance.)
Evan@653
    62
 *
Evan@653
    63
 *  @see purple_signal_connect_priority().
Evan@653
    64
 */
Evan@653
    65
#define PURPLE_SIGNAL_PRIORITY_LOWEST  -9999
Evan@653
    66
Evan@653
    67
/**
Evan@653
    68
 * Registers a signal in an instance.
Evan@653
    69
 *
Evan@653
    70
 * @param instance   The instance to register the signal for.
Evan@653
    71
 * @param signal     The signal name.
Evan@653
    72
 * @param marshal    The marshal function.
Evan@653
    73
 * @param ret_value  The return value type, or NULL for no return value.
Evan@653
    74
 * @param num_values The number of values to be passed to the callbacks.
Evan@653
    75
 * @param ...        The values to pass to the callbacks.
Evan@653
    76
 *
Evan@653
    77
 * @return The signal ID local to that instance, or 0 if the signal
Evan@653
    78
 *         couldn't be registered.
Evan@653
    79
 *
Evan@653
    80
 * @see PurpleValue
Evan@653
    81
 */
Evan@653
    82
gulong purple_signal_register(void *instance, const char *signal,
Evan@653
    83
							PurpleSignalMarshalFunc marshal,
Evan@653
    84
							PurpleValue *ret_value, int num_values, ...);
Evan@653
    85
Evan@653
    86
/**
Evan@653
    87
 * Unregisters a signal in an instance.
Evan@653
    88
 *
Evan@653
    89
 * @param instance The instance to unregister the signal for.
Evan@653
    90
 * @param signal   The signal name.
Evan@653
    91
 */
Evan@653
    92
void purple_signal_unregister(void *instance, const char *signal);
Evan@653
    93
Evan@653
    94
/**
Evan@653
    95
 * Unregisters all signals in an instance.
Evan@653
    96
 *
Evan@653
    97
 * @param instance The instance to unregister the signal for.
Evan@653
    98
 */
Evan@653
    99
void purple_signals_unregister_by_instance(void *instance);
Evan@653
   100
Evan@653
   101
/**
Evan@653
   102
 * Returns a list of value types used for a signal.
Evan@653
   103
 *
Evan@653
   104
 * @param instance   The instance the signal is registered to.
Evan@653
   105
 * @param signal     The signal.
Evan@653
   106
 * @param ret_value  The return value from the last signal handler.
Evan@653
   107
 * @param num_values The returned number of values.
Evan@653
   108
 * @param values     The returned list of values.
Evan@653
   109
 */
Evan@653
   110
void purple_signal_get_values(void *instance, const char *signal,
Evan@653
   111
							PurpleValue **ret_value,
Evan@653
   112
							int *num_values, PurpleValue ***values);
Evan@653
   113
Evan@653
   114
/**
Evan@653
   115
 * Connects a signal handler to a signal for a particular object.
Evan@653
   116
 *
Evan@653
   117
 * Take care not to register a handler function twice. Purple will
Evan@653
   118
 * not correct any mistakes for you in this area.
Evan@653
   119
 *
Evan@653
   120
 * @param instance The instance to connect to.
Evan@653
   121
 * @param signal   The name of the signal to connect.
Evan@653
   122
 * @param handle   The handle of the receiver.
Evan@653
   123
 * @param func     The callback function.
Evan@653
   124
 * @param data     The data to pass to the callback function.
Evan@653
   125
 * @param priority The priority with which the handler should be called. Signal
Evan@653
   126
 *                 handlers are called in ascending numerical order of @a
Evan@653
   127
 *                 priority from #PURPLE_SIGNAL_PRIORITY_LOWEST to
Evan@653
   128
 *                 #PURPLE_SIGNAL_PRIORITY_HIGHEST.
Evan@653
   129
 *
Evan@653
   130
 * @return The signal handler ID.
Evan@653
   131
 *
Evan@653
   132
 * @see purple_signal_disconnect()
Evan@653
   133
 */
Evan@653
   134
gulong purple_signal_connect_priority(void *instance, const char *signal,
Evan@653
   135
	void *handle, PurpleCallback func, void *data, int priority);
Evan@653
   136
Evan@653
   137
/**
Evan@653
   138
 * Connects a signal handler to a signal for a particular object.
Evan@653
   139
 * (Its priority defaults to 0, aka #PURPLE_SIGNAL_PRIORITY_DEFAULT.)
Evan@1427
   140
 *
Evan@653
   141
 * Take care not to register a handler function twice. Purple will
Evan@653
   142
 * not correct any mistakes for you in this area.
Evan@653
   143
 *
Evan@653
   144
 * @param instance The instance to connect to.
Evan@653
   145
 * @param signal   The name of the signal to connect.
Evan@653
   146
 * @param handle   The handle of the receiver.
Evan@653
   147
 * @param func     The callback function.
Evan@653
   148
 * @param data     The data to pass to the callback function.
Evan@653
   149
 *
Evan@653
   150
 * @return The signal handler ID.
Evan@653
   151
 *
Evan@653
   152
 * @see purple_signal_disconnect()
Evan@653
   153
 */
Evan@653
   154
gulong purple_signal_connect(void *instance, const char *signal,
Evan@653
   155
	void *handle, PurpleCallback func, void *data);
Evan@653
   156
Evan@653
   157
/**
Evan@653
   158
 * Connects a signal handler to a signal for a particular object.
Evan@653
   159
 *
Evan@653
   160
 * The signal handler will take a va_args of arguments, instead of
Evan@653
   161
 * individual arguments.
Evan@653
   162
 *
Evan@653
   163
 * Take care not to register a handler function twice. Purple will
Evan@653
   164
 * not correct any mistakes for you in this area.
Evan@653
   165
 *
Evan@653
   166
 * @param instance The instance to connect to.
Evan@653
   167
 * @param signal   The name of the signal to connect.
Evan@653
   168
 * @param handle   The handle of the receiver.
Evan@653
   169
 * @param func     The callback function.
Evan@653
   170
 * @param data     The data to pass to the callback function.
Evan@653
   171
 * @param priority The priority with which the handler should be called. Signal
Evan@653
   172
 *                 handlers are called in ascending numerical order of @a
Evan@653
   173
 *                 priority from #PURPLE_SIGNAL_PRIORITY_LOWEST to
Evan@653
   174
 *                 #PURPLE_SIGNAL_PRIORITY_HIGHEST.
Evan@653
   175
 *
Evan@653
   176
 * @return The signal handler ID.
Evan@653
   177
 *
Evan@653
   178
 * @see purple_signal_disconnect()
Evan@653
   179
 */
Evan@653
   180
gulong purple_signal_connect_priority_vargs(void *instance, const char *signal,
Evan@653
   181
	void *handle, PurpleCallback func, void *data, int priority);
Evan@653
   182
Evan@653
   183
/**
Evan@653
   184
 * Connects a signal handler to a signal for a particular object.
Evan@653
   185
 * (Its priority defaults to 0, aka #PURPLE_SIGNAL_PRIORITY_DEFAULT.)
Evan@653
   186
 *
Evan@653
   187
 * The signal handler will take a va_args of arguments, instead of
Evan@653
   188
 * individual arguments.
Evan@653
   189
 *
Evan@653
   190
 * Take care not to register a handler function twice. Purple will
Evan@653
   191
 * not correct any mistakes for you in this area.
Evan@653
   192
 *
Evan@653
   193
 * @param instance The instance to connect to.
Evan@653
   194
 * @param signal   The name of the signal to connect.
Evan@653
   195
 * @param handle   The handle of the receiver.
Evan@653
   196
 * @param func     The callback function.
Evan@653
   197
 * @param data     The data to pass to the callback function.
Evan@653
   198
 *
Evan@653
   199
 * @return The signal handler ID.
Evan@653
   200
 *
Evan@653
   201
 * @see purple_signal_disconnect()
Evan@653
   202
 */
Evan@653
   203
gulong purple_signal_connect_vargs(void *instance, const char *signal,
Evan@653
   204
	void *handle, PurpleCallback func, void *data);
Evan@653
   205
Evan@653
   206
/**
Evan@653
   207
 * Disconnects a signal handler from a signal on an object.
Evan@653
   208
 *
Evan@653
   209
 * @param instance The instance to disconnect from.
Evan@653
   210
 * @param signal   The name of the signal to disconnect.
Evan@653
   211
 * @param handle   The handle of the receiver.
Evan@653
   212
 * @param func     The registered function to disconnect.
Evan@653
   213
 *
Evan@653
   214
 * @see purple_signal_connect()
Evan@653
   215
 */
Evan@653
   216
void purple_signal_disconnect(void *instance, const char *signal,
Evan@653
   217
							void *handle, PurpleCallback func);
Evan@653
   218
Evan@653
   219
/**
Evan@653
   220
 * Removes all callbacks associated with a receiver handle.
Evan@653
   221
 *
Evan@653
   222
 * @param handle The receiver handle.
Evan@653
   223
 */
Evan@653
   224
void purple_signals_disconnect_by_handle(void *handle);
Evan@653
   225
Evan@653
   226
/**
Evan@653
   227
 * Emits a signal.
Evan@653
   228
 *
Evan@653
   229
 * @param instance The instance emitting the signal.
Evan@653
   230
 * @param signal   The signal being emitted.
Evan@653
   231
 *
Evan@653
   232
 * @see purple_signal_connect()
Evan@653
   233
 * @see purple_signal_disconnect()
Evan@653
   234
 */
Evan@653
   235
void purple_signal_emit(void *instance, const char *signal, ...);
Evan@653
   236
Evan@653
   237
/**
Evan@653
   238
 * Emits a signal, using a va_list of arguments.
Evan@653
   239
 *
Evan@653
   240
 * @param instance The instance emitting the signal.
Evan@653
   241
 * @param signal   The signal being emitted.
Evan@653
   242
 * @param args     The arguments list.
Evan@653
   243
 *
Evan@653
   244
 * @see purple_signal_connect()
Evan@653
   245
 * @see purple_signal_disconnect()
Evan@653
   246
 */
Evan@653
   247
void purple_signal_emit_vargs(void *instance, const char *signal, va_list args);
Evan@653
   248
Evan@653
   249
/**
Evan@653
   250
 * Emits a signal and returns the first non-NULL return value.
Evan@653
   251
 *
Evan@653
   252
 * Further signal handlers are NOT called after a handler returns
Evan@653
   253
 * something other than NULL.
Evan@653
   254
 *
Evan@653
   255
 * @param instance The instance emitting the signal.
Evan@653
   256
 * @param signal   The signal being emitted.
Evan@653
   257
 *
Evan@653
   258
 * @return The first non-NULL return value
Evan@653
   259
 */
Evan@653
   260
void *purple_signal_emit_return_1(void *instance, const char *signal, ...);
Evan@653
   261
Evan@653
   262
/**
Evan@653
   263
 * Emits a signal and returns the first non-NULL return value.
Evan@653
   264
 *
Evan@653
   265
 * Further signal handlers are NOT called after a handler returns
Evan@653
   266
 * something other than NULL.
Evan@653
   267
 *
Evan@653
   268
 * @param instance The instance emitting the signal.
Evan@653
   269
 * @param signal   The signal being emitted.
Evan@653
   270
 * @param args     The arguments list.
Evan@653
   271
 *
Evan@653
   272
 * @return The first non-NULL return value
Evan@653
   273
 */
Evan@653
   274
void *purple_signal_emit_vargs_return_1(void *instance, const char *signal,
Evan@653
   275
									  va_list args);
Evan@653
   276
Evan@653
   277
/**
Evan@653
   278
 * Initializes the signals subsystem.
Evan@653
   279
 */
Evan@653
   280
void purple_signals_init(void);
Evan@653
   281
Evan@653
   282
/**
Evan@653
   283
 * Uninitializes the signals subsystem.
Evan@653
   284
 */
Evan@653
   285
void purple_signals_uninit(void);
Evan@653
   286
Evan@653
   287
/*@}*/
Evan@653
   288
Evan@653
   289
/**************************************************************************/
Evan@653
   290
/** @name Marshal Functions                                               */
Evan@653
   291
/**************************************************************************/
Evan@653
   292
/*@{*/
Evan@653
   293
Evan@653
   294
void purple_marshal_VOID(
Evan@653
   295
		PurpleCallback cb, va_list args, void *data, void **return_val);
Evan@653
   296
void purple_marshal_VOID__INT(
Evan@653
   297
		PurpleCallback cb, va_list args, void *data, void **return_val);
Evan@653
   298
void purple_marshal_VOID__INT_INT(
Evan@653
   299
		PurpleCallback cb, va_list args, void *data, void **return_val);
Evan@653
   300
void purple_marshal_VOID__POINTER(
Evan@653
   301
		PurpleCallback cb, va_list args, void *data, void **return_val);
Evan@653
   302
void purple_marshal_VOID__POINTER_UINT(
Evan@653
   303
		PurpleCallback cb, va_list args, void *data, void **return_val);
Evan@653
   304
void purple_marshal_VOID__POINTER_INT_INT(
Evan@653
   305
		PurpleCallback cb, va_list args, void *data, void **return_val);
Evan@653
   306
void purple_marshal_VOID__POINTER_INT_POINTER(
Evan@653
   307
		PurpleCallback cb, va_list args, void *data, void **return_val);
Evan@653
   308
void purple_marshal_VOID__POINTER_POINTER(
Evan@653
   309
		PurpleCallback cb, va_list args, void *data, void **return_val);
Evan@653
   310
void purple_marshal_VOID__POINTER_POINTER_UINT(
Evan@653
   311
		PurpleCallback cb, va_list args, void *data, void **return_val);
Evan@653
   312
void purple_marshal_VOID__POINTER_POINTER_UINT_UINT(
Evan@653
   313
		PurpleCallback cb, va_list args, void *data, void **return_val);
Evan@653
   314
void purple_marshal_VOID__POINTER_POINTER_POINTER(
Evan@653
   315
		PurpleCallback cb, va_list args, void *data, void **return_val);
Evan@653
   316
void purple_marshal_VOID__POINTER_POINTER_POINTER_POINTER(
Evan@653
   317
		PurpleCallback cb, va_list args, void *data, void **return_val);
Evan@653
   318
void purple_marshal_VOID__POINTER_POINTER_POINTER_POINTER_POINTER(
Evan@653
   319
		PurpleCallback cb, va_list args, void *data, void **return_val);
Evan@653
   320
void purple_marshal_VOID__POINTER_POINTER_POINTER_UINT(
Evan@653
   321
		PurpleCallback cb, va_list args, void *data, void **return_val);
Evan@653
   322
void purple_marshal_VOID__POINTER_POINTER_POINTER_POINTER_UINT(
Evan@653
   323
		PurpleCallback cb, va_list args, void *data, void **return_val);
Evan@653
   324
void purple_marshal_VOID__POINTER_POINTER_POINTER_UINT_UINT(
Evan@653
   325
		PurpleCallback cb, va_list args, void *data, void **return_val);
Evan@653
   326
Evan@653
   327
void purple_marshal_INT__INT(
Evan@653
   328
		PurpleCallback cb, va_list args, void *data, void **return_val);
Evan@653
   329
void purple_marshal_INT__INT_INT(
Evan@653
   330
		PurpleCallback cb, va_list args, void *data, void **return_val);
Evan@653
   331
void purple_marshal_INT__POINTER_POINTER(
Evan@653
   332
		PurpleCallback cb, va_list args, void *data, void **return_val);
Evan@653
   333
void purple_marshal_INT__POINTER_POINTER_POINTER_POINTER_POINTER(
Evan@653
   334
		PurpleCallback cb, va_list args, void *data, void **return_val);
Evan@653
   335
Evan@653
   336
void purple_marshal_BOOLEAN__POINTER(
Evan@653
   337
		PurpleCallback cb, va_list args, void *data, void **return_val);
Evan@653
   338
void purple_marshal_BOOLEAN__POINTER_POINTER(
Evan@653
   339
		PurpleCallback cb, va_list args, void *data, void **return_val);
Evan@653
   340
void purple_marshal_BOOLEAN__POINTER_POINTER_POINTER(
Evan@653
   341
		PurpleCallback cb, va_list args, void *data, void **return_val);
Evan@653
   342
void purple_marshal_BOOLEAN__POINTER_POINTER_UINT(
Evan@653
   343
		PurpleCallback cb, va_list args, void *data, void **return_val);
Evan@653
   344
void purple_marshal_BOOLEAN__POINTER_POINTER_POINTER_UINT(
Evan@653
   345
		PurpleCallback cb, va_list args, void *data, void **return_val);
Evan@653
   346
void purple_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER(
Evan@653
   347
		PurpleCallback cb, va_list args, void *data, void **return_val);
Evan@653
   348
void purple_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER_POINTER(
Evan@653
   349
		PurpleCallback cb, va_list args, void *data, void **return_val);
Evan@653
   350
void purple_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER_UINT(
Evan@653
   351
		PurpleCallback cb, va_list args, void *data, void **return_val);
zacw@2279
   352
void purple_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER_POINTER_POINTER(
zacw@2279
   353
		PurpleCallback cb, va_list args, void *data, void **return_val);
Evan@653
   354
Evan@653
   355
void purple_marshal_BOOLEAN__INT_POINTER(
Evan@653
   356
		PurpleCallback cb, va_list args, void *data, void **return_val);
Evan@653
   357
Evan@653
   358
void purple_marshal_POINTER__POINTER_INT(
Evan@653
   359
		PurpleCallback cb, va_list args, void *data, void **return_val);
Evan@653
   360
void purple_marshal_POINTER__POINTER_INT64(
Evan@653
   361
		PurpleCallback cb, va_list args, void *data, void **return_val);
Evan@653
   362
void purple_marshal_POINTER__POINTER_INT_BOOLEAN(
Evan@653
   363
		PurpleCallback cb, va_list args, void *data, void **return_val);
Evan@653
   364
void purple_marshal_POINTER__POINTER_INT64_BOOLEAN(
Evan@653
   365
		PurpleCallback cb, va_list args, void *data, void **return_val);
Evan@653
   366
void purple_marshal_POINTER__POINTER_POINTER(
Evan@653
   367
		PurpleCallback cb, va_list args, void *data, void **return_val);
Evan@653
   368
/*@}*/
Evan@653
   369
Evan@653
   370
#ifdef __cplusplus
Evan@653
   371
}
Evan@653
   372
#endif
Evan@653
   373
Evan@653
   374
#endif /* _PURPLE_SIGNALS_H_ */