]> git.0d.be Git - empathy.git/blobdiff - libempathy-gtk/empathy-contact-dialogs.c
local-xmpp-assistant-widget: increase row-spacing
[empathy.git] / libempathy-gtk / empathy-contact-dialogs.c
index d16062eff2e57bc7950420e8332ddbdb921833ae..00d737bdac6740c9161932218f92d5e9a9a4031c 100644 (file)
@@ -30,8 +30,6 @@
 
 #include <telepathy-glib/account-manager.h>
 
-#include <libempathy/empathy-contact-manager.h>
-#include <libempathy/empathy-contact-list.h>
 #include <libempathy/empathy-tp-contact-factory.h>
 #include <libempathy/empathy-utils.h>
 
@@ -41,8 +39,6 @@
 
 static GList *subscription_dialogs = NULL;
 static GList *information_dialogs = NULL;
-static GList *edit_dialogs = NULL;
-static GtkWidget *personal_dialog = NULL;
 static GtkWidget *new_contact_dialog = NULL;
 
 static gint
@@ -67,47 +63,41 @@ subscription_dialog_response_cb (GtkDialog *dialog,
                                 gint       response,
                                 GtkWidget *contact_widget)
 {
-       EmpathyContactManager *manager;
        EmpathyContact        *contact;
 
-       manager = empathy_contact_manager_dup_singleton ();
        contact = empathy_contact_widget_get_contact (contact_widget);
 
        if (response == GTK_RESPONSE_YES) {
-               empathy_contact_list_add (EMPATHY_CONTACT_LIST (manager),
-                                         contact, "");
+               empathy_contact_add_to_contact_list (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),
-                                            contact, "");
+               empathy_contact_remove_from_contact_list (contact);
        }
        else if (response == GTK_RESPONSE_REJECT) {
                gboolean abusive;
 
                /* confirm the blocking */
-               if (empathy_block_contact_dialog_show (GTK_WINDOW (dialog),
-                                                      contact, &abusive)) {
-                       empathy_contact_list_remove (
-                                       EMPATHY_CONTACT_LIST (manager),
-                                       contact, "");
-                       empathy_contact_list_set_blocked (
-                                       EMPATHY_CONTACT_LIST (manager),
-                                       contact, TRUE, abusive);
+               if (empathy_block_contact_dialog_show (GTK_WINDOW (dialog), contact,
+                                                      NULL, &abusive)) {
+                       TpContact *tp_contact;
+
+                       empathy_contact_remove_from_contact_list (contact);
+
+                       tp_contact = empathy_contact_get_tp_contact (contact);
+
+                       tp_contact_block_async (tp_contact, abusive, NULL, NULL);
                } else {
                        /* if they don't confirm, return back to the
                         * first dialog */
-                       goto finally;
+                       return;
                }
        }
 
        subscription_dialogs = g_list_remove (subscription_dialogs, dialog);
        gtk_widget_destroy (GTK_WIDGET (dialog));
-
-finally:
-       g_object_unref (manager);
 }
 
 void
