comparison pidgin/gtkblist.c @ 16483:5e47b3427b28

propagate from branch 'im.pidgin.rlaager.gaim_migration' (head dcc40d46afbe3f87cc674e4fb1526ac722bc35cb) to branch 'im.pidgin.pidgin' (head 0ef5b6c44115778e329fd628324124f872f5253b)
author Sean Egan <seanegan@gmail.com>
date Fri, 27 Apr 2007 02:14:44 +0000
parents 08db93bbd798 05033ae856b2
children 26fb9b308cc1
comparison
equal deleted inserted replaced
16467:b2044e10915a 16483:5e47b3427b28
2153 } 2153 }
2154 } 2154 }
2155 2155
2156 2156
2157 static GdkPixbuf *pidgin_blist_get_buddy_icon(PurpleBlistNode *node, 2157 static GdkPixbuf *pidgin_blist_get_buddy_icon(PurpleBlistNode *node,
2158 gboolean scaled, gboolean greyed, gboolean custom) 2158 gboolean scaled, gboolean greyed)
2159 { 2159 {
2160 GdkPixbuf *buf, *ret = NULL; 2160 GdkPixbuf *buf, *ret = NULL;
2161 GdkPixbufLoader *loader; 2161 GdkPixbufLoader *loader;
2162 PurpleBuddyIcon *icon; 2162 PurpleBuddyIcon *icon;
2163 const guchar *data = NULL; 2163 const guchar *data = NULL;
2164 gsize len; 2164 gsize len;
2165 PurpleBuddy *buddy = NULL; 2165 PurpleBuddy *buddy = NULL;
2166 PurpleChat *chat = NULL; 2166 PurpleChat *chat = NULL;
2167 PurpleAccount *account = NULL; 2167 PurpleAccount *account = NULL;
2168 PurplePluginProtocolInfo *prpl_info = NULL; 2168 PurplePluginProtocolInfo *prpl_info = NULL;
2169 PurpleStoredImage *custom_img;
2169 2170
2170 if(PURPLE_BLIST_NODE_IS_CONTACT(node)) { 2171 if(PURPLE_BLIST_NODE_IS_CONTACT(node)) {
2171 buddy = purple_contact_get_priority_buddy((PurpleContact*)node); 2172 buddy = purple_contact_get_priority_buddy((PurpleContact*)node);
2172 } else if(PURPLE_BLIST_NODE_IS_BUDDY(node)) { 2173 } else if(PURPLE_BLIST_NODE_IS_BUDDY(node)) {
2173 buddy = (PurpleBuddy*)node; 2174 buddy = (PurpleBuddy*)node;
2188 #if 0 2189 #if 0
2189 if (!purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_buddy_icons")) 2190 if (!purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_buddy_icons"))
2190 return NULL; 2191 return NULL;
2191 #endif 2192 #endif
2192 2193
2193 if (custom) { 2194 custom_img = purple_buddy_icons_find_custom_icon(purple_buddy_get_contact(buddy));
2194 const char *file = purple_blist_node_get_string((PurpleBlistNode*)purple_buddy_get_contact(buddy), 2195 if (custom_img)
2195 "custom_buddy_icon"); 2196 {
2196 if (file && *file) { 2197 data = purple_imgstore_get_data(custom_img);
2197 char *contents; 2198 len = purple_imgstore_get_size(custom_img);
2198 GError *err = NULL;
2199 if (!g_file_get_contents(file, &contents, &len, &err)) {
2200 purple_debug_info("custom -icon", "Could not open custom-icon %s for %s\n",
2201 file, purple_buddy_get_name(buddy), err->message);
2202 g_error_free(err);
2203 } else
2204 data = (const guchar*)contents;
2205 }
2206 } 2199 }
2207 2200
2208 if (data == NULL) { 2201 if (data == NULL) {
2209 if(buddy != NULL) { 2202 if(buddy != NULL) {
2210 if (!(icon = purple_buddy_get_icon(buddy))) 2203 if (!(icon = purple_buddy_get_icon(buddy)))
2211 if (!(icon = purple_buddy_icons_find(buddy->account, buddy->name))) /* Not sure I like this...*/ 2204 if (!(icon = purple_buddy_icons_find(buddy->account, buddy->name))) /* Not sure I like this...*/
2212 return NULL; 2205 return NULL;
2213 data = purple_buddy_icon_get_data(icon, &len); 2206 data = purple_buddy_icon_get_data(icon, &len);
2214 } 2207 if (data == NULL)
2215 custom = FALSE; /* We are not using the custom icon */ 2208 return NULL;
2209 }
2216 } 2210 }
2217 2211
2218 if(data == NULL) 2212 if(data == NULL)
2219 return NULL; 2213 return NULL;
2220 2214
2221 loader = gdk_pixbuf_loader_new(); 2215 loader = gdk_pixbuf_loader_new();
2222 gdk_pixbuf_loader_write(loader, data, len, NULL); 2216 gdk_pixbuf_loader_write(loader, data, len, NULL);
2223 gdk_pixbuf_loader_close(loader, NULL); 2217 gdk_pixbuf_loader_close(loader, NULL);
2218
2219 purple_imgstore_unref(custom_img);
2220
2224 buf = gdk_pixbuf_loader_get_pixbuf(loader); 2221 buf = gdk_pixbuf_loader_get_pixbuf(loader);
2225 if (buf) 2222 if (buf)
2226 g_object_ref(G_OBJECT(buf)); 2223 g_object_ref(G_OBJECT(buf));
2227 g_object_unref(G_OBJECT(loader)); 2224 g_object_unref(G_OBJECT(loader));
2228 2225
2229 if (custom)
2230 g_free((void*)data);
2231 if (buf) { 2226 if (buf) {
2232 int orig_width, orig_height; 2227 int orig_width, orig_height;
2233 int scale_width, scale_height; 2228 int scale_width, scale_height;
2234 2229
2235 if (greyed) { 2230 if (greyed) {
2333 } else if(PURPLE_BLIST_NODE_IS_CHAT(node)) { 2328 } else if(PURPLE_BLIST_NODE_IS_CHAT(node)) {
2334 account = ((PurpleChat*)(node))->account; 2329 account = ((PurpleChat*)(node))->account;
2335 } 2330 }
2336 2331
2337 td->status_icon = pidgin_blist_get_status_icon(node, PIDGIN_STATUS_ICON_LARGE); 2332 td->status_icon = pidgin_blist_get_status_icon(node, PIDGIN_STATUS_ICON_LARGE);
2338 td->avatar = pidgin_blist_get_buddy_icon(node, !full, FALSE, TRUE); 2333 td->avatar = pidgin_blist_get_buddy_icon(node, !full, FALSE);
2339 td->prpl_icon = pidgin_create_prpl_icon(account, PIDGIN_PRPL_ICON_SMALL); 2334 td->prpl_icon = pidgin_create_prpl_icon(account, PIDGIN_PRPL_ICON_SMALL);
2340 tooltip_text = pidgin_get_tooltip_text(node, full); 2335 tooltip_text = pidgin_get_tooltip_text(node, full);
2341 td->layout = gtk_widget_create_pango_layout(gtkblist->tipwindow, NULL); 2336 td->layout = gtk_widget_create_pango_layout(gtkblist->tipwindow, NULL);
2342 td->name_layout = gtk_widget_create_pango_layout(gtkblist->tipwindow, NULL); 2337 td->name_layout = gtk_widget_create_pango_layout(gtkblist->tipwindow, NULL);
2343 2338
4892 presence = purple_buddy_get_presence(buddy); 4887 presence = purple_buddy_get_presence(buddy);
4893 4888
4894 status = pidgin_blist_get_status_icon((PurpleBlistNode*)buddy, 4889 status = pidgin_blist_get_status_icon((PurpleBlistNode*)buddy,
4895 PIDGIN_STATUS_ICON_SMALL); 4890 PIDGIN_STATUS_ICON_SMALL);
4896 4891
4897 avatar = pidgin_blist_get_buddy_icon((PurpleBlistNode *)buddy, TRUE, TRUE, TRUE); 4892 avatar = pidgin_blist_get_buddy_icon((PurpleBlistNode *)buddy, TRUE, TRUE);
4898 if (!avatar) { 4893 if (!avatar) {
4899 g_object_ref(G_OBJECT(gtkblist->empty_avatar)); 4894 g_object_ref(G_OBJECT(gtkblist->empty_avatar));
4900 avatar = gtkblist->empty_avatar; 4895 avatar = gtkblist->empty_avatar;
4901 } else if ((!PURPLE_BUDDY_IS_ONLINE(buddy) || purple_presence_is_idle(presence))) { 4896 } else if ((!PURPLE_BUDDY_IS_ONLINE(buddy) || purple_presence_is_idle(presence))) {
4902 do_alphashift(avatar, avatar, 77); 4897 do_alphashift(avatar, avatar, 77);
5077 return; 5072 return;
5078 5073
5079 status = pidgin_blist_get_status_icon(node, 5074 status = pidgin_blist_get_status_icon(node,
5080 PIDGIN_STATUS_ICON_SMALL); 5075 PIDGIN_STATUS_ICON_SMALL);
5081 emblem = pidgin_blist_get_emblem(node); 5076 emblem = pidgin_blist_get_emblem(node);
5082 avatar = pidgin_blist_get_buddy_icon(node, TRUE, FALSE, TRUE); 5077 avatar = pidgin_blist_get_buddy_icon(node, TRUE, FALSE);
5083 5078
5084 mark = g_markup_escape_text(purple_chat_get_name(chat), -1); 5079 mark = g_markup_escape_text(purple_chat_get_name(chat), -1);
5085 5080
5086 gtk_tree_store_set(gtkblist->treemodel, &iter, 5081 gtk_tree_store_set(gtkblist->treemodel, &iter,
5087 STATUS_ICON_COLUMN, status, 5082 STATUS_ICON_COLUMN, status,