# HG changeset patch # User Nathan Walp # Date 1169863569 0 # Node ID 051a5c4f0917ea2581815f48ea1216afe7f72bbb # Parent da62cc01dd56903603fcd157b3ef8bc30daca976 this would use the protocol icons in place of the buddy icon for chats, so we can tell which chat is which. However, we're not currently installing any protocol icons, so this won't work yet diff -r da62cc01dd56 -r 051a5c4f0917 pidgin/gtkblist.c --- a/pidgin/gtkblist.c Fri Jan 26 04:34:30 2007 +0000 +++ b/pidgin/gtkblist.c Sat Jan 27 02:06:09 2007 +0000 @@ -2059,16 +2059,29 @@ GaimBuddyIcon *icon; const guchar *data = NULL; gsize len; - GaimBuddy *buddy = (GaimBuddy *)node; + GaimBuddy *buddy = NULL; + GaimChat *chat = NULL; + GaimAccount *account = NULL; + GaimPluginProtocolInfo *prpl_info = NULL; if(GAIM_BLIST_NODE_IS_CONTACT(node)) { buddy = gaim_contact_get_priority_buddy((GaimContact*)node); } else if(GAIM_BLIST_NODE_IS_BUDDY(node)) { buddy = (GaimBuddy*)node; + } else if(GAIM_BLIST_NODE_IS_CHAT(node)) { + chat = (GaimChat*)node; } else { return NULL; } + if(buddy != NULL) + account = gaim_buddy_get_account(buddy); + else if(chat != NULL) + account = chat->account; + + if(account && account->gc) + prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(account->gc->prpl); + #if 0 if (!gaim_prefs_get_bool("/gaim/gtk/blist/show_buddy_icons")) return NULL; @@ -2090,13 +2103,33 @@ } if (data == NULL) { - if (!(icon = gaim_buddy_get_icon(buddy))) - if (!(icon = gaim_buddy_icons_find(buddy->account, buddy->name))) /* Not sure I like this...*/ - return NULL; - data = gaim_buddy_icon_get_data(icon, &len); + if(buddy != NULL) { + if (!(icon = gaim_buddy_get_icon(buddy))) + if (!(icon = gaim_buddy_icons_find(buddy->account, buddy->name))) /* Not sure I like this...*/ + return NULL; + data = gaim_buddy_icon_get_data(icon, &len); + } else if(chat != NULL) { + if(prpl_info && prpl_info->list_icon) { + char *contents; + char *image = g_strdup_printf("%s.png", prpl_info->list_icon(account, NULL)); + char *filename = g_build_filename(DATADIR, "pixmaps", "pidgin", "status", "32", image, NULL); + g_free(image); + + gaim_debug_info("icon", "Using %s as a buddy icon for a chat\n"); + + /* we'll exit below with data == NULL if this fails */ + if(g_file_get_contents(filename, &contents, &len, NULL)) { + data = (const guchar*)contents; + } + g_free(filename); + } + } custom = FALSE; /* We are not using the custom icon */ } + if(data == NULL) + return NULL; + loader = gdk_pixbuf_loader_new(); gdk_pixbuf_loader_write(loader, data, len, NULL); gdk_pixbuf_loader_close(loader, NULL); @@ -2108,14 +2141,9 @@ if (custom) g_free((void*)data); if (buf) { - GaimAccount *account = gaim_buddy_get_account(buddy); - GaimPluginProtocolInfo *prpl_info = NULL; int orig_width, orig_height; int scale_width, scale_height; - if(account && account->gc) - prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(account->gc->prpl); - if (greyed) { GaimPresence *presence = gaim_buddy_get_presence(buddy); if (!GAIM_BUDDY_IS_ONLINE(buddy)) @@ -4842,6 +4870,7 @@ if(gaim_account_is_connected(chat->account)) { GtkTreeIter iter; GdkPixbuf *status; + GdkPixbuf *avatar; char *mark; if(!insert_node(list, node, &iter)) @@ -4850,12 +4879,14 @@ status = gaim_gtk_blist_get_status_icon(node, GAIM_STATUS_ICON_SMALL); + avatar = gaim_gtk_blist_get_buddy_icon(node, TRUE, FALSE, TRUE); + mark = g_markup_escape_text(gaim_chat_get_name(chat), -1); gtk_tree_store_set(gtkblist->treemodel, &iter, STATUS_ICON_COLUMN, status, STATUS_ICON_VISIBLE_COLUMN, TRUE, - BUDDY_ICON_COLUMN, gtkblist->empty_avatar, + BUDDY_ICON_COLUMN, avatar ? avatar : gtkblist->empty_avatar, BUDDY_ICON_VISIBLE_COLUMN, TRUE, NAME_COLUMN, mark, -1); @@ -4863,6 +4894,8 @@ g_free(mark); if(status) g_object_unref(status); + if(avatar) + g_object_unref(avatar); } else { gaim_gtk_blist_hide_node(list, node, TRUE); }