]> git.0d.be Git - empathy.git/blobdiff - libempathy-gtk/empathy-account-widget-jabber.c
Fix alignment of entry boxes in jabber account widget
[empathy.git] / libempathy-gtk / empathy-account-widget-jabber.c
index f17623fadb1fbb842c738f91b3548e3f2e7badc7..b3339f12832d318a718219426d5dfba798ab58ba 100644 (file)
 #include <libmissioncontrol/mc-profile.h>
 
 #include <libempathy/empathy-utils.h>
+#include <libempathy/empathy-debug.h>
 
 #include "empathy-account-widget-jabber.h"
 #include "empathy-ui-utils.h"
 
+#define DEBUG_DOMAIN "AccountWidgetJabber"
+
 #define PORT_WITHOUT_SSL 5222
 #define PORT_WITH_SSL 5223
 
@@ -49,24 +52,12 @@ typedef struct {
        GtkWidget *entry_resource;
        GtkWidget *entry_server;
        GtkWidget *spinbutton_port;
+       GtkWidget *spinbutton_priority;
        GtkWidget *checkbutton_ssl;
+       GtkWidget *checkbutton_ignore_ssl_errors;
+       GtkWidget *checkbutton_encryption;
 } EmpathyAccountWidgetJabber;
 
-static gboolean account_widget_jabber_entry_focus_cb           (GtkWidget                 *widget,
-                                                               GdkEventFocus             *event,
-                                                               EmpathyAccountWidgetJabber *settings);
-static void     account_widget_jabber_entry_changed_cb         (GtkWidget                 *widget,
-                                                               EmpathyAccountWidgetJabber *settings);
-static void     account_widget_jabber_checkbutton_toggled_cb   (GtkWidget                 *widget,
-                                                               EmpathyAccountWidgetJabber *settings);
-static void     account_widget_jabber_value_changed_cb         (GtkWidget                 *spinbutton,
-                                                               EmpathyAccountWidgetJabber *settings);
-static void     account_widget_jabber_button_forget_clicked_cb (GtkWidget                 *button,
-                                                               EmpathyAccountWidgetJabber *settings);
-static void     account_widget_jabber_destroy_cb               (GtkWidget                 *widget,
-                                                               EmpathyAccountWidgetJabber *settings);
-static void     account_widget_jabber_setup                    (EmpathyAccountWidgetJabber *settings);
-
 static gboolean
 account_widget_jabber_entry_focus_cb (GtkWidget                 *widget,
                                      GdkEventFocus             *event,
@@ -94,10 +85,13 @@ account_widget_jabber_entry_focus_cb (GtkWidget                 *widget,
        if (G_STR_EMPTY (str)) {
                gchar *value = NULL;
 
+               mc_account_unset_param (settings->account, param);
                mc_account_get_param_string (settings->account, param, &value);
+               empathy_debug (DEBUG_DOMAIN, "Unset %s and restore to %s", param, value);
                gtk_entry_set_text (GTK_ENTRY (widget), value ? value : "");
                g_free (value);
        } else {
+               empathy_debug (DEBUG_DOMAIN, "Setting %s to %s", param, str);
                mc_account_set_param_string (settings->account, param, str);
        }
 
@@ -120,26 +114,50 @@ static void
 account_widget_jabber_checkbutton_toggled_cb (GtkWidget                 *widget,
                                              EmpathyAccountWidgetJabber *settings)
 {
+       gboolean     value;
+       gboolean     default_value;
+       const gchar *param;
+
+       value = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
+
        if (widget == settings->checkbutton_ssl) {
-               gint     port = 0;
-               gboolean old_ssl;
+               gint port = 0;
 
                mc_account_get_param_int (settings->account, "port", &port);
-               old_ssl = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
 
-               if (old_ssl) {
-                       if (port == PORT_WITHOUT_SSL) {
+               if (value) {
+                       if (port == PORT_WITHOUT_SSL || port == 0) {
                                port = PORT_WITH_SSL;
                        }
                } else {
-                       if (port == PORT_WITH_SSL) {
+                       if (port == PORT_WITH_SSL || port == 0) {
                                port = PORT_WITHOUT_SSL;
                        }
                }
-               
-               mc_account_set_param_int (settings->account, "port", port);
-               mc_account_set_param_boolean (settings->account, "old-ssl", old_ssl);
+
                gtk_spin_button_set_value (GTK_SPIN_BUTTON (settings->spinbutton_port), port);
+               param = "old-ssl";
+       }
+       else if (widget == settings->checkbutton_ignore_ssl_errors) {
+               param = "ignore-ssl-errors";
+       }
+       else if (widget == settings->checkbutton_encryption) {
+               param = "require-encryption";
+       } else {
+               return;
+       }
+
+       /* FIXME: This is ugly! checkbox don't have a "not-set" value so we
+        * always unset the param and set the value if different from the
+        * default value. */
+       mc_account_unset_param (settings->account, param);
+       mc_account_get_param_boolean (settings->account, param, &default_value);
+
+       if (default_value != value) {
+               empathy_debug (DEBUG_DOMAIN, "Setting %s to %d", param, value);
+               mc_account_set_param_boolean (settings->account, param, value);
+       } else {
+               empathy_debug (DEBUG_DOMAIN, "Unset %s", param, value);
        }
 }
 
@@ -147,11 +165,30 @@ static void
 account_widget_jabber_value_changed_cb (GtkWidget                 *spinbutton,
                                        EmpathyAccountWidgetJabber *settings)
 {
+       gdouble      value;
+       const gchar *param;
+
+       value = gtk_spin_button_get_value (GTK_SPIN_BUTTON (spinbutton));
+
        if (spinbutton == settings->spinbutton_port) {
-               gdouble value;
+               param = "port";
+       }
+       else if (spinbutton == settings->spinbutton_priority) {
+               param = "priority";
+       } else {
+               return;
+       }
+
+       if (value != 0) {
+               empathy_debug (DEBUG_DOMAIN, "Setting %s to %d", param, (gint) value);
+               mc_account_set_param_int (settings->account, param, (gint) value);
+       } else {
+               gint val;
 
-               value = gtk_spin_button_get_value (GTK_SPIN_BUTTON (spinbutton));
-               mc_account_set_param_int (settings->account, "port", (gint) value);
+               mc_account_unset_param (settings->account, param);
+               mc_account_get_param_int (settings->account, param, &val);
+               empathy_debug (DEBUG_DOMAIN, "Unset %s and restore to %d", param, val);
+               gtk_spin_button_set_value (GTK_SPIN_BUTTON (spinbutton), val);
        }
 }
 
@@ -159,7 +196,8 @@ static void
 account_widget_jabber_button_forget_clicked_cb (GtkWidget                 *button,
                                                EmpathyAccountWidgetJabber *settings)
 {
-       mc_account_set_param_string (settings->account, "password", "");
+       empathy_debug (DEBUG_DOMAIN, "Unset password");
+       mc_account_unset_param (settings->account, "password");
        gtk_entry_set_text (GTK_ENTRY (settings->entry_password), "");
 }
 
@@ -175,18 +213,24 @@ static void
 account_widget_jabber_setup (EmpathyAccountWidgetJabber *settings)
 {
        gint      port = 0;
+       gint      priority = 0;
        gchar    *id = NULL;
        gchar    *resource = NULL;
        gchar    *server = NULL;
        gchar    *password = NULL;
        gboolean  old_ssl = FALSE;
+       gboolean  ignore_ssl_errors = FALSE;
+       gboolean  encryption = FALSE;
 
        mc_account_get_param_int (settings->account, "port", &port);
+       mc_account_get_param_int (settings->account, "priority", &priority);
        mc_account_get_param_string (settings->account, "account", &id);
        mc_account_get_param_string (settings->account, "resource", &resource);
        mc_account_get_param_string (settings->account, "server", &server);
        mc_account_get_param_string (settings->account, "password", &password);
        mc_account_get_param_boolean (settings->account, "old-ssl", &old_ssl);
+       mc_account_get_param_boolean (settings->account, "ignore-ssl-errors", &ignore_ssl_errors);
+       mc_account_get_param_boolean (settings->account, "require-encryption", &encryption);
 
        if (!id) {
                McProfile   *profile;
@@ -200,12 +244,15 @@ account_widget_jabber_setup (EmpathyAccountWidgetJabber *settings)
                g_object_unref (profile);
        }
 
-       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (settings->checkbutton_ssl), old_ssl);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON (settings->spinbutton_port), port);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON (settings->spinbutton_priority), priority);
        gtk_entry_set_text (GTK_ENTRY (settings->entry_id), id ? id : "");
-       gtk_entry_set_text (GTK_ENTRY (settings->entry_password), password ? password : "");
        gtk_entry_set_text (GTK_ENTRY (settings->entry_resource), resource ? resource : "");
        gtk_entry_set_text (GTK_ENTRY (settings->entry_server), server ? server : "");
-       gtk_spin_button_set_value (GTK_SPIN_BUTTON (settings->spinbutton_port), port);
+       gtk_entry_set_text (GTK_ENTRY (settings->entry_password), password ? password : "");
+       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (settings->checkbutton_ssl), old_ssl);
+       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (settings->checkbutton_ignore_ssl_errors), ignore_ssl_errors);
+       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (settings->checkbutton_encryption), encryption);
 
        gtk_widget_set_sensitive (settings->button_forget, !G_STR_EMPTY (password));
 
