diff --git a/src/fe-common/irc/fe-irc-queries.c b/src/fe-common/irc/fe-irc-queries.c index fee82947..c35e283f 100644 --- a/src/fe-common/irc/fe-irc-queries.c +++ b/src/fe-common/irc/fe-irc-queries.c @@ -42,6 +42,22 @@ static QUERY_REC *query_find_address(SERVER_REC *server, const char *address) return NULL; } +static int have_channel_with_nicks(SERVER_REC *server, const char *nick1, + const char *nick2) +{ + GSList *tmp; + + for (tmp = server->channels; tmp != NULL; tmp = tmp->next) { + CHANNEL_REC *channel = tmp->data; + + if (nicklist_find(channel, nick1) != NULL && + nicklist_find(channel, nick2) != NULL) + return TRUE; + } + + return FALSE; +} + static void event_privmsg(SERVER_REC *server, const char *data, const char *nick, const char *address) { @@ -59,8 +75,13 @@ static void event_privmsg(SERVER_REC *server, const char *data, address. it was probably a nick change or reconnect to server, so rename the query. */ query = query_find_address(server, address); - if (query != NULL) - query_change_nick(query, nick); + if (query != NULL) { + /* make sure the old and new nicks aren't on the + same channel - happens with eg. www gateways + and such.. */ + if (!have_channel_with_nicks(server, nick, query->name)) + query_change_nick(query, nick); + } } }