pidgin/gtkblist.c

changeset 21669
078b500a766d
parent 21630
591a79c1b295
child 21670
9ce6e7374523
equal deleted inserted replaced
21666:70025aa3e74c 21669:078b500a766d
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;

mercurial