@@ -220,9 +267,9 @@ empathy_account_widget_jabber_new (McAccount *account)
 {
        EmpathyAccountWidgetJabber *settings;
        GladeXML                  *glade;
-       GtkSizeGroup              *size_group;
        GtkWidget                 *label_id, *label_password;
-       GtkWidget                 *label_server, *label_resource, *label_port; 
+       GtkWidget                 *label_server, *label_resource;
+       GtkWidget                 *label_port, *label_priority; 
 
        settings = g_new0 (EmpathyAccountWidgetJabber, 1);
        settings->account = g_object_ref (account);
@@ -235,6 +282,7 @@ empathy_account_widget_jabber_new (McAccount *account)
                                       "label_id", &label_id,
                                       "label_password", &label_password,
                                       "label_resource", &label_resource,
+                                      "label_priority", &label_priority,
                                       "label_server", &label_server,
                                       "label_port", &label_port,
                                       "entry_id", &settings->entry_id,
@@ -242,7 +290,10 @@ empathy_account_widget_jabber_new (McAccount *account)
                                       "entry_resource", &settings->entry_resource,
                                       "entry_server", &settings->entry_server,
                                       "spinbutton_port", &settings->spinbutton_port,
+                                      "spinbutton_priority", &settings->spinbutton_priority,
                                       "checkbutton_ssl", &settings->checkbutton_ssl,
+                                      "checkbutton_ignore_ssl_errors", &settings->checkbutton_ignore_ssl_errors,
+                                      "checkbutton_encryption", &settings->checkbutton_encryption,
                                       NULL);
 
        account_widget_jabber_setup (settings);
