Merges from Irssi CVS.
[crypto.git] / apps / irssi / src / core / expandos.c
index 777d50e1e38d61d565c3e0633cdd69f86a3cd341..5cec556185dbf64b6356b5c6545806c7fcd8fca1 100644 (file)
@@ -179,7 +179,8 @@ void expando_bind(const char *key, int funccount, SIGNAL_FUNC *funcs)
                func = arg < funccount ? funcs[arg] : NULL;
                if (func == NULL) func = funcs[EXPANDO_ARG_NONE];
 
-               signal_add_to_id(MODULE_NAME, 1, rec->signal_ids[n], func);
+               signal_add_full_id(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT,
+                                  rec->signal_ids[n], func, NULL);
        }
 }
 
@@ -208,7 +209,7 @@ void expando_unbind(const char *key, int funccount, SIGNAL_FUNC *funcs)
                func = arg < funccount ? funcs[arg] : NULL;
                if (func == NULL) func = funcs[EXPANDO_ARG_NONE];
 
-               signal_remove_id(rec->signal_ids[n], func);
+               signal_remove_id(rec->signal_ids[n], func, NULL);
        }
 }
 
@@ -431,8 +432,21 @@ static char *expando_sysarch(SERVER_REC *server, void *item, int *free_ret)
 /* Topic of active channel (or address of queried nick) */
 static char *expando_topic(SERVER_REC *server, void *item, int *free_ret)
 {
-       return IS_CHANNEL(item) ? CHANNEL(item)->topic :
-               IS_QUERY(item) ? QUERY(item)->address : "";
+       if (IS_CHANNEL(item))
+               return CHANNEL(item)->topic;
+       if (IS_QUERY(item)) {
+               QUERY_REC *query = QUERY(item);
+
+               if (query->server_tag == NULL)
+                       return "";
+
+                *free_ret = TRUE;
+               return query->address == NULL ?
+                       g_strdup_printf("(%s)", query->server_tag) :
+                       g_strdup_printf("%s (%s)", query->address,
+                                       query->server_tag);
+       }
+        return "";
 }
 
 /* Server tag */