X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=apps%2Firssi%2Fsrc%2Fperl%2Ftextui%2FStatusbar.xs;fp=apps%2Firssi%2Fsrc%2Fperl%2Ftextui%2FStatusbar.xs;h=0000000000000000000000000000000000000000;hb=72c2de619079457f7a68100eb13385275a424a23;hp=522a93ee6eadb5e83ceb736f0b9844bd87407bc0;hpb=e7b6c157b80152bf9fb9266e6bdd93f9fb0db776;p=runtime.git diff --git a/apps/irssi/src/perl/textui/Statusbar.xs b/apps/irssi/src/perl/textui/Statusbar.xs deleted file mode 100644 index 522a93ee..00000000 --- a/apps/irssi/src/perl/textui/Statusbar.xs +++ /dev/null @@ -1,165 +0,0 @@ -#include "module.h" - -static GHashTable *perl_sbar_defs; - -static int check_sbar_destroy(char *key, char *value, char *script) -{ - if (strncmp(value, script, strlen(script)) == 0 && - value[strlen(script)] == ':') { - statusbar_item_unregister(key); - g_free(key); - g_free(value); - return TRUE; - } - - return FALSE; -} - -static void script_unregister_statusbars(PERL_SCRIPT_REC *script) -{ - g_hash_table_foreach_remove(perl_sbar_defs, - (GHRFunc) check_sbar_destroy, - script->package); -} - -void perl_statusbar_init(void) -{ - perl_sbar_defs = g_hash_table_new((GHashFunc) g_str_hash, - (GCompareFunc) g_str_equal); - signal_add("script destroyed", (SIGNAL_FUNC) script_unregister_statusbars); -} - -static void statusbar_item_def_destroy(void *key, void *value) -{ - statusbar_item_unregister(key); - g_free(key); - g_free(value); -} - -void perl_statusbar_deinit(void) -{ - signal_remove("script destroyed", (SIGNAL_FUNC) script_unregister_statusbars); - - g_hash_table_foreach(perl_sbar_defs, - (GHFunc) statusbar_item_def_destroy, NULL); - g_hash_table_destroy(perl_sbar_defs); -} - -static void perl_statusbar_event(char *function, SBAR_ITEM_REC *item, - int get_size_only) -{ - dSP; - int retcount; - SV *item_sv, **sv; - HV *hv; - - ENTER; - SAVETMPS; - - PUSHMARK(SP); - item_sv = plain_bless(item, "Irssi::TextUI::StatusbarItem"); - XPUSHs(sv_2mortal(item_sv)); - XPUSHs(sv_2mortal(newSViv(get_size_only))); - PUTBACK; - - retcount = perl_call_pv(function, G_EVAL|G_DISCARD); - SPAGAIN; - - if (SvTRUE(ERRSV)) { - PERL_SCRIPT_REC *script; - char *package; - - package = perl_function_get_package(function); - script = perl_script_find_package(package); - g_free(package); - - if (script != NULL) { - /* make sure we don't get back here */ - script_unregister_statusbars(script); - } - signal_emit("script error", 2, script, SvPV(ERRSV, PL_na)); - } else { - /* min_size and max_size can be changed, move them to SBAR_ITEM_REC */ - hv = hvref(item_sv); - if (hv != NULL) { - sv = hv_fetch(hv, "min_size", 8, 0); - if (sv != NULL) item->min_size = SvIV(*sv); - sv = hv_fetch(hv, "max_size", 8, 0); - if (sv != NULL) item->max_size = SvIV(*sv); - } - } - - PUTBACK; - FREETMPS; - LEAVE; -} - - -static void sig_perl_statusbar(SBAR_ITEM_REC *item, int get_size_only) -{ - char *function; - - function = g_hash_table_lookup(perl_sbar_defs, item->config->name); - if (function != NULL) - perl_statusbar_event(function, item, get_size_only); - else { - /* use default function - this shouldn't actually happen.. */ - statusbar_item_default_handler(item, get_size_only, NULL, "", TRUE); - } -} - -MODULE = Irssi::TextUI::Statusbar PACKAGE = Irssi -PROTOTYPES: ENABLE - -void -statusbar_item_register(name, value, func = NULL) - char *name - char *value - char *func -CODE: - statusbar_item_register(name, value, func == NULL || *func == '\0' ? NULL : sig_perl_statusbar); - if (func != NULL) { - g_hash_table_insert(perl_sbar_defs, g_strdup(name), - g_strdup_printf("%s::%s", perl_get_package(), func)); - } - -void -statusbar_item_unregister(name) - char *name -PREINIT: - gpointer key, value; -CODE: - if (g_hash_table_lookup_extended(perl_sbar_defs, name, &key, &value)) { - g_hash_table_remove(perl_sbar_defs, name); - g_free(key); - g_free(value); - } - statusbar_item_unregister(name); - -void -statusbar_items_redraw(name) - char *name - -void -statusbars_recreate_items() - -#******************************* -MODULE = Irssi::TextUI::Statusbar PACKAGE = Irssi::TextUI::StatusbarItem PREFIX = statusbar_item_ -#******************************* - -void -statusbar_item_default_handler(item, get_size_only, str, data, escape_vars = TRUE) - Irssi::TextUI::StatusbarItem item - int get_size_only - char *str - char *data - int escape_vars -PREINIT: - HV *hv; -CODE: - statusbar_item_default_handler(item, get_size_only, - *str == '\0' ? NULL : str, - data, escape_vars); - hv = hvref(ST(0)); - hv_store(hv, "min_size", 8, newSViv(item->min_size), 0); - hv_store(hv, "max_size", 8, newSViv(item->max_size), 0);