comparison mcabber/src/roster.c @ 128:81ccb1091dd8

[/trunk] Changeset 141 by mikael * /group implementation (shrink/expand) * Replace scr_DrawRoster() calls with "update_roster = TRUE" in commands.c An inline function would maybe be better? * TODO update
author mikael
date Thu, 28 Apr 2005 10:16:32 +0000
parents cfd3df636d5f
children 6533a231a65e
comparison
equal deleted inserted replaced
127:0f7ec11efd06 128:81ccb1091dd8
296 { 296 {
297 GSList *sl_roster_elt = groups; 297 GSList *sl_roster_elt = groups;
298 roster *roster_elt; 298 roster *roster_elt;
299 roster *roster_current_buddy = NULL; 299 roster *roster_current_buddy = NULL;
300 int pending_group; 300 int pending_group;
301 int shrunk_group;
301 302
302 // We need to remember which buddy is selected. 303 // We need to remember which buddy is selected.
303 if (current_buddy) 304 if (current_buddy)
304 roster_current_buddy = BUDDATA(current_buddy); 305 roster_current_buddy = BUDDATA(current_buddy);
305 current_buddy = NULL; 306 current_buddy = NULL;
321 if (!hide_offline_buddies) 322 if (!hide_offline_buddies)
322 buddylist = g_list_append(buddylist, roster_elt); 323 buddylist = g_list_append(buddylist, roster_elt);
323 else 324 else
324 pending_group = TRUE; 325 pending_group = TRUE;
325 326
327 shrunk_group = roster_elt->flags & ROSTER_FLAG_HIDE;
328
326 sl_roster_usrelt = roster_elt->list; 329 sl_roster_usrelt = roster_elt->list;
327 while (sl_roster_usrelt) { 330 while (sl_roster_usrelt) {
328 roster_usrelt = (roster*) sl_roster_usrelt->data; 331 roster_usrelt = (roster*) sl_roster_usrelt->data;
329 332
330 // Buddy will be added if either: 333 // Buddy will be added if either:
331 // - hide_offline_buddies is FALSE 334 // - hide_offline_buddies is FALSE
332 // - buddy is not offline 335 // - buddy is not offline
333 // - buddy has a lock (for example the buddy window is currently open) 336 // - buddy has a lock (for example the buddy window is currently open)
334 // - buddy has a pending (non-read) message 337 // - buddy has a pending (non-read) message
338 // - group isn't hidden (shrunk)
335 if (!hide_offline_buddies || 339 if (!hide_offline_buddies ||
336 (buddy_getstatus((gpointer)roster_usrelt) != offline) || 340 (buddy_getstatus((gpointer)roster_usrelt) != offline) ||
337 (buddy_getflags((gpointer)roster_usrelt) & 341 (buddy_getflags((gpointer)roster_usrelt) &
338 (ROSTER_FLAG_LOCK | ROSTER_FLAG_MSG))) { 342 (ROSTER_FLAG_LOCK | ROSTER_FLAG_MSG))) {
339 // This user should be added. Maybe the group hasn't been added yet? 343 // This user should be added. Maybe the group hasn't been added yet?
341 // It hasn't been done yet 345 // It hasn't been done yet
342 buddylist = g_list_append(buddylist, roster_elt); 346 buddylist = g_list_append(buddylist, roster_elt);
343 pending_group = FALSE; 347 pending_group = FALSE;
344 } 348 }
345 // Add user 349 // Add user
346 buddylist = g_list_append(buddylist, roster_usrelt); 350 // XXX Should we add the user if there is a message and
351 // the group is shrunk? If so, we'd need to check LOCK flag too,
352 // perhaps...
353 if (!shrunk_group)
354 buddylist = g_list_append(buddylist, roster_usrelt);
347 } 355 }
348 356
349 sl_roster_usrelt = g_slist_next(sl_roster_usrelt); 357 sl_roster_usrelt = g_slist_next(sl_roster_usrelt);
350 } 358 }
351 sl_roster_elt = g_slist_next(sl_roster_elt); 359 sl_roster_elt = g_slist_next(sl_roster_elt);
355 if (roster_current_buddy) 363 if (roster_current_buddy)
356 current_buddy = g_list_find(buddylist, roster_current_buddy); 364 current_buddy = g_list_find(buddylist, roster_current_buddy);
357 // current_buddy initialization 365 // current_buddy initialization
358 if (!current_buddy || (g_list_position(buddylist, current_buddy) == -1)) 366 if (!current_buddy || (g_list_position(buddylist, current_buddy) == -1))
359 current_buddy = g_list_first(buddylist); 367 current_buddy = g_list_first(buddylist);
368 // XXX Maybe we should set update_roster to TRUE there?
360 } 369 }
361 370
362 // buddy_hide_group(roster, hide) 371 // buddy_hide_group(roster, hide)
363 // "hide" values: 1=hide 0=show_all -1=invert 372 // "hide" values: 1=hide 0=show_all -1=invert
364 void buddy_hide_group(gpointer rosterdata, int hide) 373 void buddy_hide_group(gpointer rosterdata, int hide)