aboutsummaryrefslogtreecommitdiffstats
path: root/libempathy-gtk/empathy-individual-store.c
diff options
context:
space:
mode:
authorTravis Reitter <treitter@gmail.com>2010-06-12 04:22:38 +0800
committerTravis Reitter <treitter@gmail.com>2010-07-21 07:12:35 +0800
commit48a9944fd9f3b4461a239d2da490fba24874df80 (patch)
tree50c6dced199adadfe3bd45f14df6a7ab139f1d54 /libempathy-gtk/empathy-individual-store.c
parentd6aa2f99e3e626f81b455c0fa1ff4817a4e4f2f6 (diff)
downloadgsoc2013-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.c33
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",