Mercurial > hg
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) |