diff options
-rw-r--r-- | libempathy-gtk/empathy-contact-widget.c | 23 | ||||
-rw-r--r-- | libempathy-gtk/empathy-contact-widget.h | 2 |
2 files changed, 25 insertions, 0 deletions
diff --git a/libempathy-gtk/empathy-contact-widget.c b/libempathy-gtk/empathy-contact-widget.c index 51d17bfb7..a03571d9a 100644 --- a/libempathy-gtk/empathy-contact-widget.c +++ b/libempathy-gtk/empathy-contact-widget.c @@ -224,6 +224,23 @@ empathy_contact_widget_get_contact (GtkWidget *widget) } void +empathy_contact_widget_set_contact (GtkWidget *widget, + EmpathyContact *contact) +{ + EmpathyContactWidget *information; + + g_return_if_fail (GTK_IS_WIDGET (widget)); + g_return_if_fail (EMPATHY_IS_CONTACT (contact)); + + information = g_object_get_data (G_OBJECT (widget), "EmpathyContactWidget"); + if (!information) { + return; + } + + contact_widget_set_contact (information, contact); +} + +void empathy_contact_widget_set_account_filter (GtkWidget *widget, EmpathyAccountChooserFilterFunc filter, gpointer user_data) @@ -289,6 +306,12 @@ static void contact_widget_set_contact (EmpathyContactWidget *information, EmpathyContact *contact) { + if (contact == information->contact || + (contact && information->contact && + empathy_contact_equal (contact, information->contact))) { + return; + } + contact_widget_remove_contact (information); if (contact) { information->contact = g_object_ref (contact); diff --git a/libempathy-gtk/empathy-contact-widget.h b/libempathy-gtk/empathy-contact-widget.h index 21dd1bf0c..643867ef5 100644 --- a/libempathy-gtk/empathy-contact-widget.h +++ b/libempathy-gtk/empathy-contact-widget.h @@ -41,6 +41,8 @@ typedef enum { GtkWidget * empathy_contact_widget_new (EmpathyContact *contact, EmpathyContactWidgetFlags flags); EmpathyContact *empathy_contact_widget_get_contact (GtkWidget *widget); +void empathy_contact_widget_set_contact (GtkWidget *widget, + EmpathyContact *contact); void empathy_contact_widget_set_account_filter (GtkWidget *widget, EmpathyAccountChooserFilterFunc filter, gpointer user_data); |