Mercurial > pidgin.yaz
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, |