From: Pekka Riikonen Date: Sat, 13 Apr 2002 06:18:39 +0000 (+0000) Subject: Merges bugfixes from trunk. X-Git-Tag: silc.client.0.8.6~4 X-Git-Url: http://git.silcnet.org/gitweb/?a=commitdiff_plain;h=190cb46e402c8d9f44157bb603c3af24af3e3bfa;hp=20cca7bd14ffab6949f409af5835192864ca2fe5;p=silc.git Merges bugfixes from trunk. --- diff --git a/apps/irssi/src/fe-common/core/fe-exec.c b/apps/irssi/src/fe-common/core/fe-exec.c index 80972634..033e6be6 100644 --- a/apps/irssi/src/fe-common/core/fe-exec.c +++ b/apps/irssi/src/fe-common/core/fe-exec.c @@ -28,6 +28,9 @@ #include "misc.h" #include "levels.h" +#include "channels.h" +#include "queries.h" + #include "printtext.h" #include "fe-exec.h" #include "fe-windows.h" @@ -370,7 +373,7 @@ static void handle_exec(const char *args, GHashTable *optlist, { PROCESS_REC *rec; char *target, *level; - int notice, signum, interactive; + int notice, signum, interactive, target_nick, target_channel; /* check that there's no unknown options. we allowed them because signals can be used as options, but there should be @@ -403,11 +406,14 @@ static void handle_exec(const char *args, GHashTable *optlist, return; /* common options */ + target_channel = target_nick = FALSE; if (g_hash_table_lookup(optlist, "out") != NULL) { /* redirect output to active channel/query */ if (item == NULL) cmd_return_error(CMDERR_NOT_JOINED); - target = item->name; + target = item->name; + target_channel = IS_CHANNEL(item); + target_nick = IS_QUERY(item); } else if (g_hash_table_lookup(optlist, "msg") != NULL) { /* redirect output to /msg */ target = g_hash_table_lookup(optlist, "msg"); @@ -487,6 +493,8 @@ static void handle_exec(const char *args, GHashTable *optlist, rec->id = process_get_new_id(); rec->target = g_strdup(target); rec->target_win = active_win; + rec->target_channel = target_channel; + rec->target_nick = target_nick; rec->args = g_strdup(args); rec->notice = notice; rec->silent = g_hash_table_lookup(optlist, "-") != NULL; @@ -572,7 +580,9 @@ static void sig_exec_input(PROCESS_REC *rec, const char *text) server = item != NULL ? item->server : active_win->active_server; - str = g_strconcat(rec->target, " ", text, NULL); + str = g_strconcat(rec->target_nick ? "-nick " : + rec->target_channel ? "-channel " : "", + rec->target, " ", text, NULL); signal_emit(rec->notice ? "command notice" : "command msg", 3, str, server, item); g_free(str); diff --git a/apps/irssi/src/fe-common/core/fe-exec.h b/apps/irssi/src/fe-common/core/fe-exec.h index bebd1f82..a3b7edee 100644 --- a/apps/irssi/src/fe-common/core/fe-exec.h +++ b/apps/irssi/src/fe-common/core/fe-exec.h @@ -38,6 +38,8 @@ struct PROCESS_REC { unsigned int shell:1; /* start the program via /bin/sh */ unsigned int notice:1; /* send text with /notice, not /msg if target is set */ unsigned int silent:1; /* don't print "process exited with level xx" */ + unsigned int target_channel:1; /* target is a channel */ + unsigned int target_nick:1; /* target is a nick */ }; extern GSList *processes; diff --git a/apps/irssi/src/fe-common/core/fe-windows.c b/apps/irssi/src/fe-common/core/fe-windows.c index 38dd22fe..2370facb 100644 --- a/apps/irssi/src/fe-common/core/fe-windows.c +++ b/apps/irssi/src/fe-common/core/fe-windows.c @@ -160,6 +160,9 @@ void window_set_active(WINDOW_REC *window) void window_change_server(WINDOW_REC *window, void *server) { + if (server != NULL && SERVER(server)->disconnected) + return; + window->active_server = server; signal_emit("window server changed", 2, window, server); }