Mercurial > pidgin
changeset 15323:99dcbb8c4557
[gaim-migrate @ 18114]
Patch #1575852 from Denis Washington to fix group count display in the buddy
list when expanding/collapsing the groups.
committer: Tailor Script <tailor@pidgin.im>
author | Sadrul Habib Chowdhury <imadil@gmail.com> |
---|---|
date | Fri, 12 Jan 2007 17:43:25 +0000 |
parents | daf402269760 |
children | e3ea20c6e73f |
files | COPYRIGHT gtk/gtkblist.c |
diffstat | 2 files changed, 57 insertions(+), 23 deletions(-) [+] |
line wrap: on
line diff
--- a/COPYRIGHT Fri Jan 12 05:39:11 2007 +0000 +++ b/COPYRIGHT Fri Jan 12 17:43:25 2007 +0000 @@ -342,6 +342,7 @@ Jonty Wareing Eric Warmenhoven Adam J. Warrington +Denis Washington Zsombor Welker Andrew Wellington Adam Wendt
--- a/gtk/gtkblist.c Fri Jan 12 05:39:11 2007 +0000 +++ b/gtk/gtkblist.c Fri Jan 12 17:43:25 2007 +0000 @@ -133,6 +133,7 @@ static gboolean get_iter_from_node(GaimBlistNode *node, GtkTreeIter *iter); static void redo_buddy_list(GaimBuddyList *list, gboolean remove, gboolean rerender); static void gaim_gtk_blist_collapse_contact_cb(GtkWidget *w, GaimBlistNode *node); +static char *gaim_get_group_title(GaimBlistNode *gnode, gboolean expanded); static void gaim_gtk_blist_tooltip_destroy(void); @@ -775,6 +776,16 @@ node = g_value_get_pointer(&val); if (GAIM_BLIST_NODE_IS_GROUP(node)) { + char *title; + + title = gaim_get_group_title(node, TRUE); + + gtk_tree_store_set(gtkblist->treemodel, iter, + NAME_COLUMN, title, + -1); + + g_free(title); + gaim_blist_node_set_bool(node, "collapsed", FALSE); } } @@ -789,6 +800,16 @@ node = g_value_get_pointer(&val); if (GAIM_BLIST_NODE_IS_GROUP(node)) { + char *title; + + title = gaim_get_group_title(node, FALSE); + + gtk_tree_store_set(gtkblist->treemodel, iter, + NAME_COLUMN, title, + -1); + + g_free(title); + gaim_blist_node_set_bool(node, "collapsed", TRUE); } else if(GAIM_BLIST_NODE_IS_CONTACT(node)) { gaim_gtk_blist_collapse_contact_cb(NULL, node); @@ -4619,7 +4640,6 @@ int count; gboolean show = FALSE; GaimBlistNode* gnode; - gboolean selected; g_return_if_fail(node != NULL); @@ -4632,7 +4652,6 @@ else return; - selected = gtkblist ? (gtkblist->selected_node == gnode) : FALSE; group = (GaimGroup*)gnode; if(gaim_prefs_get_bool("/gaim/gtk/blist/show_offline_buddies")) @@ -4647,44 +4666,28 @@ show = TRUE;} if (show) { - char group_count[12] = ""; - char *mark, *esc; GtkTreeIter iter; GtkTreePath *path; gboolean expanded; GdkColor bgcolor; - GdkColor textcolor; + char *title; + if(!insert_node(list, gnode, &iter)) return; bgcolor = gtkblist->treeview->style->bg[GTK_STATE_ACTIVE]; - textcolor = gtkblist->treeview->style->fg[GTK_STATE_ACTIVE]; path = gtk_tree_model_get_path(GTK_TREE_MODEL(gtkblist->treemodel), &iter); expanded = gtk_tree_view_row_expanded(GTK_TREE_VIEW(gtkblist->treeview), path); gtk_tree_path_free(path); - if (!expanded) { - g_snprintf(group_count, sizeof(group_count), " (%d/%d)", - gaim_blist_get_group_online_count(group), - gaim_blist_get_group_size(group, FALSE)); - } - - esc = g_markup_escape_text(group->name, -1); - if (selected) - mark = g_strdup_printf("<span weight='bold'>%s</span>%s", esc, group_count); - else - mark = g_strdup_printf("<span color='#%02x%02x%02x' weight='bold'>%s</span>%s", - textcolor.red>>8, textcolor.green>>8, textcolor.blue>>8, - esc, group_count); - - g_free(esc); + title = gaim_get_group_title(gnode, expanded); gtk_tree_store_set(gtkblist->treemodel, &iter, STATUS_ICON_VISIBLE_COLUMN, FALSE, STATUS_ICON_COLUMN, NULL, - NAME_COLUMN, mark, + NAME_COLUMN, title, NODE_COLUMN, gnode, BGCOLOR_COLUMN, &bgcolor, GROUP_EXPANDER_COLUMN, TRUE, @@ -4692,12 +4695,42 @@ BUDDY_ICON_VISIBLE_COLUMN, FALSE, IDLE_VISIBLE_COLUMN, FALSE, -1); - g_free(mark); + g_free(title); } else { gaim_gtk_blist_hide_node(list, gnode, TRUE); } } +static char *gaim_get_group_title(GaimBlistNode *gnode, gboolean expanded) +{ + GaimGroup *group; + GdkColor textcolor; + gboolean selected; + char group_count[12] = ""; + char *mark, *esc; + + group = (GaimGroup*)gnode; + textcolor = gtkblist->treeview->style->fg[GTK_STATE_ACTIVE]; + selected = gtkblist ? (gtkblist->selected_node == gnode) : FALSE; + + if (!expanded) { + g_snprintf(group_count, sizeof(group_count), " (%d/%d)", + gaim_blist_get_group_online_count(group), + gaim_blist_get_group_size(group, FALSE)); + } + + esc = g_markup_escape_text(group->name, -1); + if (selected) + mark = g_strdup_printf("<span weight='bold'>%s</span>%s", esc, group_count); + else + mark = g_strdup_printf("<span color='#%02x%02x%02x' weight='bold'>%s</span>%s", + textcolor.red>>8, textcolor.green>>8, textcolor.blue>>8, + esc, group_count); + + g_free(esc); + return mark; +} + static void buddy_node(GaimBuddy *buddy, GtkTreeIter *iter, GaimBlistNode *node) { GaimPresence *presence;