@@ -123,10 +113,7 @@ empathy_subscription_dialog_show (EmpathyContact *contact,
        GtkWidget *block_user_button;
        GList     *l;
        gchar     *filename;
-       EmpathyContactManager *manager;
-       EmpathyContactListFlags flags;
-
-       manager = empathy_contact_manager_dup_singleton ();
+       TpConnection *conn;
 
        g_return_if_fail (EMPATHY_IS_CONTACT (contact));
 
@@ -148,7 +135,7 @@ empathy_subscription_dialog_show (EmpathyContact *contact,
        g_free (filename);
        g_object_unref (gui);
 
-       vbox = gtk_vbox_new (FALSE, 6);
+       vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
 
        gtk_box_pack_end (GTK_BOX (hbox_subscription), vbox,
                          TRUE, TRUE, 0);
@@ -188,17 +175,16 @@ empathy_subscription_dialog_show (EmpathyContact *contact,
                          G_CALLBACK (subscription_dialog_response_cb),
                          contact_widget);
 
-       flags = empathy_contact_manager_get_flags_for_connection (manager,
-                               empathy_contact_get_connection (contact));
+       conn = empathy_contact_get_connection (contact);
 
-       if (flags & EMPATHY_CONTACT_LIST_CAN_BLOCK)
+       if (tp_proxy_has_interface_by_id (conn,
+               TP_IFACE_QUARK_CONNECTION_INTERFACE_CONTACT_BLOCKING))
                gtk_widget_show (block_user_button);
 
        if (parent) {
                gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
        }
 
-       g_object_unref (manager);
        gtk_widget_show (dialog);
 }
 
@@ -274,117 +260,6 @@ empathy_contact_information_dialog_show (EmpathyContact *contact,
        gtk_widget_show (dialog);
 }
 
-void
-empathy_contact_edit_dialog_show (EmpathyContact *contact,
-                                 GtkWindow      *parent)
-{
-       GtkWidget *dialog;
-       GtkWidget *button;
-       GtkWidget *contact_widget;
-       GList     *l;
-
-       g_return_if_fail (EMPATHY_IS_CONTACT (contact));
-
-       l = g_list_find_custom (edit_dialogs,
-                               contact,
-                               (GCompareFunc) contact_dialogs_find);
-       if (l) {
-               gtk_window_present (GTK_WINDOW (l->data));
-               return;
-       }
-
-       /* Create dialog */
-       dialog = gtk_dialog_new ();
-       gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
-       gtk_window_set_title (GTK_WINDOW (dialog), _("Edit Contact Information"));
-
-       /* Close button */
-       button = gtk_button_new_with_label (GTK_STOCK_CLOSE);
-       gtk_button_set_use_stock (GTK_BUTTON (button), TRUE);
-       gtk_dialog_add_action_widget (GTK_DIALOG (dialog),
-                                     button,
-                                     GTK_RESPONSE_CLOSE);
-       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_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,
-                           TRUE, TRUE, 0);
-       gtk_widget_show (contact_widget);
-
-       g_object_set_data (G_OBJECT (dialog), "contact_widget", contact_widget);
-       edit_dialogs = g_list_prepend (edit_dialogs, dialog);
-
-       g_signal_connect (dialog, "response",
-                         G_CALLBACK (contact_dialogs_response_cb),
-                         &edit_dialogs);
-
-       if (parent) {
-               gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
-       }
-
-       gtk_widget_show (dialog);
-}
-
-void
-empathy_contact_personal_dialog_show (GtkWindow *parent)
-{
-       GtkWidget *button;
-       GtkWidget *contact_widget;
-
-       if (personal_dialog) {
-               gtk_window_present (GTK_WINDOW (personal_dialog));
-               return;
-       }
-
-       /* Create dialog */
-       personal_dialog = gtk_dialog_new ();
-       gtk_window_set_resizable (GTK_WINDOW (personal_dialog), FALSE);
-       gtk_window_set_title (GTK_WINDOW (personal_dialog), _("Personal Information"));
-
-       /* Close button */
-       button = gtk_button_new_with_label (GTK_STOCK_CLOSE);
-       gtk_button_set_use_stock (GTK_BUTTON (button), TRUE);
-       gtk_dialog_add_action_widget (GTK_DIALOG (personal_dialog),
-                                     button,
-                                     GTK_RESPONSE_CLOSE);
-       gtk_widget_set_can_default (button, TRUE);
-       gtk_window_set_default (GTK_WINDOW (personal_dialog), button);
-       gtk_widget_show (button);
-
-       /* Contact info widget */
-       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_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,
-                           TRUE, TRUE, 0);
-       empathy_contact_widget_set_account_filter (contact_widget,
-               empathy_account_chooser_filter_is_connected, NULL);
-       gtk_widget_show (contact_widget);
-
-       g_signal_connect (personal_dialog, "response",
-                         G_CALLBACK (gtk_widget_destroy), NULL);
-       g_object_add_weak_pointer (G_OBJECT (personal_dialog),
-                                  (gpointer) &personal_dialog);
-
-       if (parent) {
-               gtk_window_set_transient_for (GTK_WINDOW (personal_dialog), parent);
-       }
-
-       gtk_widget_show (personal_dialog);
-}
-
 /*
  *  New contact dialog
  */