@@ -253,29 +304,18 @@ empathy_account_widget_jabber_new (McAccount *account)
                              "button_forget", "clicked", account_widget_jabber_button_forget_clicked_cb,
                              "entry_password", "changed", account_widget_jabber_entry_changed_cb,
                              "spinbutton_port", "value-changed", account_widget_jabber_value_changed_cb,
+                             "spinbutton_priority", "value-changed", account_widget_jabber_value_changed_cb,
                              "entry_id", "focus-out-event", account_widget_jabber_entry_focus_cb,
                              "entry_password", "focus-out-event", account_widget_jabber_entry_focus_cb,
                              "entry_resource", "focus-out-event", account_widget_jabber_entry_focus_cb,
                              "entry_server", "focus-out-event", account_widget_jabber_entry_focus_cb,
                              "checkbutton_ssl", "toggled", account_widget_jabber_checkbutton_toggled_cb,
+                             "checkbutton_ignore_ssl_errors", "toggled", account_widget_jabber_checkbutton_toggled_cb,
+                             "checkbutton_encryption", "toggled", account_widget_jabber_checkbutton_toggled_cb,
                              NULL);
 
        g_object_unref (glade);
 
-       /* Set up remaining widgets */
-       size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
-
-       gtk_size_group_add_widget (size_group, label_id);
-       gtk_size_group_add_widget (size_group, label_password);
-       gtk_size_group_add_widget (size_group, label_resource);
-       gtk_size_group_add_widget (size_group, label_server);
-       gtk_size_group_add_widget (size_group, label_port);
-
-       g_object_unref (size_group);
-
-  gtk_editable_select_region (GTK_EDITABLE (settings->entry_id), 0, -1);
-  gtk_widget_grab_focus (settings->entry_id);
-
        gtk_widget_show (settings->vbox_settings);
 
        return settings->vbox_settings;