diff options
Diffstat (limited to 'src/fe-common/core/fe-channels.c')
-rw-r--r-- | src/fe-common/core/fe-channels.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/fe-common/core/fe-channels.c b/src/fe-common/core/fe-channels.c index 5b531c2e..9bc51f37 100644 --- a/src/fe-common/core/fe-channels.c +++ b/src/fe-common/core/fe-channels.c @@ -473,12 +473,14 @@ void fe_channels_nicklist(CHANNEL_REC *channel, int flags) NICK_REC *nick; GSList *tmp, *nicklist, *sorted; int nicks, normal, voices, halfops, ops; + const char *nick_flags; nicks = normal = voices = halfops = ops = 0; nicklist = nicklist_getnicks(channel); sorted = NULL; + nick_flags = channel->server->get_nick_flags(channel->server); - /* sort the nicklist */ + /* filter (for flags) and count ops, halfops, voices */ for (tmp = nicklist; tmp != NULL; tmp = tmp->next) { nick = tmp->data; @@ -501,11 +503,13 @@ void fe_channels_nicklist(CHANNEL_REC *channel, int flags) continue; } - sorted = g_slist_insert_sorted(sorted, nick, (GCompareFunc) - nicklist_compare); + sorted = g_slist_prepend(sorted, nick); } g_slist_free(nicklist); + /* sort the nicklist */ + sorted = g_slist_sort_with_data(sorted, (GCompareDataFunc) nicklist_compare, (void *)nick_flags); + /* display the nicks */ if ((flags & CHANNEL_NICKLIST_FLAG_COUNT) == 0) { printformat(channel->server, channel->visible_name, |