From cca2d6a8dcd8cf497b5892fda14f408cfde38c13 Mon Sep 17 00:00:00 2001 From: Pekka Riikonen Date: Sat, 22 Jun 2002 09:42:16 +0000 Subject: [PATCH] Merged some fixes from c0ffee's silc-plugin. --- apps/irssi/src/silc/core/silc-channels.c | 2 ++ apps/irssi/src/silc/core/silc-expandos.c | 45 +++++++++++++++++++++--- 2 files changed, 43 insertions(+), 4 deletions(-) diff --git a/apps/irssi/src/silc/core/silc-channels.c b/apps/irssi/src/silc/core/silc-channels.c index afff90e6..f5b3bbaf 100644 --- a/apps/irssi/src/silc/core/silc-channels.c +++ b/apps/irssi/src/silc/core/silc-channels.c @@ -383,8 +383,10 @@ static void command_away(const char *data, SILC_SERVER_REC *server, } server->usermode_away = set; + g_free_and_null(server->away_reason); if (set) server->away_reason = g_strdup((char *)data); + signal_emit("away mode changed", 1, server); silc_command_exec(server, "UMODE", set ? "+g" : "-g"); diff --git a/apps/irssi/src/silc/core/silc-expandos.c b/apps/irssi/src/silc/core/silc-expandos.c index cecdfab1..cecf0138 100644 --- a/apps/irssi/src/silc/core/silc-expandos.c +++ b/apps/irssi/src/silc/core/silc-expandos.c @@ -30,6 +30,10 @@ #include "silc-queries.h" #include "silc-nicklist.h" +EXPANDO_FUNC old_expando_usermode, + old_expando_cumode, + old_expando_cumode_space; + /* User mode in active server */ static char *expando_usermode(SERVER_REC *server, void *item, int *free_ret) @@ -38,8 +42,12 @@ static char *expando_usermode(SERVER_REC *server, void *item, int *free_ret) static char modes[128], stat[128]; bool se; - if (!s) - return ""; + if (!s) { + if (old_expando_usermode) + return old_expando_usermode(server, item, free_ret); + else + return ""; + } memset(modes, 0, sizeof(modes)); memset(stat, 0, sizeof(stat)); @@ -78,6 +86,15 @@ static char *expando_usermode(SERVER_REC *server, void *item, int *free_ret) static char *expando_cumode(SERVER_REC *server, void *item, int *free_ret) { + SILC_SERVER_REC *s = SILC_SERVER(server); + + if (!s) { + if (old_expando_cumode) + return old_expando_cumode(server, item, free_ret); + else + return ""; + } + if (IS_SILC_CHANNEL(item) && CHANNEL(item)->ownnick) { SILC_NICK_REC *nick = (SILC_NICK_REC *)CHANNEL(item)->ownnick; return (nick->op && nick->founder) ? "*@" : @@ -90,17 +107,31 @@ static char *expando_cumode(SERVER_REC *server, void *item, int *free_ret) static char *expando_cumode_space(SERVER_REC *server, void *item, int *free_ret) { + SILC_SERVER_REC *s = SILC_SERVER(server); char *ret; - if (!IS_SILC_SERVER(server)) - return ""; + if (!s) { + if (old_expando_cumode_space) + return old_expando_cumode_space(server, item, free_ret); + else + return ""; + } ret = expando_cumode(server, item, free_ret); return *ret == '\0' ? " " : ret; } +static char *expando_silc_version(SERVER_REC *server, void *item, + int *free_ret) +{ + return ""; +} + void silc_expandos_init(void) { + old_expando_usermode = expando_find_long("usermode"); + old_expando_cumode = expando_find_long("cumode"); + old_expando_cumode_space = expando_find_long("cumode_space"); expando_create("usermode", expando_usermode, "window changed", EXPANDO_ARG_NONE, "window server changed", EXPANDO_ARG_WINDOW, @@ -120,4 +151,10 @@ void silc_expandos_deinit(void) expando_destroy("usermode", expando_usermode); expando_destroy("cumode", expando_cumode); expando_destroy("cumode_space", expando_cumode_space); + if (old_expando_usermode) + expando_create("usermode", old_expando_usermode, NULL); + if (old_expando_cumode) + expando_create("cumode", old_expando_cumode, NULL); + if (old_expando_cumode_space) + expando_create("cumode_space", old_expando_cumode_space, NULL); } -- 2.43.0