]> git.0d.be Git - empathy.git/blobdiff - libempathy-gtk/empathy-contact-dialogs.c
Merge branch 'sasl'
[empathy.git] / libempathy-gtk / empathy-contact-dialogs.c
index d271cdd287589b20a3283d6e4e7dc545f124696a..fb57f348b247883116ce1c7d60dd2334935359b0 100644 (file)
 #include <gtk/gtk.h>
 #include <glib/gi18n-lib.h>
 
-#include <libmissioncontrol/mission-control.h>
+#include <telepathy-glib/account-manager.h>
 
 #include <libempathy/empathy-contact-manager.h>
-#include <libempathy/empathy-account-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"
@@ -75,6 +75,9 @@ subscription_dialog_response_cb (GtkDialog *dialog,
        if (response == GTK_RESPONSE_YES) {
                empathy_contact_list_add (EMPATHY_CONTACT_LIST (manager),
                                          contact, "");
+
+               empathy_contact_set_alias (contact,
+                       empathy_contact_widget_get_alias (contact_widget));
        }
        else if (response == GTK_RESPONSE_NO) {
                empathy_contact_list_remove (EMPATHY_CONTACT_LIST (manager),
@@ -88,11 +91,13 @@ subscription_dialog_response_cb (GtkDialog *dialog,
 
 void
 empathy_subscription_dialog_show (EmpathyContact *contact,
+                                 const gchar *message,
                                  GtkWindow     *parent)
 {
        GtkBuilder *gui;
        GtkWidget *dialog;
        GtkWidget *hbox_subscription;
+       GtkWidget *vbox;
        GtkWidget *contact_widget;
        GList     *l;
        gchar     *filename;
@@ -116,15 +121,37 @@ empathy_subscription_dialog_show (EmpathyContact *contact,
        g_free (filename);
        g_object_unref (gui);
 
+       vbox = gtk_vbox_new (FALSE, 6);
+
+       gtk_box_pack_end (GTK_BOX (hbox_subscription), vbox,
+                         TRUE, TRUE, 0);
+
        /* 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),
+       gtk_box_pack_start (GTK_BOX (vbox),
                          contact_widget,
                          TRUE, TRUE,
                          0);
+
+       if (!tp_str_empty (message)) {
+               GtkWidget *label;
+               gchar *tmp;
+
+               label = gtk_label_new ("");
+               tmp = g_strdup_printf ("<i>%s</i>", message);
+
+               gtk_label_set_markup (GTK_LABEL (label), tmp);
+               g_free (tmp);
+               gtk_widget_show (label);
+
+               gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
+       }
+
        gtk_widget_show (contact_widget);
+       gtk_widget_show (vbox);
 
        g_object_set_data (G_OBJECT (dialog), "contact_widget", contact_widget);
        subscription_dialogs = g_list_prepend (subscription_dialogs, dialog);
@@ -174,9 +201,9 @@ empathy_contact_information_dialog_show (EmpathyContact *contact,
 
        /* Create dialog */
        dialog = gtk_dialog_new ();
-       gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE);
        gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
-       gtk_window_set_title (GTK_WINDOW (dialog), _("Edit Contact Information"));
+       gtk_window_set_title (GTK_WINDOW (dialog),
+               empathy_contact_get_alias (contact));
 
        /* Close button */
        button = gtk_button_new_with_label (GTK_STOCK_CLOSE);
@@ -184,14 +211,14 @@ empathy_contact_information_dialog_show (EmpathyContact *contact,
        gtk_dialog_add_action_widget (GTK_DIALOG (dialog),
                                      button,
                                      GTK_RESPONSE_CLOSE);
-       GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+       gtk_widget_set_can_default (button, TRUE);
        gtk_window_set_default (GTK_WINDOW (dialog), button);
        gtk_widget_show (button);
 
        /* Contact info widget */
        contact_widget = empathy_contact_widget_new (contact,
                EMPATHY_CONTACT_WIDGET_SHOW_LOCATION |
-               EMPATHY_CONTACT_WIDGET_EDIT_NONE);
+               EMPATHY_CONTACT_WIDGET_SHOW_DETAILS);
        gtk_container_set_border_width (GTK_CONTAINER (contact_widget), 8);
        gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))),
                            contact_widget,
@@ -233,7 +260,6 @@ empathy_contact_edit_dialog_show (EmpathyContact *contact,
 
        /* Create dialog */
        dialog = gtk_dialog_new ();
-       gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE);
        gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
        gtk_window_set_title (GTK_WINDOW (dialog), _("Edit Contact Information"));
 
@@ -243,14 +269,15 @@ empathy_contact_edit_dialog_show (EmpathyContact *contact,
        gtk_dialog_add_action_widget (GTK_DIALOG (dialog),
                                      button,
                                      GTK_RESPONSE_CLOSE);
-       GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+       gtk_widget_set_can_default (button, TRUE);
        gtk_window_set_default (GTK_WINDOW (dialog), button);
        gtk_widget_show (button);
 
        /* Contact info widget */
        contact_widget = empathy_contact_widget_new (contact,
                EMPATHY_CONTACT_WIDGET_EDIT_ALIAS |
-               EMPATHY_CONTACT_WIDGET_EDIT_GROUPS);
+               EMPATHY_CONTACT_WIDGET_EDIT_GROUPS |
+               EMPATHY_CONTACT_WIDGET_EDIT_FAVOURITE);
        gtk_container_set_border_width (GTK_CONTAINER (contact_widget), 8);
        gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))),
                            contact_widget,
