changeset 1088:c55b24818546

Enable jid completion for hidden buddies (e.g. offline contacts) Works for hidden groups too.
author Mikael Berthe <mikael@lilotux.net>
date Wed, 06 Dec 2006 23:18:36 +0100
parents ee85cff7dbab
children a61c3311a5bb
files mcabber/src/roster.c
diffstat 1 files changed, 21 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/mcabber/src/roster.c	Wed Dec 06 22:35:22 2006 +0100
+++ b/mcabber/src/roster.c	Wed Dec 06 23:18:36 2006 +0100
@@ -1379,22 +1379,32 @@
 GSList *compl_list(guint type)
 {
   GSList *list = NULL;
-  GList  *buddy = buddylist;
+  GSList *sl_roster_elt = groups;
+  roster *roster_elt;
+  GSList *sl_roster_usrelt;
+  roster *roster_usrelt;
 
-  for ( ; buddy ; buddy = g_list_next(buddy)) {
-    guint btype = buddy_gettype(BUDDATA(buddy));
+  while (sl_roster_elt) {       // group list loop
+    roster_elt = (roster*) sl_roster_elt->data;
+
+    if (roster_elt->type & ROSTER_TYPE_SPECIAL)
+      continue; // Skip special items
 
     if (type == ROSTER_TYPE_GROUP) { // (group names)
-      if (btype == ROSTER_TYPE_GROUP) {
-        const char *bname = buddy_getname(BUDDATA(buddy));
-        if ((bname) && (*bname))
-          list = g_slist_append(list, from_utf8(bname));
+      if (roster_elt->name && *(roster_elt->name))
+        list = g_slist_append(list, from_utf8(roster_elt->name));
+    } else { // ROSTER_TYPE_USER (jid) (or agent, or chatroom...)
+      sl_roster_usrelt = roster_elt->list;
+      while (sl_roster_usrelt) {  // user list loop
+        roster_usrelt = (roster*) sl_roster_usrelt->data;
+
+        if (roster_usrelt->jid)
+          list = g_slist_append(list, from_utf8(roster_usrelt->jid));
+
+        sl_roster_usrelt = g_slist_next(sl_roster_usrelt);
       }
-    } else { // ROSTER_TYPE_USER (jid) (or agent, or chatroom...)
-        const char *bjid = buddy_getjid(BUDDATA(buddy));
-        if (bjid)
-          list = g_slist_append(list, from_utf8(bjid));
     }
+    sl_roster_elt = g_slist_next(sl_roster_elt);
   }
 
   return list;