aboutsummaryrefslogtreecommitdiffstats
path: root/libempathy-gtk/empathy-contact-widget.c
diff options
context:
space:
mode:
Diffstat (limited to 'libempathy-gtk/empathy-contact-widget.c')
-rw-r--r--libempathy-gtk/empathy-contact-widget.c25
1 files changed, 21 insertions, 4 deletions
diff --git a/libempathy-gtk/empathy-contact-widget.c b/libempathy-gtk/empathy-contact-widget.c
index 07058e4bc..f8ff36731 100644
--- a/libempathy-gtk/empathy-contact-widget.c
+++ b/libempathy-gtk/empathy-contact-widget.c
@@ -42,6 +42,9 @@
#include "empathy-avatar-image.h"
#include "empathy-ui-utils.h"
+#define DEBUG_FLAG EMPATHY_DEBUG_CONTACT
+#include <libempathy/empathy-debug.h>
+
/* Delay before updating the widget when the id entry changed (seconds) */
#define ID_CHANGED_TIMEOUT 1
@@ -688,6 +691,19 @@ contact_widget_contact_update (EmpathyContactWidget *information)
}
static void
+contact_widget_change_contact_cb (EmpathyContact *contact,
+ const GError *error,
+ gpointer information,
+ GObject *weak_object)
+{
+ if (error)
+ DEBUG ("Error: %s", error->message);
+ else
+ contact_widget_set_contact (information, contact);
+ g_object_unref (contact);
+}
+
+static void
contact_widget_change_contact (EmpathyContactWidget *information)
{
EmpathyContact *contact;
@@ -717,12 +733,13 @@ contact_widget_change_contact (EmpathyContactWidget *information)
if (contact)
{
- empathy_contact_run_until_ready (contact,
+ /* Give the contact ref to the callback */
+ empathy_contact_call_when_ready (contact,
EMPATHY_CONTACT_READY_HANDLE |
EMPATHY_CONTACT_READY_ID,
- NULL);
- contact_widget_set_contact (information, contact);
- g_object_unref (contact);
+ contact_widget_change_contact_cb,
+ information, NULL,
+ G_OBJECT (information->vbox_contact_widget));
}
}