@@ -284,7 +311,6 @@ empathy_contact_personal_dialog_show (GtkWindow *parent)
 
        /* Create dialog */
        personal_dialog = gtk_dialog_new ();
-       gtk_dialog_set_has_separator (GTK_DIALOG (personal_dialog), FALSE);
        gtk_window_set_resizable (GTK_WINDOW (personal_dialog), FALSE);
        gtk_window_set_title (GTK_WINDOW (personal_dialog), _("Personal Information"));
 
@@ -294,7 +320,7 @@ empathy_contact_personal_dialog_show (GtkWindow *parent)
        gtk_dialog_add_action_widget (GTK_DIALOG (personal_dialog),
                                      button,
                                      GTK_RESPONSE_CLOSE);
-       GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+       gtk_widget_set_can_default (button, TRUE);
        gtk_window_set_default (GTK_WINDOW (personal_dialog), button);
        gtk_widget_show (button);
 
@@ -302,7 +328,8 @@ empathy_contact_personal_dialog_show (GtkWindow *parent)
        contact_widget = empathy_contact_widget_new (NULL,
                EMPATHY_CONTACT_WIDGET_EDIT_ACCOUNT |
                EMPATHY_CONTACT_WIDGET_EDIT_ALIAS |
-               EMPATHY_CONTACT_WIDGET_EDIT_AVATAR);
+               EMPATHY_CONTACT_WIDGET_EDIT_AVATAR |
+               EMPATHY_CONTACT_WIDGET_EDIT_DETAILS);
        gtk_container_set_border_width (GTK_CONTAINER (contact_widget), 8);
        gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (personal_dialog))),
                            contact_widget,
@@ -327,23 +354,28 @@ empathy_contact_personal_dialog_show (GtkWindow *parent)
  *  New contact dialog
  */
 
-static gboolean
-can_add_contact_to_account (EmpathyAccount *account,
-                           gpointer   user_data)
+static void
+can_add_contact_to_account (TpAccount                                 *account,
+                           EmpathyAccountChooserFilterResultCallback  callback,
+                           gpointer                                   callback_data,
+                           gpointer                                   user_data)
 {
        EmpathyContactManager *contact_manager;
        TpConnection          *connection;
        gboolean               result;
 
-       connection = empathy_account_get_connection (account);
-       if (connection == NULL)
-               return FALSE;
+       connection = tp_account_get_connection (account);
+       if (connection == NULL) {
+               callback (FALSE, callback_data);
+               return;
+       }
 
        contact_manager = empathy_contact_manager_dup_singleton ();
-       result = empathy_contact_manager_can_add (contact_manager, connection);
+       result = empathy_contact_manager_get_flags_for_connection (
+               contact_manager, connection) & EMPATHY_CONTACT_LIST_CAN_ADD;
        g_object_unref (contact_manager);
 
-       return result;
+       callback (result, callback_data);
 }
 
 static void
@@ -369,6 +401,13 @@ new_contact_response_cb (GtkDialog *dialog,
 
 void
 empathy_new_contact_dialog_show (GtkWindow *parent)
+{
+       empathy_new_contact_dialog_show_with_contact (parent, NULL);
+}
+
+void
+empathy_new_contact_dialog_show_with_contact (GtkWindow *parent,
+                                              EmpathyContact *contact)
 {
        GtkWidget *dialog;
        GtkWidget *button;
@@ -381,7 +420,6 @@ empathy_new_contact_dialog_show (GtkWindow *parent)
 
        /* Create dialog */
        dialog = gtk_dialog_new ();
-       gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE);
        gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
        gtk_window_set_title (GTK_WINDOW (dialog), _("New Contact"));
 
@@ -402,11 +440,12 @@ empathy_new_contact_dialog_show (GtkWindow *parent)
        gtk_widget_show (button);
 
        /* Contact info widget */
-       contact_widget = empathy_contact_widget_new (NULL,
+       contact_widget = empathy_contact_widget_new (contact,
                                                     EMPATHY_CONTACT_WIDGET_EDIT_ALIAS |
                                                     EMPATHY_CONTACT_WIDGET_EDIT_ACCOUNT |
                                                     EMPATHY_CONTACT_WIDGET_EDIT_ID |
                                                     EMPATHY_CONTACT_WIDGET_EDIT_GROUPS);
+       gtk_container_set_border_width (GTK_CONTAINER (contact_widget), 8);
        gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))),
                            contact_widget,
                            TRUE, TRUE, 0);