@@ -395,7 +270,6 @@ can_add_contact_to_account (TpAccount                                 *account,
                            gpointer                                   callback_data,
                            gpointer                                   user_data)
 {
-       EmpathyContactManager *contact_manager;
        TpConnection          *connection;
        gboolean               result;
 
@@ -405,10 +279,7 @@ can_add_contact_to_account (TpAccount                                 *account,
                return;
        }
 
-       contact_manager = empathy_contact_manager_dup_singleton ();
-       result = empathy_contact_manager_get_flags_for_connection (
-               contact_manager, connection) & EMPATHY_CONTACT_LIST_CAN_ADD;
-       g_object_unref (contact_manager);
+       result = tp_connection_get_can_change_contact_list (connection);
 
        callback (result, callback_data);
 }
@@ -418,20 +289,16 @@ new_contact_response_cb (GtkDialog *dialog,
                         gint       response,
                         GtkWidget *contact_widget)
 {
-       EmpathyContactManager *manager;
        EmpathyContact         *contact;
 
-       manager = empathy_contact_manager_dup_singleton ();
        contact = empathy_contact_widget_get_contact (contact_widget);
 
        if (contact && response == GTK_RESPONSE_OK) {
-               empathy_contact_list_add (EMPATHY_CONTACT_LIST (manager),
-                                         contact, "");
+               empathy_contact_add_to_contact_list (contact, "");
        }
 
        new_contact_dialog = NULL;
        gtk_widget_destroy (GTK_WIDGET (dialog));
-       g_object_unref (manager);
 }
 
 void
@@ -514,17 +381,13 @@ empathy_new_contact_dialog_show_with_contact (GtkWindow *parent,
 gboolean
 empathy_block_contact_dialog_show (GtkWindow      *parent,
                                   EmpathyContact *contact,
+                                  GdkPixbuf      *avatar,
                                   gboolean       *abusive)
 {
-       EmpathyContactManager *manager;
-       EmpathyContactListFlags flags;
        GtkWidget *dialog;
        GtkWidget *abusive_check = NULL;
        int res;
-
-       manager = empathy_contact_manager_dup_singleton ();
-       flags = empathy_contact_manager_get_flags_for_connection (manager,
-                       empathy_contact_get_connection (contact));
+       TpConnection *conn;
 
        dialog = gtk_message_dialog_new (parent,
                        GTK_DIALOG_MODAL,
@@ -542,8 +405,16 @@ empathy_block_contact_dialog_show (GtkWindow      *parent,
                        _("_Block"), GTK_RESPONSE_REJECT,
                        NULL);
 
+       if (avatar != NULL) {
+               GtkWidget *image = gtk_image_new_from_pixbuf (avatar);
+               gtk_message_dialog_set_image (GTK_MESSAGE_DIALOG (dialog), image);
+               gtk_widget_show (image);
+       }
+
+       conn = empathy_contact_get_connection (contact);
+
        /* ask the user if they want to also report the contact as abusive */
-       if (flags & EMPATHY_CONTACT_LIST_CAN_REPORT_ABUSIVE) {
+       if (tp_connection_can_report_abusive (conn)) {
                GtkWidget *vbox;
 
                vbox = gtk_message_dialog_get_message_area (
@@ -567,7 +438,6 @@ empathy_block_contact_dialog_show (GtkWindow      *parent,
        }
 
        gtk_widget_destroy (dialog);
-       g_object_unref (manager);
 
        return res == GTK_RESPONSE_REJECT;
 }