| 5012 } |
5012 } |
| 5013 |
5013 |
| 5014 static void buddy_node(PurpleBuddy *buddy, GtkTreeIter *iter, PurpleBlistNode *node) |
5014 static void buddy_node(PurpleBuddy *buddy, GtkTreeIter *iter, PurpleBlistNode *node) |
| 5015 { |
5015 { |
| 5016 PurplePresence *presence; |
5016 PurplePresence *presence; |
| 5017 GdkPixbuf *status, *avatar, *emblem; |
5017 GdkPixbuf *status, *avatar, *emblem, *prpl_icon; |
| 5018 char *mark; |
5018 char *mark; |
| 5019 char *idle = NULL; |
5019 char *idle = NULL; |
| 5020 gboolean expanded = ((struct _pidgin_blist_node *)(node->parent->ui_data))->contact_expanded; |
5020 gboolean expanded = ((struct _pidgin_blist_node *)(node->parent->ui_data))->contact_expanded; |
| 5021 gboolean selected = (gtkblist->selected_node == node); |
5021 gboolean selected = (gtkblist->selected_node == node); |
| 5022 gboolean biglist = purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_buddy_icons"); |
5022 gboolean biglist = purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_buddy_icons"); |
| 5023 presence = purple_buddy_get_presence(buddy); |
5023 presence = purple_buddy_get_presence(buddy); |
| 5024 |
5024 |
| 5025 if (editing_blist) |
5025 if (editing_blist) |
| 5026 return; |
5026 return; |
| 5027 |
5027 |
| 5028 status = pidgin_blist_get_status_icon((PurpleBlistNode*)buddy, |
5028 status = pidgin_blist_get_status_icon((PurpleBlistNode*)buddy, |
| 5029 PIDGIN_STATUS_ICON_SMALL); |
5029 PIDGIN_STATUS_ICON_SMALL); |
| 5030 |
5030 |
| 5031 /* Speed it up if we don't want buddy icons. */ |
5031 /* Speed it up if we don't want buddy icons. */ |
| 5032 if(biglist) |
5032 if(biglist) |
| 5068 dim_grey(), idle); |
5068 dim_grey(), idle); |
| 5069 g_free(idle); |
5069 g_free(idle); |
| 5070 idle = i2; |
5070 idle = i2; |
| 5071 } |
5071 } |
| 5072 } |
5072 } |
| |
5073 |
| |
5074 prpl_icon = pidgin_create_prpl_icon(buddy->account, PIDGIN_PRPL_ICON_SMALL); |
| 5073 |
5075 |
| 5074 gtk_tree_store_set(gtkblist->treemodel, iter, |
5076 gtk_tree_store_set(gtkblist->treemodel, iter, |
| 5075 STATUS_ICON_COLUMN, status, |
5077 STATUS_ICON_COLUMN, status, |
| 5076 STATUS_ICON_VISIBLE_COLUMN, TRUE, |
5078 STATUS_ICON_VISIBLE_COLUMN, TRUE, |
| 5077 NAME_COLUMN, mark, |
5079 NAME_COLUMN, mark, |
| 5079 IDLE_VISIBLE_COLUMN, !biglist && idle, |
5081 IDLE_VISIBLE_COLUMN, !biglist && idle, |
| 5080 BUDDY_ICON_COLUMN, avatar, |
5082 BUDDY_ICON_COLUMN, avatar, |
| 5081 BUDDY_ICON_VISIBLE_COLUMN, biglist, |
5083 BUDDY_ICON_VISIBLE_COLUMN, biglist, |
| 5082 EMBLEM_COLUMN, emblem, |
5084 EMBLEM_COLUMN, emblem, |
| 5083 EMBLEM_VISIBLE_COLUMN, (emblem != NULL), |
5085 EMBLEM_VISIBLE_COLUMN, (emblem != NULL), |
| 5084 PROTOCOL_ICON_COLUMN, pidgin_create_prpl_icon(buddy->account, PIDGIN_PRPL_ICON_SMALL), |
5086 PROTOCOL_ICON_COLUMN, prpl_icon, |
| 5085 PROTOCOL_ICON_VISIBLE_COLUMN, purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_protocol_icons"), |
5087 PROTOCOL_ICON_VISIBLE_COLUMN, purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_protocol_icons"), |
| 5086 BGCOLOR_COLUMN, NULL, |
5088 BGCOLOR_COLUMN, NULL, |
| 5087 CONTACT_EXPANDER_COLUMN, NULL, |
5089 CONTACT_EXPANDER_COLUMN, NULL, |
| 5088 CONTACT_EXPANDER_VISIBLE_COLUMN, expanded, |
5090 CONTACT_EXPANDER_VISIBLE_COLUMN, expanded, |
| 5089 GROUP_EXPANDER_VISIBLE_COLUMN, FALSE, |
5091 GROUP_EXPANDER_VISIBLE_COLUMN, FALSE, |
| 5095 g_object_unref(emblem); |
5097 g_object_unref(emblem); |
| 5096 if(status) |
5098 if(status) |
| 5097 g_object_unref(status); |
5099 g_object_unref(status); |
| 5098 if(avatar) |
5100 if(avatar) |
| 5099 g_object_unref(avatar); |
5101 g_object_unref(avatar); |
| |
5102 if(prpl_icon) |
| |
5103 g_object_unref(prpl_icon); |
| 5100 } |
5104 } |
| 5101 |
5105 |
| 5102 /* This is a variation on the original gtk_blist_update_contact. Here we |
5106 /* This is a variation on the original gtk_blist_update_contact. Here we |
| 5103 can know in advance which buddy has changed so we can just update that */ |
5107 can know in advance which buddy has changed so we can just update that */ |
| 5104 static void pidgin_blist_update_contact(PurpleBuddyList *list, PurpleBlistNode *node) |
5108 static void pidgin_blist_update_contact(PurpleBuddyList *list, PurpleBlistNode *node) |
| 5215 |
5219 |
| 5216 chat = (PurpleChat*)node; |
5220 chat = (PurpleChat*)node; |
| 5217 |
5221 |
| 5218 if(purple_account_is_connected(chat->account)) { |
5222 if(purple_account_is_connected(chat->account)) { |
| 5219 GtkTreeIter iter; |
5223 GtkTreeIter iter; |
| 5220 GdkPixbuf *status; |
5224 GdkPixbuf *status, *avatar, *emblem, *prpl_icon; |
| 5221 GdkPixbuf *avatar; |
|
| 5222 GdkPixbuf *emblem; |
|
| 5223 char *mark; |
5225 char *mark; |
| 5224 gboolean showicons = purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_buddy_icons"); |
5226 gboolean showicons = purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_buddy_icons"); |
| 5225 const char *name = purple_chat_get_name(chat); |
5227 const char *name = purple_chat_get_name(chat); |
| 5226 PurpleConversation *conv = |
5228 PurpleConversation *conv = |
| 5227 purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, name, chat->account); |
5229 purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, name, chat->account); |
| 5244 if (hidden) { |
5246 if (hidden) { |
| 5245 char *bold = g_strdup_printf("<b>%s</b>", mark); |
5247 char *bold = g_strdup_printf("<b>%s</b>", mark); |
| 5246 g_free(mark); |
5248 g_free(mark); |
| 5247 mark = bold; |
5249 mark = bold; |
| 5248 } |
5250 } |
| |
5251 |
| |
5252 prpl_icon = pidgin_create_prpl_icon(chat->account, PIDGIN_PRPL_ICON_SMALL); |
| 5249 |
5253 |
| 5250 gtk_tree_store_set(gtkblist->treemodel, &iter, |
5254 gtk_tree_store_set(gtkblist->treemodel, &iter, |
| 5251 STATUS_ICON_COLUMN, status, |
5255 STATUS_ICON_COLUMN, status, |
| 5252 STATUS_ICON_VISIBLE_COLUMN, TRUE, |
5256 STATUS_ICON_VISIBLE_COLUMN, TRUE, |
| 5253 BUDDY_ICON_COLUMN, avatar ? avatar : gtkblist->empty_avatar, |
5257 BUDDY_ICON_COLUMN, avatar ? avatar : gtkblist->empty_avatar, |
| 5254 BUDDY_ICON_VISIBLE_COLUMN, purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_buddy_icons"), |
5258 BUDDY_ICON_VISIBLE_COLUMN, purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_buddy_icons"), |
| 5255 EMBLEM_COLUMN, emblem, |
5259 EMBLEM_COLUMN, emblem, |
| 5256 EMBLEM_VISIBLE_COLUMN, emblem != NULL, |
5260 EMBLEM_VISIBLE_COLUMN, emblem != NULL, |
| 5257 PROTOCOL_ICON_COLUMN, pidgin_create_prpl_icon(chat->account, PIDGIN_PRPL_ICON_SMALL), |
5261 PROTOCOL_ICON_COLUMN, prpl_icon, |
| 5258 PROTOCOL_ICON_VISIBLE_COLUMN, purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_protocol_icons"), |
5262 PROTOCOL_ICON_VISIBLE_COLUMN, purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_protocol_icons"), |
| 5259 NAME_COLUMN, mark, |
5263 NAME_COLUMN, mark, |
| 5260 GROUP_EXPANDER_VISIBLE_COLUMN, FALSE, |
5264 GROUP_EXPANDER_VISIBLE_COLUMN, FALSE, |
| 5261 -1); |
5265 -1); |
| 5262 |
5266 |
| 5265 g_object_unref(emblem); |
5269 g_object_unref(emblem); |
| 5266 if(status) |
5270 if(status) |
| 5267 g_object_unref(status); |
5271 g_object_unref(status); |
| 5268 if(avatar) |
5272 if(avatar) |
| 5269 g_object_unref(avatar); |
5273 g_object_unref(avatar); |
| |
5274 if(prpl_icon) |
| |
5275 g_object_unref(prpl_icon); |
| 5270 } else { |
5276 } else { |
| 5271 pidgin_blist_hide_node(list, node, TRUE); |
5277 pidgin_blist_hide_node(list, node, TRUE); |
| 5272 } |
5278 } |
| 5273 } |
5279 } |
| 5274 |
5280 |