changeset 1809:eef8c9fff727

Hopefully fix issue with hook-unread-list-change
author Mikael Berthe <mikael@lilotux.net>
date Sun, 21 Mar 2010 18:12:34 +0100
parents 7a1c40549291
children 8c2651fc217a
files mcabber/mcabber/roster.c
diffstat 1 files changed, 51 insertions(+), 43 deletions(-) [+]
line wrap: on
line diff
--- a/mcabber/mcabber/roster.c	Sun Mar 21 15:46:50 2010 +0100
+++ b/mcabber/mcabber/roster.c	Sun Mar 21 18:12:34 2010 +0100
@@ -590,6 +590,55 @@
     roster_usr->flags &= ~flags;
 }
 
+//  roster_unread_count()
+guint roster_unread_count(void)
+{
+  guint unread_count = 0;
+#ifdef MODULES_ENABLE
+  gpointer unread_ptr, first_unread;
+  guint muc_unread = 0, muc_attention = 0;
+  guint attention_count = 0;
+
+  unread_ptr = first_unread = unread_msg(NULL);
+  if (first_unread) {
+    do {
+      guint type = buddy_gettype(unread_ptr);
+      unread_count++;
+
+      if (type & ROSTER_TYPE_ROOM) {
+        muc_unread++;
+        if (buddy_getuiprio(unread_ptr) >= ROSTER_UI_PRIO_MUC_HL_MESSAGE)
+          muc_attention++;
+      } else {
+        if (buddy_getuiprio(unread_ptr) >= ROSTER_UI_PRIO_ATTENTION_MESSAGE)
+          attention_count++;
+      }
+      unread_ptr = unread_msg(unread_ptr);
+    } while (unread_ptr && unread_ptr != first_unread);
+  }
+
+  {
+    gchar *str_unread = g_strdup_printf("%u", unread_count);
+    gchar *str_attention = g_strdup_printf("%u", attention_count);
+    gchar *str_muc_unread = g_strdup_printf("%u", muc_unread);
+    gchar *str_muc_attention = g_strdup_printf("%u", muc_attention);
+    hk_arg_t args[] = {
+      { "unread", str_unread },               // All unread
+      { "attention", str_attention },         // Attention (private)
+      { "muc_unread", str_muc_unread },       // MUC unread
+      { "muc_attention", str_muc_attention }, // MUC attention (highlight)
+      { NULL, NULL },
+    };
+    hk_run_handlers(HOOK_UNREAD_LIST_CHANGE, args);
+    g_free(str_unread);
+    g_free(str_attention);
+    g_free(str_muc_unread);
+    g_free(str_muc_attention);
+  }
+#endif
+  return unread_count;
+}
+
 //  roster_msg_setflag()
 // Set the ROSTER_FLAG_MSG to the given value for the given jid.
 // It will update the buddy's group message flag.
@@ -691,49 +740,7 @@
     hlog_save_state();
 
 #ifdef MODULES_ENABLE
-    {
-      gpointer unread_ptr, first_unread;
-      guint muc_unread = 0, muc_attention = 0;
-      guint attention_count = 0;
-      unread_count = 0;
-
-      unread_ptr = first_unread = unread_msg(NULL);
-      if (first_unread) {
-        do {
-          guint type = buddy_gettype(unread_ptr);
-          unread_count++;
-
-          if (type & ROSTER_TYPE_ROOM) {
-            muc_unread++;
-            if (buddy_getuiprio(unread_ptr) >= ROSTER_UI_PRIO_MUC_HL_MESSAGE)
-                muc_attention++;
-          } else {
-            if (buddy_getuiprio(unread_ptr) >= ROSTER_UI_PRIO_ATTENTION_MESSAGE)
-              attention_count++;
-          }
-          unread_ptr = unread_msg(unread_ptr);
-        } while (unread_ptr && unread_ptr != first_unread);
-      }
-
-      {
-        gchar *str_unread = g_strdup_printf("%u", unread_count);
-        gchar *str_attention = g_strdup_printf("%u", attention_count);
-        gchar *str_muc_unread = g_strdup_printf("%u", muc_unread);
-        gchar *str_muc_attention = g_strdup_printf("%u", muc_attention);
-        hk_arg_t args[] = {
-          { "unread", str_unread },               // All unread
-          { "attention", str_attention },         // Attention (private)
-          { "muc_unread", str_muc_unread },       // MUC unread
-          { "muc_attention", str_muc_attention }, // MUC attention (highlight)
-          { NULL, NULL },
-        };
-        hk_run_handlers(HOOK_UNREAD_LIST_CHANGE, args);
-        g_free(str_unread);
-        g_free(str_attention);
-        g_free(str_muc_unread);
-        g_free(str_muc_attention);
-      }
-    }
+    unread_count = roster_unread_count();
 #else
     unread_count = g_slist_length(unread_list);
 #endif
@@ -774,6 +781,7 @@
   roster_usr->ui_prio = newval;
   unread_list = g_slist_sort(unread_list,
                              (GCompareFunc)&_roster_compare_uiprio);
+  roster_unread_count();
 }
 
 guint roster_getuiprio(const char *jid, guint special)