| 3063 |
3063 |
| 3064 /* we set this up as a timeout, otherwise the blist flickers */ |
3064 /* we set this up as a timeout, otherwise the blist flickers */ |
| 3065 g_timeout_add(0, (GSourceFunc)do_selection_changed, new_selection); |
3065 g_timeout_add(0, (GSourceFunc)do_selection_changed, new_selection); |
| 3066 } |
3066 } |
| 3067 |
3067 |
| 3068 static void insert_node(GaimBuddyList *list, GaimBlistNode *node, GtkTreeIter *iter) |
3068 static gboolean insert_node(GaimBuddyList *list, GaimBlistNode *node, GtkTreeIter *iter) |
| 3069 { |
3069 { |
| 3070 GtkTreeIter parent_iter, cur, *curptr = NULL; |
3070 GtkTreeIter parent_iter, cur, *curptr = NULL; |
| 3071 struct _gaim_gtk_blist_node *gtknode = node->ui_data; |
3071 struct _gaim_gtk_blist_node *gtknode = node->ui_data; |
| 3072 GtkTreePath *newpath; |
3072 GtkTreePath *newpath; |
| 3073 |
3073 |
| 3074 if(!gtknode || !iter) |
3074 if(!gtknode || !iter) |
| 3075 return; |
3075 return FALSE; |
| 3076 |
3076 |
| 3077 if(node->parent && !get_iter_from_node(node->parent, &parent_iter)) |
3077 if(node->parent && !get_iter_from_node(node->parent, &parent_iter)) |
| 3078 return; |
3078 return FALSE; |
| 3079 |
3079 |
| 3080 if(get_iter_from_node(node, &cur)) |
3080 if(get_iter_from_node(node, &cur)) |
| 3081 curptr = &cur; |
3081 curptr = &cur; |
| 3082 |
3082 |
| 3083 if(GAIM_BLIST_NODE_IS_CONTACT(node) || GAIM_BLIST_NODE_IS_CHAT(node)) { |
3083 if(GAIM_BLIST_NODE_IS_CONTACT(node) || GAIM_BLIST_NODE_IS_CHAT(node)) { |
| 3132 count = gaim_blist_get_group_online_count(group); |
3133 count = gaim_blist_get_group_online_count(group); |
| 3133 if(gaim_prefs_get_bool("/gaim/gtk/blist/show_empty_groups") || count > 0) { |
3134 if(gaim_prefs_get_bool("/gaim/gtk/blist/show_empty_groups") || count > 0) { |
| 3134 char *mark, *esc; |
3135 char *mark, *esc; |
| 3135 GtkTreeIter iter; |
3136 GtkTreeIter iter; |
| 3136 |
3137 |
| 3137 insert_node(list, node, &iter); |
3138 if(!insert_node(list, node, &iter)) |
| |
3139 return; |
| 3138 |
3140 |
| 3139 esc = g_markup_escape_text(group->name, -1); |
3141 esc = g_markup_escape_text(group->name, -1); |
| 3140 if(gaim_prefs_get_bool("/gaim/gtk/blist/show_group_count")) { |
3142 if(gaim_prefs_get_bool("/gaim/gtk/blist/show_group_count")) { |
| 3141 mark = g_strdup_printf("<span weight='bold'>%s</span> (%d/%d)", |
3143 mark = g_strdup_printf("<span weight='bold'>%s</span> (%d/%d)", |
| 3142 esc, gaim_blist_get_group_online_count(group), |
3144 esc, gaim_blist_get_group_online_count(group), |
| 3244 if(buddy && (buddy->present != GAIM_BUDDY_OFFLINE || |
3246 if(buddy && (buddy->present != GAIM_BUDDY_OFFLINE || |
| 3245 (gaim_account_is_connected(buddy->account) && |
3247 (gaim_account_is_connected(buddy->account) && |
| 3246 gaim_prefs_get_bool("/gaim/gtk/blist/show_offline_buddies")))) { |
3248 gaim_prefs_get_bool("/gaim/gtk/blist/show_offline_buddies")))) { |
| 3247 GtkTreeIter iter; |
3249 GtkTreeIter iter; |
| 3248 |
3250 |
| 3249 insert_node(list, node, &iter); |
3251 if(!insert_node(list, node, &iter)) |
| |
3252 return; |
| 3250 |
3253 |
| 3251 if(gtknode->contact_expanded) { |
3254 if(gtknode->contact_expanded) { |
| 3252 GdkPixbuf *status; |
3255 GdkPixbuf *status; |
| 3253 char *mark; |
3256 char *mark; |
| 3254 |
3257 |
| 3296 (buddy->present != GAIM_BUDDY_OFFLINE || |
3299 (buddy->present != GAIM_BUDDY_OFFLINE || |
| 3297 (gaim_account_is_connected(buddy->account) && |
3300 (gaim_account_is_connected(buddy->account) && |
| 3298 gaim_prefs_get_bool("/gaim/gtk/blist/show_offline_buddies")))) { |
3301 gaim_prefs_get_bool("/gaim/gtk/blist/show_offline_buddies")))) { |
| 3299 GtkTreeIter iter; |
3302 GtkTreeIter iter; |
| 3300 |
3303 |
| 3301 insert_node(list, node, &iter); |
3304 if(!insert_node(list, node, &iter)) |
| |
3305 return; |
| |
3306 |
| 3302 buddy_node(buddy, &iter, node); |
3307 buddy_node(buddy, &iter, node); |
| 3303 |
3308 |
| 3304 } else { |
3309 } else { |
| 3305 gaim_gtk_blist_hide_node(list, node); |
3310 gaim_gtk_blist_hide_node(list, node); |
| 3306 } |
3311 } |
| 3321 if(gaim_account_is_connected(chat->account)) { |
3326 if(gaim_account_is_connected(chat->account)) { |
| 3322 GtkTreeIter iter; |
3327 GtkTreeIter iter; |
| 3323 GdkPixbuf *status; |
3328 GdkPixbuf *status; |
| 3324 char *mark; |
3329 char *mark; |
| 3325 |
3330 |
| 3326 insert_node(list, node, &iter); |
3331 if(!insert_node(list, node, &iter)) |
| |
3332 return; |
| 3327 |
3333 |
| 3328 status = gaim_gtk_blist_get_status_icon(node, |
3334 status = gaim_gtk_blist_get_status_icon(node, |
| 3329 (gaim_prefs_get_bool("/gaim/gtk/blist/show_buddy_icons") ? |
3335 (gaim_prefs_get_bool("/gaim/gtk/blist/show_buddy_icons") ? |
| 3330 GAIM_STATUS_ICON_LARGE : GAIM_STATUS_ICON_SMALL)); |
3336 GAIM_STATUS_ICON_LARGE : GAIM_STATUS_ICON_SMALL)); |
| 3331 |
3337 |