mirror of
https://github.com/irssi/irssi.git
synced 2024-12-04 14:46:39 -05:00
added signal_add_to_id()
git-svn-id: http://svn.irssi.org/repos/irssi/trunk@963 dbcabf3a-b0e7-0310-adc4-f8d773084564
This commit is contained in:
parent
1c9f45b4a4
commit
5f941b8fa6
@ -39,31 +39,37 @@ typedef struct {
|
||||
|
||||
static GMemChunk *signals_chunk;
|
||||
static GHashTable *signals;
|
||||
static int first_signal_id, last_signal_id;
|
||||
static SIGNAL_REC *first_signal_rec, *last_signal_rec; /* "signal" and "last signal" */
|
||||
static SIGNAL_REC *current_emitted_signal;
|
||||
|
||||
void signal_add_to(const char *module, int pos,
|
||||
const char *signal, SIGNAL_FUNC func)
|
||||
{
|
||||
g_return_if_fail(signal != NULL);
|
||||
|
||||
signal_add_to_id(module, pos, signal_get_uniq_id(signal), func);
|
||||
}
|
||||
|
||||
/* bind a signal */
|
||||
void signal_add_to(const char *module, int pos, const char *signal,
|
||||
SIGNAL_FUNC func)
|
||||
void signal_add_to_id(const char *module, int pos,
|
||||
int signal_id, SIGNAL_FUNC func)
|
||||
{
|
||||
SIGNAL_REC *rec;
|
||||
int signal_id;
|
||||
|
||||
g_return_if_fail(signal != NULL);
|
||||
g_return_if_fail(signal_id >= 0);
|
||||
g_return_if_fail(func != NULL);
|
||||
g_return_if_fail(pos >= 0 && pos < SIGNAL_LISTS);
|
||||
|
||||
signal_id = signal_get_uniq_id(signal);
|
||||
|
||||
rec = g_hash_table_lookup(signals, GINT_TO_POINTER(signal_id));
|
||||
if (rec == NULL) {
|
||||
rec = g_mem_chunk_alloc0(signals_chunk);
|
||||
g_hash_table_insert(signals, GINT_TO_POINTER(signal_id), rec);
|
||||
}
|
||||
|
||||
if (strcmp(signal, "signal") == 0)
|
||||
if (signal_id == first_signal_id)
|
||||
first_signal_rec = rec;
|
||||
else if (strcmp(signal, "last signal") == 0)
|
||||
else if (signal_id == last_signal_id)
|
||||
last_signal_rec = rec;
|
||||
|
||||
if (rec->siglist[pos] == NULL) {
|
||||
@ -352,6 +358,8 @@ void signals_init(void)
|
||||
|
||||
first_signal_rec = NULL;
|
||||
last_signal_rec = NULL;
|
||||
first_signal_id = signal_get_uniq_id("signal");
|
||||
last_signal_id = signal_get_uniq_id("last signal");
|
||||
}
|
||||
|
||||
static void signal_free(void *key, SIGNAL_REC *rec)
|
||||
|
@ -1,7 +1,9 @@
|
||||
#ifndef __SIGNAL_H
|
||||
#define __SIGNAL_H
|
||||
|
||||
typedef void (*SIGNAL_FUNC) (gconstpointer, gconstpointer, gconstpointer, gconstpointer, gconstpointer, gconstpointer, gconstpointer);
|
||||
typedef void (*SIGNAL_FUNC) (gconstpointer, gconstpointer,
|
||||
gconstpointer, gconstpointer,
|
||||
gconstpointer, gconstpointer, gconstpointer);
|
||||
|
||||
void signals_init(void);
|
||||
void signals_deinit(void);
|
||||
@ -11,7 +13,10 @@ void signals_deinit(void);
|
||||
module_get_uniq_id_str("signals", signal)
|
||||
|
||||
/* bind a signal */
|
||||
void signal_add_to(const char *module, int pos, const char *signal, SIGNAL_FUNC func);
|
||||
void signal_add_to(const char *module, int pos,
|
||||
const char *signal, SIGNAL_FUNC func);
|
||||
void signal_add_to_id(const char *module, int pos,
|
||||
int signal, SIGNAL_FUNC func);
|
||||
#define signal_add(a, b) signal_add_to(MODULE_NAME, 1, a, b)
|
||||
#define signal_add_first(a, b) signal_add_to(MODULE_NAME, 0, a, b)
|
||||
#define signal_add_last(a, b) signal_add_to(MODULE_NAME, 2, a, b)
|
||||
|
Loading…
Reference in New Issue
Block a user