static void statusbar_item_default_signals(SBAR_ITEM_REC *item) { SIGNAL_FUNC func; GSList *list; const char *value; void *signal_id; int *signals, *pos; value = statusbar_item_get_value(item); if (value == NULL) return; signals = special_vars_get_signals(value); if (signals == NULL) return; for (pos = signals; *pos != -1; pos += 2) { /* update signal -> item mappings */ signal_id = GINT_TO_POINTER(*pos); list = g_hash_table_lookup(sbar_signal_items, signal_id); if (list == NULL) { switch (pos[1]) { case EXPANDO_ARG_NONE: func = (SIGNAL_FUNC) statusbar_update_item; break; case EXPANDO_ARG_SERVER: func = (SIGNAL_FUNC) statusbar_update_server; break; case EXPANDO_ARG_WINDOW: func = (SIGNAL_FUNC) statusbar_update_window; break; case EXPANDO_ARG_WINDOW_ITEM: func = (SIGNAL_FUNC) statusbar_update_window_item; break; default: func = NULL; break; } if (func != NULL) { signal_add_full_id(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, *pos, func, NULL); } } if (g_slist_find(list, item) == NULL) list = g_slist_append(list, item); g_hash_table_insert(sbar_signal_items, signal_id, list); /* update item -> signal mappings */ list = g_hash_table_lookup(sbar_item_signals, item); if (g_slist_find(list, signal_id) == NULL) list = g_slist_append(list, signal_id); g_hash_table_insert(sbar_item_signals, item, list); } g_free(signals); }
static void perl_signal_add_full_int(const char *signal, SV *func, int priority, int command, const char *category) { PERL_SCRIPT_REC *script; PERL_SIGNAL_REC *rec; GSList **siglist; void *signal_idp; g_return_if_fail(signal != NULL); g_return_if_fail(func != NULL); script = perl_script_find_package(perl_get_package()); g_return_if_fail(script != NULL); rec = g_new(PERL_SIGNAL_REC, 1); rec->script = script; rec->signal_id = signal_get_uniq_id(signal); rec->signal = g_strdup(signal); rec->func = perl_func_sv_inc(func, perl_get_package()); if (command || strncmp(signal, "command ", 8) == 0) { /* we used Irssi::signal_add() instead of Irssi::command_bind() - oh well, allow this.. */ command_bind_full(MODULE_NAME, priority, signal+8, -1, category, sig_func, rec); } else { signal_add_full_id(MODULE_NAME, priority, rec->signal_id, sig_func, rec); } signal_idp = GINT_TO_POINTER(rec->signal_id); siglist = g_hash_table_lookup(signals, signal_idp); if (siglist == NULL) { siglist = g_new0(GSList *, 1); g_hash_table_insert(signals, signal_idp, siglist); }