diff options
-rw-r--r-- | irc.h | 4 | ||||
-rw-r--r-- | irc_channel.c | 9 | ||||
-rw-r--r-- | irc_im.c | 11 |
3 files changed, 21 insertions, 3 deletions
@@ -1,7 +1,7 @@ /********************************************************************\ * BitlBee -- An IRC to other IM-networks gateway * * * - * Copyright 2002-2004 Wilmer van der Gaast and others * + * Copyright 2002-2010 Wilmer van der Gaast and others * \********************************************************************/ /* The IRC-based UI (for now the only one) */ @@ -107,7 +107,7 @@ typedef struct irc_user char *host; char *fullname; - /* Nickname in lowercase for case sensitive searches */ + /* Nickname in lowercase for case insensitive searches */ char *key; irc_user_flags_t flags; diff --git a/irc_channel.c b/irc_channel.c index 5d504f66..7d805014 100644 --- a/irc_channel.c +++ b/irc_channel.c @@ -116,6 +116,7 @@ irc_channel_t *irc_channel_get( irc_t *irc, char *id ) int irc_channel_free( irc_channel_t *ic ) { irc_t *irc = ic->irc; + GSList *l; if( ic->flags & IRC_CHANNEL_JOINED ) irc_channel_del_user( ic, irc->user, IRC_CDU_KICK, "Cleaning up channel" ); @@ -133,6 +134,14 @@ int irc_channel_free( irc_channel_t *ic ) ic->users = g_slist_remove( ic->users, ic->users->data ); } + for( l = irc->users; l; l = l->next ) + { + irc_user_t *iu = l->data; + + if( iu->last_channel == ic ) + iu->last_channel = irc->default_channel; + } + g_free( ic->name ); g_free( ic->topic ); g_free( ic->topic_who ); @@ -209,13 +209,22 @@ static gboolean bee_irc_user_msg( bee_t *bee, bee_user_t *bu, const char *msg, t irc_user_t *iu = (irc_user_t *) bu->ui_data; char *dst, *prefix = NULL; char *wrapped, *ts = NULL; + irc_channel_t *ic = NULL; if( sent_at > 0 && set_getbool( &irc->b->set, "display_timestamps" ) ) ts = irc_format_timestamp( irc, sent_at ); if( iu->last_channel ) { - dst = iu->last_channel->name; + if( iu->last_channel->flags & IRC_CHANNEL_JOINED ) + ic = iu->last_channel; + else if( irc->default_channel->flags & IRC_CHANNEL_JOINED ) + ic = irc->default_channel; + } + + if( ic ) + { + dst = ic->name; prefix = g_strdup_printf( "%s%s%s", irc->user->nick, set_getstr( &bee->set, "to_char" ), ts ? : "" ); } else |