Mercurial > pidgin
changeset 15422:051a5c4f0917
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
author | Nathan Walp <nwalp@pidgin.im> |
---|---|
date | Sat, 27 Jan 2007 02:06:09 +0000 |
parents | da62cc01dd56 |
children | 07f3ed5adb42 |
files | pidgin/gtkblist.c |
diffstat | 1 files changed, 44 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- 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); }