| 5559 } |
5559 } |
| 5560 |
5560 |
| 5561 return TRUE; |
5561 return TRUE; |
| 5562 } |
5562 } |
| 5563 |
5563 |
| |
5564 static gboolean pidgin_blist_group_has_show_offline_buddy(PurpleGroup *group) |
| |
5565 { |
| |
5566 PurpleBlistNode *gnode, *cnode, *bnode; |
| |
5567 |
| |
5568 gnode = (PurpleBlistNode *)group; |
| |
5569 for(cnode = gnode->child; cnode; cnode = cnode->next) { |
| |
5570 if(PURPLE_BLIST_NODE_IS_CONTACT(cnode)) { |
| |
5571 for(bnode = cnode->child; bnode; bnode = bnode->next) { |
| |
5572 PurpleBuddy *buddy = (PurpleBuddy *)bnode; |
| |
5573 if (purple_account_is_connected(buddy->account) && |
| |
5574 purple_blist_node_get_bool(bnode, "show_offline")) |
| |
5575 return TRUE; |
| |
5576 } |
| |
5577 } |
| |
5578 } |
| |
5579 return FALSE; |
| |
5580 } |
| |
5581 |
| 5564 /*This version of pidgin_blist_update_group can take the original buddy |
5582 /*This version of pidgin_blist_update_group can take the original buddy |
| 5565 or a group, but has much better algorithmic performance with a pre-known buddy*/ |
5583 or a group, but has much better algorithmic performance with a pre-known buddy*/ |
| 5566 static void pidgin_blist_update_group(PurpleBuddyList *list, PurpleBlistNode *node) |
5584 static void pidgin_blist_update_group(PurpleBuddyList *list, PurpleBlistNode *node) |
| 5567 { |
5585 { |
| 5568 PurpleGroup *group; |
5586 PurpleGroup *group; |
| 5569 int count; |
5587 int count; |
| 5570 gboolean show = FALSE; |
5588 gboolean show = FALSE, show_offline = FALSE; |
| 5571 PurpleBlistNode* gnode; |
5589 PurpleBlistNode* gnode; |
| 5572 |
5590 |
| 5573 g_return_if_fail(node != NULL); |
5591 g_return_if_fail(node != NULL); |
| 5574 |
5592 |
| 5575 if (editing_blist) |
5593 if (editing_blist) |
| 5584 else |
5602 else |
| 5585 return; |
5603 return; |
| 5586 |
5604 |
| 5587 group = (PurpleGroup*)gnode; |
5605 group = (PurpleGroup*)gnode; |
| 5588 |
5606 |
| 5589 if(purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_offline_buddies")) |
5607 show_offline = purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_offline_buddies"); |
| |
5608 |
| |
5609 if(show_offline) |
| 5590 count = purple_blist_get_group_size(group, FALSE); |
5610 count = purple_blist_get_group_size(group, FALSE); |
| 5591 else |
5611 else |
| 5592 count = purple_blist_get_group_online_count(group); |
5612 count = purple_blist_get_group_online_count(group); |
| 5593 |
5613 |
| 5594 if (count > 0 || purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_empty_groups")) |
5614 if (count > 0 || purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_empty_groups")) |
| 5595 show = TRUE; |
5615 show = TRUE; |
| 5596 else if (PURPLE_BLIST_NODE_IS_BUDDY(node)){ /* Or chat? */ |
5616 else if (PURPLE_BLIST_NODE_IS_BUDDY(node)) { /* Or chat? */ |
| 5597 if (buddy_is_displayable((PurpleBuddy*)node)) |
5617 if (buddy_is_displayable((PurpleBuddy*)node)) |
| 5598 show = TRUE;} |
5618 show = TRUE; |
| |
5619 } else if (!show_offline && PURPLE_BLIST_NODE_IS_GROUP(node)) { |
| |
5620 show = pidgin_blist_group_has_show_offline_buddy(group); |
| |
5621 } |
| 5599 |
5622 |
| 5600 if (show) { |
5623 if (show) { |
| 5601 GtkTreeIter iter; |
5624 GtkTreeIter iter; |
| 5602 GtkTreePath *path; |
5625 GtkTreePath *path; |
| 5603 gboolean expanded; |
5626 gboolean expanded; |