diff options
author | Travis Reitter <treitter@gmail.com> | 2010-06-12 04:22:38 +0800 |
---|---|---|
committer | Travis Reitter <treitter@gmail.com> | 2010-07-21 07:12:35 +0800 |
commit | 48a9944fd9f3b4461a239d2da490fba24874df80 (patch) | |
tree | 50c6dced199adadfe3bd45f14df6a7ab139f1d54 /libempathy-gtk/empathy-individual-store.c | |
parent | d6aa2f99e3e626f81b455c0fa1ff4817a4e4f2f6 (diff) | |
download | gsoc2013-empathy-48a9944fd9f3b4461a239d2da490fba24874df80.tar gsoc2013-empathy-48a9944fd9f3b4461a239d2da490fba24874df80.tar.gz gsoc2013-empathy-48a9944fd9f3b4461a239d2da490fba24874df80.tar.bz2 gsoc2013-empathy-48a9944fd9f3b4461a239d2da490fba24874df80.tar.lz gsoc2013-empathy-48a9944fd9f3b4461a239d2da490fba24874df80.tar.xz gsoc2013-empathy-48a9944fd9f3b4461a239d2da490fba24874df80.tar.zst gsoc2013-empathy-48a9944fd9f3b4461a239d2da490fba24874df80.zip |
Implement avatar support.
Diffstat (limited to 'libempathy-gtk/empathy-individual-store.c')
-rw-r--r-- | libempathy-gtk/empathy-individual-store.c | 33 |
1 files changed, 23 insertions, 10 deletions
diff --git a/libempathy-gtk/empathy-individual-store.c b/libempathy-gtk/empathy-individual-store.c index 4fed77aaf..0e3dd259e 100644 --- a/libempathy-gtk/empathy-individual-store.c +++ b/libempathy-gtk/empathy-individual-store.c @@ -528,6 +528,24 @@ individual_store_contact_active_cb (ShowActiveData *data) } static void +individual_avatar_pixbuf_received_cb (FolksIndividual *individual, + GdkPixbuf *pixbuf, + gpointer user_data) +{ + EmpathyIndividualStore *self = user_data; + GList *iters, *l; + + iters = individual_store_find_contact (self, individual); + + for (l = iters; l; l = l->next) + { + gtk_tree_store_set (GTK_TREE_STORE (self), l->data, + EMPATHY_INDIVIDUAL_STORE_COL_PIXBUF_AVATAR, pixbuf, + -1); + } +} + +static void individual_store_contact_update (EmpathyIndividualStore *self, FolksIndividual *individual) { @@ -544,7 +562,6 @@ individual_store_contact_update (EmpathyIndividualStore *self, gboolean do_set_active = FALSE; gboolean do_set_refresh = FALSE; gboolean show_avatar = FALSE; - GdkPixbuf *pixbuf_avatar; GdkPixbuf *pixbuf_status; priv = GET_PRIV (self); @@ -657,17 +674,16 @@ individual_store_contact_update (EmpathyIndividualStore *self, { show_avatar = TRUE; } - /* TODO: implement */ - DEBUG ("avatars unimplemented"); + + empathy_pixbuf_avatar_from_individual_scaled_async (individual, 32, 32, + individual_avatar_pixbuf_received_cb, self); pixbuf_status = empathy_individual_store_get_individual_status_icon (self, individual); - pixbuf_avatar = NULL; for (l = iters; l && set_model; l = l->next) { gtk_tree_store_set (GTK_TREE_STORE (self), l->data, EMPATHY_INDIVIDUAL_STORE_COL_ICON_STATUS, pixbuf_status, - EMPATHY_INDIVIDUAL_STORE_COL_PIXBUF_AVATAR, pixbuf_avatar, EMPATHY_INDIVIDUAL_STORE_COL_PIXBUF_AVATAR_VISIBLE, show_avatar, EMPATHY_INDIVIDUAL_STORE_COL_NAME, folks_individual_get_alias (individual), @@ -687,11 +703,6 @@ individual_store_contact_update (EmpathyIndividualStore *self, EMPATHY_INDIVIDUAL_STORE_COL_IS_SEPARATOR, FALSE, -1); } - if (pixbuf_avatar) - { - g_object_unref (pixbuf_avatar); - } - if (priv->show_active && do_set_active) { individual_store_contact_set_active (self, individual, do_set_active, @@ -731,6 +742,8 @@ static void individual_store_add_individual_and_connect (EmpathyIndividualStore *self, FolksIndividual *individual) { + g_signal_connect (individual, "notify::avatar", + G_CALLBACK (individual_store_contact_updated_cb), self); g_signal_connect (individual, "notify::presence-type", G_CALLBACK (individual_store_contact_updated_cb), self); g_signal_connect (individual, "notify::presence-message", |