Mercurial > hg
changeset 1803:7d3060070d10
Sort roster unread list by UI (attention) priority
author | Mikael Berthe <mikael@lilotux.net> |
---|---|
date | Sun, 21 Mar 2010 15:13:48 +0100 |
parents | b135572fcd26 |
children | 35a1250c111a |
files | mcabber/mcabber/roster.c |
diffstat | 1 files changed, 13 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/mcabber/mcabber/roster.c Sun Mar 21 15:13:33 2010 +0100 +++ b/mcabber/mcabber/roster.c Sun Mar 21 15:13:48 2010 +0100 @@ -357,6 +357,11 @@ return p_group; } +// Comparison function used to sort the unread list by ui (attn) priority +static gint _roster_compare_uiprio(roster *a, roster *b) { + return (b->ui_prio - a->ui_prio); +} + // Returns a pointer to the new user, or existing user with that name // Note: if onserver is -1, the flag won't be changed. GSList *roster_add_user(const char *jid, const char *name, const char *group, @@ -416,7 +421,8 @@ if (unread_jid_del(jid)) { roster_usr->flags |= ROSTER_FLAG_MSG; // Append the roster_usr to unread_list - unread_list = g_slist_append(unread_list, roster_usr); + unread_list = g_slist_insert_sorted(unread_list, roster_usr, + (GCompareFunc)&_roster_compare_uiprio); } roster_usr->type = type; roster_usr->subscription = esub; @@ -606,7 +612,8 @@ roster_usr->flags |= ROSTER_FLAG_MSG; // Append the roster_usr to unread_list, but avoid duplicates if (!g_slist_find(unread_list, roster_usr)) - unread_list = g_slist_append(unread_list, roster_usr); + unread_list = g_slist_insert_sorted(unread_list, roster_usr, + (GCompareFunc)&_roster_compare_uiprio); } else { if (roster_usr->flags & ROSTER_FLAG_MSG) unread_list_modified = TRUE; @@ -640,7 +647,8 @@ roster_grp->flags |= ROSTER_FLAG_MSG; // group // Append the roster_usr to unread_list, but avoid duplicates if (!g_slist_find(unread_list, roster_usr)) - unread_list = g_slist_append(unread_list, roster_usr); + unread_list = g_slist_insert_sorted(unread_list, roster_usr, + (GCompareFunc)&_roster_compare_uiprio); } else { // Message flag is FALSE. guint msg = FALSE; @@ -715,6 +723,8 @@ newval = value; roster_usr->ui_prio = newval; + unread_list = g_slist_sort(unread_list, + (GCompareFunc)&_roster_compare_uiprio); } guint roster_getuiprio(const char *jid, guint special)