]> git.0d.be Git - empathy.git/commitdiff
Don't call SetAlias for subscription requests until the request has been acked (...
authorDanielle Madeley <danielle.madeley@collabora.co.uk>
Fri, 5 Feb 2010 00:06:13 +0000 (11:06 +1100)
committerGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>
Mon, 8 Feb 2010 11:37:44 +0000 (11:37 +0000)
libempathy-gtk/empathy-contact-dialogs.c
libempathy-gtk/empathy-contact-widget.c
libempathy-gtk/empathy-contact-widget.h

index 390caa2fbecb000fa0f81b484403396ecb047314..52e43e1638b93a26044d30485342c94dc8485ba8 100644 (file)
@@ -31,6 +31,7 @@
 
 #include <libempathy/empathy-contact-manager.h>
 #include <libempathy/empathy-contact-list.h>
+#include <libempathy/empathy-tp-contact-factory.h>
 #include <libempathy/empathy-utils.h>
 
 #include "empathy-contact-dialogs.h"
@@ -72,8 +73,17 @@ subscription_dialog_response_cb (GtkDialog *dialog,
        contact = empathy_contact_widget_get_contact (contact_widget);
 
        if (response == GTK_RESPONSE_YES) {
+               EmpathyTpContactFactory *factory;
+
+               factory = empathy_tp_contact_factory_dup_singleton (
+                       empathy_contact_get_connection (contact));
+
                empathy_contact_list_add (EMPATHY_CONTACT_LIST (manager),
                                          contact, "");
+               empathy_tp_contact_factory_set_alias (factory, contact,
+                       empathy_contact_widget_get_alias (contact_widget));
+
+               g_object_unref (factory);
        }
        else if (response == GTK_RESPONSE_NO) {
                empathy_contact_list_remove (EMPATHY_CONTACT_LIST (manager),
@@ -117,6 +127,7 @@ empathy_subscription_dialog_show (EmpathyContact *contact,
 
        /* Contact info widget */
        contact_widget = empathy_contact_widget_new (contact,
+                                                    EMPATHY_CONTACT_WIDGET_NO_SET_ALIAS |
                                                     EMPATHY_CONTACT_WIDGET_EDIT_ALIAS |
                                                     EMPATHY_CONTACT_WIDGET_EDIT_GROUPS);
        gtk_box_pack_end (GTK_BOX (hbox_subscription),
index 773aa6130765069baeb460715f2e8935d81de8db..3e8ed843075b8a0636090cf9820ca209ce71ae44 100644 (file)
@@ -1271,9 +1271,12 @@ contact_widget_contact_setup (EmpathyContactWidget *information)
   if (information->flags & EMPATHY_CONTACT_WIDGET_EDIT_ALIAS)
     {
       information->widget_alias = gtk_entry_new ();
-      g_signal_connect (information->widget_alias, "focus-out-event",
-            G_CALLBACK (contact_widget_entry_alias_focus_event_cb),
-            information);
+
+      if (!(information->flags & EMPATHY_CONTACT_WIDGET_NO_SET_ALIAS))
+        g_signal_connect (information->widget_alias, "focus-out-event",
+              G_CALLBACK (contact_widget_entry_alias_focus_event_cb),
+              information);
+
       /* Make return activate the window default (the Close button) */
       gtk_entry_set_activates_default (GTK_ENTRY (information->widget_alias),
           TRUE);
@@ -1414,6 +1417,20 @@ empathy_contact_widget_get_contact (GtkWidget *widget)
   return information->contact;
 }
 
+const gchar *
+empathy_contact_widget_get_alias (GtkWidget *widget)
+{
+  EmpathyContactWidget *information;
+
+  g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
+
+  information = g_object_get_data (G_OBJECT (widget), "EmpathyContactWidget");
+  if (!information)
+      return NULL;
+
+  return gtk_entry_get_text (GTK_ENTRY (information->widget_alias));
+}
+
 /**
  * empathy_contact_widget_set_contact:
  * @widget: an #EmpathyContactWidget
index b010578ad9f33b7de8094d862791dd3e79f1c503..04b567f4d7c2edf4b70dfaed14d6fc89cb9faa0d 100644 (file)
@@ -60,6 +60,7 @@ typedef enum
   EMPATHY_CONTACT_WIDGET_EDIT_GROUPS  = 1 << 4,
   EMPATHY_CONTACT_WIDGET_FOR_TOOLTIP  = 1 << 5,
   EMPATHY_CONTACT_WIDGET_SHOW_LOCATION  = 1 << 6,
+  EMPATHY_CONTACT_WIDGET_NO_SET_ALIAS = 1 << 7,
 } EmpathyContactWidgetFlags;
 
 GtkWidget * empathy_contact_widget_new (EmpathyContact *contact,
@@ -69,6 +70,7 @@ void empathy_contact_widget_set_contact (GtkWidget *widget,
     EmpathyContact *contact);
 void empathy_contact_widget_set_account_filter (GtkWidget *widget,
     EmpathyAccountChooserFilterFunc filter, gpointer user_data);
+const gchar *empathy_contact_widget_get_alias (GtkWidget *widget);
 
 G_END_DECLS