summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/fe-common/irc/fe-irc-queries.c25
1 files changed, 23 insertions, 2 deletions
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);
+ }
}
}