aboutsummaryrefslogtreecommitdiffstats
path: root/libempathy-gtk/empathy-contact-widget.c
diff options
context:
space:
mode:
authorXavier Claessens <xclaesse@gmail.com>2007-10-09 00:44:44 +0800
committerXavier Claessens <xclaesse@src.gnome.org>2007-10-09 00:44:44 +0800
commit0d4e81432f5ace47ac86991aa239e4a55686de00 (patch)
tree22cc64055c78370d4a973af8e85a36740f60f930 /libempathy-gtk/empathy-contact-widget.c
parent311dbc21826654538e098a8d838153d5b075f6c7 (diff)
downloadgsoc2013-empathy-0d4e81432f5ace47ac86991aa239e4a55686de00.tar
gsoc2013-empathy-0d4e81432f5ace47ac86991aa239e4a55686de00.tar.gz
gsoc2013-empathy-0d4e81432f5ace47ac86991aa239e4a55686de00.tar.bz2
gsoc2013-empathy-0d4e81432f5ace47ac86991aa239e4a55686de00.tar.lz
gsoc2013-empathy-0d4e81432f5ace47ac86991aa239e4a55686de00.tar.xz
gsoc2013-empathy-0d4e81432f5ace47ac86991aa239e4a55686de00.tar.zst
gsoc2013-empathy-0d4e81432f5ace47ac86991aa239e4a55686de00.zip
Implement EmpathyAvatarChooser and EmpathyAvatarImage and make use of them
2007-10-08 Xavier Claessens <xclaesse@gmail.com> * libempathy-gtk/empathy-ui-utils.c: * libempathy-gtk/empathy-ui-utils.h: * libempathy-gtk/empathy-contact-widget.c: * libempathy-gtk/empathy-contact-widget.h: * libempathy-gtk/empathy-avatar-chooser.c: * libempathy-gtk/empathy-avatar-chooser.h: * libempathy-gtk/empathy-avatar-image.c: * libempathy-gtk/empathy-avatar-image.h: * libempathy-gtk/Makefile.am: * src/empathy.c: Implement EmpathyAvatarChooser and EmpathyAvatarImage and make use of them in contact information windows. That means we can now enlarge avatars when clicking on it and we can set our own avatar if we edit our own contact. svn path=/trunk/; revision=363
Diffstat (limited to 'libempathy-gtk/empathy-contact-widget.c')
-rw-r--r--libempathy-gtk/empathy-contact-widget.c64
1 files changed, 46 insertions, 18 deletions
diff --git a/libempathy-gtk/empathy-contact-widget.c b/libempathy-gtk/empathy-contact-widget.c
index b3081b130..b6fd4937d 100644
--- a/libempathy-gtk/empathy-contact-widget.c
+++ b/libempathy-gtk/empathy-contact-widget.c
@@ -38,6 +38,8 @@
#include "empathy-contact-widget.h"
#include "empathy-account-chooser.h"
+#include "empathy-avatar-chooser.h"
+#include "empathy-avatar-image.h"
#include "empathy-ui-utils.h"
/* Delay before updating the widget when the id entry changed (ms) */
@@ -47,7 +49,6 @@ typedef struct {
EmpathyContactFactory *factory;
EmpathyContactManager *manager;
EmpathyContact *contact;
- gboolean is_user;
EmpathyContactWidgetType type;
GtkCellRenderer *renderer;
guint widget_id_timeout;
@@ -100,6 +101,8 @@ static void contact_widget_set_contact (EmpathyContactWidget
static void contact_widget_contact_setup (EmpathyContactWidget *information);
static void contact_widget_contact_update (EmpathyContactWidget *information);
static gboolean contact_widget_update_contact (EmpathyContactWidget *information);
+static void contact_widget_avatar_changed_cb (EmpathyAvatarChooser *chooser,
+ EmpathyContactWidget *information);
static void contact_widget_account_changed_cb (GtkComboBox *widget,
EmpathyContactWidget *information);
static gboolean contact_widget_id_focus_out_cb (GtkWidget *widget,
@@ -153,13 +156,11 @@ empathy_contact_widget_new (EmpathyContact *contact,
GladeXML *glade;
information = g_slice_new0 (EmpathyContactWidget);
+ if (type == CONTACT_WIDGET_TYPE_EDIT && empathy_contact_is_user (contact)) {
+ type = CONTACT_WIDGET_TYPE_EDIT_USER;
+ }
information->type = type;
information->factory = empathy_contact_factory_new ();
- if (contact) {
- information->is_user = empathy_contact_is_user (contact);
- } else {
- information->is_user = FALSE;
- }
glade = empathy_glade_get_file ("empathy-contact-widget.glade",
"vbox_contact_widget",
@@ -339,12 +340,19 @@ contact_widget_id_changed_cb (GtkEntry *entry,
static void
contact_widget_contact_setup (EmpathyContactWidget *information)
{
- /* FIXME: Use EmpathyAvatarImage if (editable && is_user) */
- information->widget_avatar = gtk_image_new ();
+ if (information->type == CONTACT_WIDGET_TYPE_EDIT_USER) {
+ information->widget_avatar = empathy_avatar_chooser_new ();
+ g_signal_connect (information->widget_avatar, "changed",
+ G_CALLBACK (contact_widget_avatar_changed_cb),
+ information);
+ } else {
+ information->widget_avatar = empathy_avatar_image_new ();
+ }
gtk_box_pack_end (GTK_BOX (information->hbox_contact),
information->widget_avatar,
FALSE, FALSE,
6);
+ gtk_widget_show (information->widget_avatar);
/* Setup account label/chooser */
if (information->type == CONTACT_WIDGET_TYPE_ADD) {
@@ -459,6 +467,7 @@ contact_widget_contact_update (EmpathyContactWidget *information)
gtk_widget_show (information->label_alias);
gtk_widget_show (information->widget_alias);
gtk_widget_show (information->hbox_presence);
+ gtk_widget_show (information->widget_avatar);
} else {
gtk_widget_hide (information->label_alias);
gtk_widget_hide (information->widget_alias);
@@ -492,6 +501,20 @@ contact_widget_update_contact (EmpathyContactWidget *information)
}
static void
+contact_widget_avatar_changed_cb (EmpathyAvatarChooser *chooser,
+ EmpathyContactWidget *information)
+{
+ McAccount *account;
+ gchar *data;
+ gsize size;
+
+ account = empathy_contact_get_account (information->contact);
+ empathy_avatar_chooser_get_image_data (EMPATHY_AVATAR_CHOOSER (information->widget_avatar),
+ &data, &size);
+ mc_account_set_avatar_from_data (account, data, size, "png");
+}
+
+static void
contact_widget_account_changed_cb (GtkComboBox *widget,
EmpathyContactWidget *information)
{
@@ -550,18 +573,23 @@ contact_widget_presence_notify_cb (EmpathyContactWidget *information)
static void
contact_widget_avatar_notify_cb (EmpathyContactWidget *information)
{
- GdkPixbuf *avatar_pixbuf;
-
- avatar_pixbuf = empathy_pixbuf_avatar_from_contact_scaled (information->contact,
- 48, 48);
+ EmpathyAvatar *avatar = NULL;
- if (avatar_pixbuf) {
- gtk_image_set_from_pixbuf (GTK_IMAGE (information->widget_avatar),
- avatar_pixbuf);
- gtk_widget_show (information->widget_avatar);
- g_object_unref (avatar_pixbuf);
+ if (information->contact) {
+ avatar = empathy_contact_get_avatar (information->contact);
+ }
+ if (information->type == CONTACT_WIDGET_TYPE_EDIT_USER) {
+ g_signal_handlers_block_by_func (information->widget_avatar,
+ contact_widget_avatar_changed_cb,
+ information);
+ empathy_avatar_chooser_set (EMPATHY_AVATAR_CHOOSER (information->widget_avatar),
+ avatar);
+ g_signal_handlers_unblock_by_func (information->widget_avatar,
+ contact_widget_avatar_changed_cb,
+ information);
} else {
- gtk_widget_hide (information->widget_avatar);
+ empathy_avatar_image_set (EMPATHY_AVATAR_IMAGE (information->widget_avatar),
+ avatar);
}
}