aboutsummaryrefslogtreecommitdiffstats
path: root/libempathy-gtk
diff options
context:
space:
mode:
authorXavier Claessens <xclaesse@src.gnome.org>2008-02-11 01:12:07 +0800
committerXavier Claessens <xclaesse@src.gnome.org>2008-02-11 01:12:07 +0800
commita84d2ff1a684995ce75ff78c57c0e1ac2a4bf7d5 (patch)
treeece047db6008d25e2c5effa0b85a4584f90a6eec /libempathy-gtk
parent88efb8a4070d91d833186906a4099b445c60975d (diff)
downloadgsoc2013-empathy-a84d2ff1a684995ce75ff78c57c0e1ac2a4bf7d5.tar
gsoc2013-empathy-a84d2ff1a684995ce75ff78c57c0e1ac2a4bf7d5.tar.gz
gsoc2013-empathy-a84d2ff1a684995ce75ff78c57c0e1ac2a4bf7d5.tar.bz2
gsoc2013-empathy-a84d2ff1a684995ce75ff78c57c0e1ac2a4bf7d5.tar.lz
gsoc2013-empathy-a84d2ff1a684995ce75ff78c57c0e1ac2a4bf7d5.tar.xz
gsoc2013-empathy-a84d2ff1a684995ce75ff78c57c0e1ac2a4bf7d5.tar.zst
gsoc2013-empathy-a84d2ff1a684995ce75ff78c57c0e1ac2a4bf7d5.zip
Add a generic UI to make easy building UI for protocol specific settings. Port empathy-account-widget-*.[ch] to use that API.
svn path=/trunk/; revision=621
Diffstat (limited to 'libempathy-gtk')
-rw-r--r--libempathy-gtk/Makefile.am10
-rw-r--r--libempathy-gtk/empathy-account-widget-generic.c327
-rw-r--r--libempathy-gtk/empathy-account-widget-jabber.c322
-rw-r--r--libempathy-gtk/empathy-account-widget-jabber.h33
-rw-r--r--libempathy-gtk/empathy-account-widget-msn.c214
-rw-r--r--libempathy-gtk/empathy-account-widget-msn.h34
-rw-r--r--libempathy-gtk/empathy-account-widget-salut.c180
-rw-r--r--libempathy-gtk/empathy-account-widget-salut.h34
-rw-r--r--libempathy-gtk/empathy-account-widget.c589
-rw-r--r--libempathy-gtk/empathy-account-widget.h (renamed from libempathy-gtk/empathy-account-widget-generic.h)15
-rw-r--r--libempathy-gtk/empathy-accounts-dialog.c5
-rw-r--r--libempathy-gtk/empathy-ui-utils.c39
-rw-r--r--libempathy-gtk/empathy-ui-utils.h3
13 files changed, 633 insertions, 1172 deletions
diff --git a/libempathy-gtk/Makefile.am b/libempathy-gtk/Makefile.am
index 6d5eeab7d..24c933714 100644
--- a/libempathy-gtk/Makefile.am
+++ b/libempathy-gtk/Makefile.am
@@ -22,10 +22,7 @@ libempathy_gtk_la_SOURCES = \
empathy-contact-widget.c \
empathy-contact-dialogs.c \
empathy-accounts-dialog.c \
- empathy-account-widget-generic.c \
- empathy-account-widget-jabber.c \
- empathy-account-widget-msn.c \
- empathy-account-widget-salut.c \
+ empathy-account-widget.c \
empathy-profile-chooser.c \
empathy-cell-renderer-expander.c \
empathy-cell-renderer-text.c \
@@ -78,10 +75,7 @@ libempathy_gtk_headers = \
empathy-contact-widget.h \
empathy-contact-dialogs.h \
empathy-accounts-dialog.h \
- empathy-account-widget-generic.h \
- empathy-account-widget-jabber.h \
- empathy-account-widget-msn.h \
- empathy-account-widget-salut.h \
+ empathy-account-widget.h \
empathy-profile-chooser.h \
empathy-cell-renderer-expander.h \
empathy-cell-renderer-text.h \
diff --git a/libempathy-gtk/empathy-account-widget-generic.c b/libempathy-gtk/empathy-account-widget-generic.c
deleted file mode 100644
index 8ade3f26f..000000000
--- a/libempathy-gtk/empathy-account-widget-generic.c
+++ /dev/null
@@ -1,327 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2006-2007 Imendio AB
- * Copyright (C) 2007 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Authors: Xavier Claessens <xclaesse@gmail.com>
- * Martyn Russell <martyn@imendio.com>
- */
-
-#include <config.h>
-
-#include <string.h>
-
-#include <gtk/gtk.h>
-#include <glib/gi18n.h>
-
-#include <libmissioncontrol/mc-account.h>
-#include <libmissioncontrol/mc-protocol.h>
-
-#include <libempathy/empathy-debug.h>
-
-#include "empathy-account-widget-generic.h"
-#include "empathy-ui-utils.h"
-
-#define DEBUG_DOMAIN "AccountWidgetGeneric"
-
-typedef struct {
- McAccount *account;
-
- GtkWidget *sw;
- GtkWidget *table_settings;
-
- guint n_rows;
-} EmpathyAccountWidgetGeneric;
-
-static gboolean
-account_widget_generic_entry_focus_cb (GtkWidget *widget,
- GdkEventFocus *event,
- EmpathyAccountWidgetGeneric *settings)
-{
- const gchar *str;
- const gchar *param_name;
-
- str = gtk_entry_get_text (GTK_ENTRY (widget));
- param_name = g_object_get_data (G_OBJECT (widget), "param_name");
-
- mc_account_set_param_string (settings->account, param_name, str);
-
- return FALSE;
-}
-
-static void
-account_widget_generic_int_changed_cb (GtkWidget *widget,
- EmpathyAccountWidgetGeneric *settings)
-{
- const gchar *param_name;
- gint value;
-
- value = gtk_spin_button_get_value (GTK_SPIN_BUTTON (widget));
- param_name = g_object_get_data (G_OBJECT (widget), "param_name");
-
- mc_account_set_param_int (settings->account, param_name, value);
-}
-
-static void
-account_widget_generic_checkbutton_toggled_cb (GtkWidget *widget,
- EmpathyAccountWidgetGeneric *settings)
-{
- gboolean active;
- const gchar *param_name;
-
- active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
- param_name = g_object_get_data (G_OBJECT (widget), "param_name");
-
- mc_account_set_param_boolean (settings->account, param_name, active);
-}
-
-static gchar *
-account_widget_generic_format_param_name (const gchar *param_name)
-{
- gchar *str;
- gchar *p;
-
- str = g_strdup (param_name);
-
- if (str && g_ascii_isalpha (str[0])) {
- str[0] = g_ascii_toupper (str[0]);
- }
-
- while ((p = strchr (str, '-')) != NULL) {
- if (p[1] != '\0' && g_ascii_isalpha (p[1])) {
- p[0] = ' ';
- p[1] = g_ascii_toupper (p[1]);
- }
-
- p++;
- }
-
- return str;
-}
-
-static void
-account_widget_generic_setup_foreach (McProtocolParam *param,
- EmpathyAccountWidgetGeneric *settings)
-{
- GtkWidget *widget = NULL;
- gchar *param_name_formatted;
-
- param_name_formatted = account_widget_generic_format_param_name (param->name);
-
- gtk_table_resize (GTK_TABLE (settings->table_settings),
- ++settings->n_rows,
- 2);
-
- if (param->signature[0] == 's') {
- gchar *str = NULL;
-
- str = g_strdup_printf (_("%s:"), param_name_formatted);
- widget = gtk_label_new (str);
- gtk_misc_set_alignment (GTK_MISC (widget), 0, 0.5);
- g_free (str);
-
- gtk_table_attach (GTK_TABLE (settings->table_settings),
- widget,
- 0, 1,
- settings->n_rows - 1, settings->n_rows,
- GTK_FILL, 0,
- 0, 0);
-
- str = NULL;
- widget = gtk_entry_new ();
- mc_account_get_param_string (settings->account,
- param->name,
- &str);
- if (str) {
- gtk_entry_set_text (GTK_ENTRY (widget), str);
- g_free (str);
- }
-
- if (strstr (param->name, "password")) {
- gtk_entry_set_visibility (GTK_ENTRY (widget), FALSE);
- }
-
- g_signal_connect (widget, "focus-out-event",
- G_CALLBACK (account_widget_generic_entry_focus_cb),
- settings);
-
- gtk_table_attach (GTK_TABLE (settings->table_settings),
- widget,
- 1, 2,
- settings->n_rows - 1, settings->n_rows,
- GTK_FILL | GTK_EXPAND, 0,
- 0, 0);
- }
- /* int types: ynqiuxt. double type is 'd' */
- else if (param->signature[0] == 'y' ||
- param->signature[0] == 'n' ||
- param->signature[0] == 'q' ||
- param->signature[0] == 'i' ||
- param->signature[0] == 'u' ||
- param->signature[0] == 'x' ||
- param->signature[0] == 't' ||
- param->signature[0] == 'd') {
- gchar *str = NULL;
- gint value = 0;
- gdouble minint = 0;
- gdouble maxint = 0;
- gdouble step = 1;
- switch (param->signature[0]) {
- case 'y': minint = G_MININT8; maxint = G_MAXINT8; break;
- case 'n': minint = G_MININT16; maxint = G_MAXINT16; break;
- case 'q': minint = 0; maxint = G_MAXUINT16; break;
- case 'i': minint = G_MININT32; maxint = G_MAXINT32; break;
- case 'u': minint = 0; maxint = G_MAXUINT32; break;
- case 'x': minint = G_MININT64; maxint = G_MAXINT64; break;
- case 't': minint = 0; maxint = G_MAXUINT64; break;
- case 'd': minint = G_MININT32; maxint = G_MAXINT32; step = 0.1; break;
- }
-
- str = g_strdup_printf (_("%s:"), param_name_formatted);
- widget = gtk_label_new (str);
- gtk_misc_set_alignment (GTK_MISC (widget), 0, 0.5);
- g_free (str);
-
- gtk_table_attach (GTK_TABLE (settings->table_settings),
- widget,
- 0, 1,
- settings->n_rows - 1, settings->n_rows,
- GTK_FILL, 0,
- 0, 0);
-
- widget = gtk_spin_button_new_with_range (minint, maxint, step);
- mc_account_get_param_int (settings->account,
- param->name,
- &value);
- gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), value);
-
- g_signal_connect (widget, "value-changed",
- G_CALLBACK (account_widget_generic_int_changed_cb),
- settings);
-
- gtk_table_attach (GTK_TABLE (settings->table_settings),
- widget,
- 1, 2,
- settings->n_rows - 1, settings->n_rows,
- GTK_FILL | GTK_EXPAND, 0,
- 0, 0);
- }
- else if (param->signature[0] == 'b') {
- gboolean value = FALSE;
-
- mc_account_get_param_boolean (settings->account,
- param->name,
- &value);
-
- widget = gtk_check_button_new_with_label (param_name_formatted);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), value);
-
- g_signal_connect (widget, "toggled",
- G_CALLBACK (account_widget_generic_checkbutton_toggled_cb),
- settings);
-
- gtk_table_attach (GTK_TABLE (settings->table_settings),
- widget,
- 0, 2,
- settings->n_rows - 1, settings->n_rows,
- GTK_FILL | GTK_EXPAND, 0,
- 0, 0);
- } else {
- empathy_debug (DEBUG_DOMAIN,
- "Unknown signature for param %s: %s\n",
- param_name_formatted, param->signature);
- }
-
- if (widget) {
- g_object_set_data_full (G_OBJECT (widget), "param_name",
- g_strdup (param->name), g_free);
- }
-
- g_free (param_name_formatted);
-}
-
-static void
-accounts_widget_generic_setup (EmpathyAccountWidgetGeneric *settings)
-{
- McProtocol *protocol;
- McProfile *profile;
- GSList *params;
-
- profile = mc_account_get_profile (settings->account);
- protocol = mc_profile_get_protocol (profile);
-
- if (!protocol) {
- /* The CM is not installed, MC shouldn't list them
- * see SF bug #1688779
- * FIXME: We should display something asking the user to
- * install the CM
- */
- g_object_unref (profile);
- return;
- }
-
- params = mc_protocol_get_params (protocol);
-
- g_slist_foreach (params,
- (GFunc) account_widget_generic_setup_foreach,
- settings);
-
- g_slist_free (params);
- g_object_unref (profile);
- g_object_unref (protocol);
-}
-
-static void
-account_widget_generic_destroy_cb (GtkWidget *widget,
- EmpathyAccountWidgetGeneric *settings)
-{
- g_object_unref (settings->account);
- g_free (settings);
-}
-
-GtkWidget *
-empathy_account_widget_generic_new (McAccount *account)
-{
- EmpathyAccountWidgetGeneric *settings;
-
- g_return_val_if_fail (MC_IS_ACCOUNT (account), NULL);
-
- settings = g_new0 (EmpathyAccountWidgetGeneric, 1);
-
- settings->account = g_object_ref (account);
-
- settings->table_settings = gtk_table_new (0, 2, FALSE);
- gtk_table_set_row_spacings (GTK_TABLE (settings->table_settings), 6);
- gtk_table_set_col_spacings (GTK_TABLE (settings->table_settings), 6);
- settings->sw = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (settings->sw),
- GTK_POLICY_AUTOMATIC,
- GTK_POLICY_AUTOMATIC);
- gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (settings->sw),
- settings->table_settings);
-
- accounts_widget_generic_setup (settings);
-
- g_signal_connect (settings->sw, "destroy",
- G_CALLBACK (account_widget_generic_destroy_cb),
- settings);
-
- gtk_widget_show_all (settings->sw);
-
- return settings->sw;
-}
diff --git a/libempathy-gtk/empathy-account-widget-jabber.c b/libempathy-gtk/empathy-account-widget-jabber.c
deleted file mode 100644
index b3339f128..000000000
--- a/libempathy-gtk/empathy-account-widget-jabber.c
+++ /dev/null
@@ -1,322 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2007 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors: Xavier Claessens <xclaesse@gmail.com>
- */
-
-#include "config.h"
-
-#include <ctype.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <glib/gi18n.h>
-#include <gtk/gtk.h>
-#include <glade/glade.h>
-
-#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
-
-typedef struct {
- McAccount *account;
-
- GtkWidget *vbox_settings;
- GtkWidget *button_forget;
- GtkWidget *entry_id;
- GtkWidget *entry_password;
- 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)
-{
- const gchar *param;
- const gchar *str;
-
- if (widget == settings->entry_password) {
- param = "password";
- }
- else if (widget == settings->entry_resource) {
- param = "resource";
- }
- else if (widget == settings->entry_server) {
- param = "server";
- }
- else if (widget == settings->entry_id) {
- param = "account";
- } else {
- return FALSE;
- }
-
- str = gtk_entry_get_text (GTK_ENTRY (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);
- }
-
- return FALSE;
-}
-
-static void
-account_widget_jabber_entry_changed_cb (GtkWidget *widget,
- EmpathyAccountWidgetJabber *settings)
-{
- if (widget == settings->entry_password) {
- const gchar *str;
-
- str = gtk_entry_get_text (GTK_ENTRY (widget));
- gtk_widget_set_sensitive (settings->button_forget, !G_STR_EMPTY (str));
- }
-}
-
-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;
-
- mc_account_get_param_int (settings->account, "port", &port);
-
- if (value) {
- if (port == PORT_WITHOUT_SSL || port == 0) {
- port = PORT_WITH_SSL;
- }
- } else {
- if (port == PORT_WITH_SSL || port == 0) {
- port = PORT_WITHOUT_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);
- }
-}
-
-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) {
- 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;
-
- 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);
- }
-}
-
-static void
-account_widget_jabber_button_forget_clicked_cb (GtkWidget *button,
- EmpathyAccountWidgetJabber *settings)
-{
- empathy_debug (DEBUG_DOMAIN, "Unset password");
- mc_account_unset_param (settings->account, "password");
- gtk_entry_set_text (GTK_ENTRY (settings->entry_password), "");
-}
-
-static void
-account_widget_jabber_destroy_cb (GtkWidget *widget,
- EmpathyAccountWidgetJabber *settings)
-{
- g_object_unref (settings->account);
- g_free (settings);
-}
-
-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;
- const gchar *server;
-
- profile = mc_account_get_profile (settings->account);
- server = mc_profile_get_default_account_domain (profile);
- if (server) {
- id = g_strconcat ("user@", server, NULL);
- }
- g_object_unref (profile);
- }
-
- 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_resource), resource ? resource : "");
- gtk_entry_set_text (GTK_ENTRY (settings->entry_server), server ? server : "");
- 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));
-
- g_free (id);
- g_free (resource);
- g_free (server);
- g_free (password);
-}
-
-GtkWidget *
-empathy_account_widget_jabber_new (McAccount *account)
-{
- EmpathyAccountWidgetJabber *settings;
- GladeXML *glade;
- GtkWidget *label_id, *label_password;
- GtkWidget *label_server, *label_resource;
- GtkWidget *label_port, *label_priority;
-
- settings = g_new0 (EmpathyAccountWidgetJabber, 1);
- settings->account = g_object_ref (account);
-
- glade = empathy_glade_get_file ("empathy-account-widget-jabber.glade",
- "vbox_jabber_settings",
- NULL,
- "vbox_jabber_settings", &settings->vbox_settings,
- "button_forget", &settings->button_forget,
- "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,
- "entry_password", &settings->entry_password,
- "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);
-
- empathy_glade_connect (glade,
- settings,
- "vbox_jabber_settings", "destroy", account_widget_jabber_destroy_cb,
- "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);
-
- gtk_widget_show (settings->vbox_settings);
-
- return settings->vbox_settings;
-}
diff --git a/libempathy-gtk/empathy-account-widget-jabber.h b/libempathy-gtk/empathy-account-widget-jabber.h
deleted file mode 100644
index 78020c933..000000000
--- a/libempathy-gtk/empathy-account-widget-jabber.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2007 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors: Xavier Claessens <xclaesse@gmail.com>
- */
-
-#ifndef __EMPATHY_ACCOUNT_WIDGET_JABBER_H__
-#define __EMPATHY_ACCOUNT_WIDGET_JABBER_H__
-
-#include <libmissioncontrol/mc-account.h>
-
-G_BEGIN_DECLS
-
-GtkWidget *empathy_account_widget_jabber_new (McAccount *account);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_ACCOUNT_WIDGET_JABBER_H__ */
diff --git a/libempathy-gtk/empathy-account-widget-msn.c b/libempathy-gtk/empathy-account-widget-msn.c
deleted file mode 100644
index edcd185ad..000000000
--- a/libempathy-gtk/empathy-account-widget-msn.c
+++ /dev/null
@@ -1,214 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2007 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors: Xavier Claessens <xclaesse@gmail.com>
- * Cosimo Cecchi <anarki@lilik.it>
- */
-
-#include "config.h"
-
-#include <ctype.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <glib/gi18n.h>
-#include <gtk/gtk.h>
-#include <glade/glade.h>
-
-#include <libmissioncontrol/mc-profile.h>
-
-#include <libempathy/empathy-utils.h>
-#include <libempathy/empathy-debug.h>
-
-#include "empathy-account-widget-msn.h"
-#include "empathy-ui-utils.h"
-
-#define DEBUG_DOMAIN "AccountWidgetMSN"
-
-typedef struct {
- McAccount *account;
-
- GtkWidget *vbox_settings;
- GtkWidget *button_forget;
- GtkWidget *entry_id;
- GtkWidget *entry_password;
- GtkWidget *entry_server;
- GtkWidget *spinbutton_port;
-} EmpathyAccountWidgetMSN;
-
-static gboolean
-account_widget_msn_entry_focus_cb (GtkWidget *widget,
- GdkEventFocus *event,
- EmpathyAccountWidgetMSN *settings)
-{
- const gchar *param;
- const gchar *str;
-
- if (widget == settings->entry_password) {
- param = "password";
- }
- else if (widget == settings->entry_server) {
- param = "server";
- }
- else if (widget == settings->entry_id) {
- param = "account";
- } else {
- return FALSE;
- }
-
- str = gtk_entry_get_text (GTK_ENTRY (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);
- }
-
- return FALSE;
-}
-
-static void
-account_widget_msn_entry_changed_cb (GtkWidget *widget,
- EmpathyAccountWidgetMSN *settings)
-{
- if (widget == settings->entry_password) {
- const gchar *str;
-
- str = gtk_entry_get_text (GTK_ENTRY (widget));
- gtk_widget_set_sensitive (settings->button_forget, !G_STR_EMPTY (str));
- }
-}
-
-static void
-account_widget_msn_value_changed_cb (GtkWidget *spinbutton,
- EmpathyAccountWidgetMSN *settings)
-{
- gdouble value;
- const gchar *param;
-
- value = gtk_spin_button_get_value (GTK_SPIN_BUTTON (spinbutton));
-
- if (spinbutton == settings->spinbutton_port) {
- param = "port";
- } 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;
-
- 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);
- }
-}
-
-static void
-account_widget_msn_button_forget_clicked_cb (GtkWidget *button,
- EmpathyAccountWidgetMSN *settings)
-{
- empathy_debug (DEBUG_DOMAIN, "Unset password");
- mc_account_unset_param (settings->account, "password");
- gtk_entry_set_text (GTK_ENTRY (settings->entry_password), "");
-}
-
-static void
-account_widget_msn_destroy_cb (GtkWidget *widget,
- EmpathyAccountWidgetMSN *settings)
-{
- g_object_unref (settings->account);
- g_free (settings);
-}
-
-static void
-account_widget_msn_setup (EmpathyAccountWidgetMSN *settings)
-{
- guint port = 0;
- gchar *id = NULL;
- gchar *server = NULL;
- gchar *password = NULL;
-
- mc_account_get_param_int (settings->account, "port", &port);
- mc_account_get_param_string (settings->account, "account", &id);
- mc_account_get_param_string (settings->account, "server", &server);
- mc_account_get_param_string (settings->account, "password", &password);
-
- gtk_spin_button_set_value (GTK_SPIN_BUTTON (settings->spinbutton_port), port);
- gtk_entry_set_text (GTK_ENTRY (settings->entry_id), id ? id : "");
- gtk_entry_set_text (GTK_ENTRY (settings->entry_server), server ? server : "");
- gtk_entry_set_text (GTK_ENTRY (settings->entry_password), password ? password : "");
-
- gtk_widget_set_sensitive (settings->button_forget, !G_STR_EMPTY (password));
-
- g_free (id);
- g_free (server);
- g_free (password);
-}
-
-GtkWidget *
-empathy_account_widget_msn_new (McAccount *account)
-{
- EmpathyAccountWidgetMSN *settings;
- GladeXML *glade;
-
- settings = g_new0 (EmpathyAccountWidgetMSN, 1);
- settings->account = g_object_ref (account);
-
- glade = empathy_glade_get_file ("empathy-account-widget-msn.glade",
- "vbox_msn_settings",
- NULL,
- "vbox_msn_settings", &settings->vbox_settings,
- "button_forget", &settings->button_forget,
- "entry_id", &settings->entry_id,
- "entry_password", &settings->entry_password,
- "entry_server", &settings->entry_server,
- "spinbutton_port", &settings->spinbutton_port,
- NULL);
-
- account_widget_msn_setup (settings);
-
- empathy_glade_connect (glade,
- settings,
- "vbox_msn_settings", "destroy", account_widget_msn_destroy_cb,
- "button_forget", "clicked", account_widget_msn_button_forget_clicked_cb,
- "entry_id", "changed", account_widget_msn_entry_changed_cb,
- "entry_password", "changed", account_widget_msn_entry_changed_cb,
- "entry_server", "changed", account_widget_msn_entry_changed_cb,
- "entry_id", "focus-out-event", account_widget_msn_entry_focus_cb,
- "entry_password", "focus-out-event", account_widget_msn_entry_focus_cb,
- "entry_server", "focus-out-event", account_widget_msn_entry_focus_cb,
- "spinbutton_port", "value-changed", account_widget_msn_value_changed_cb,
- NULL);
-
- g_object_unref (glade);
-
- gtk_widget_show (settings->vbox_settings);
-
- return settings->vbox_settings;
-}
diff --git a/libempathy-gtk/empathy-account-widget-msn.h b/libempathy-gtk/empathy-account-widget-msn.h
deleted file mode 100644
index a29a1891b..000000000
--- a/libempathy-gtk/empathy-account-widget-msn.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2007 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors: Xavier Claessens <xclaesse@gmail.com>
- * Cosimo Cecchi <anarki@lilik.it>
- */
-
-#ifndef __EMPATHY_ACCOUNT_WIDGET_MSN_H__
-#define __EMPATHY_ACCOUNT_WIDGET_MSN_H__
-
-#include <libmissioncontrol/mc-account.h>
-
-G_BEGIN_DECLS
-
-GtkWidget *empathy_account_widget_msn_new (McAccount *account);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_ACCOUNT_WIDGET_MSN_H__ */
diff --git a/libempathy-gtk/empathy-account-widget-salut.c b/libempathy-gtk/empathy-account-widget-salut.c
deleted file mode 100644
index 78dce2312..000000000
--- a/libempathy-gtk/empathy-account-widget-salut.c
+++ /dev/null
@@ -1,180 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2007 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors: Xavier Claessens <xclaesse@gmail.com>
- * Cosimo Cecchi <anarki@lilik.it>
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-
-#include <glib/gi18n.h>
-#include <gtk/gtk.h>
-#include <glade/glade.h>
-
-#include <libmissioncontrol/mc-profile.h>
-
-#include <libempathy/empathy-utils.h>
-#include <libempathy/empathy-debug.h>
-
-#include "empathy-account-widget-salut.h"
-#include "empathy-ui-utils.h"
-
-#define DEBUG_DOMAIN "AccountWidgetMSN"
-
-typedef struct {
- McAccount *account;
-
- GtkWidget *vbox_settings;
- GtkWidget *entry_nickname;
- GtkWidget *entry_published;
- GtkWidget *entry_first_name;
- GtkWidget *entry_last_name;
- GtkWidget *entry_email;
- GtkWidget *entry_jid;
-} EmpathyAccountWidgetSalut;
-
-static gboolean
-account_widget_salut_entry_focus_cb (GtkWidget *widget,
- GdkEventFocus *event,
- EmpathyAccountWidgetSalut *settings)
-{
- const gchar *param;
- const gchar *str;
-
- if (widget == settings->entry_nickname) {
- param = "nickname";
- }
- else if (widget == settings->entry_published) {
- param = "published-name";
- }
- else if (widget == settings->entry_first_name) {
- param = "first-name";
- }
- else if (widget == settings->entry_last_name) {
- param = "last-name";
- }
- else if (widget == settings->entry_email) {
- param = "email";
- }
- else if (widget == settings->entry_jid) {
- param = "jid";
- }
- else {
- return FALSE;
- }
-
- str = gtk_entry_get_text (GTK_ENTRY (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);
- }
-
- return FALSE;
-}
-
-static void
-account_widget_salut_destroy_cb (GtkWidget *widget,
- EmpathyAccountWidgetSalut *settings)
-{
- g_object_unref (settings->account);
- g_free (settings);
-}
-
-static void
-account_widget_salut_setup (EmpathyAccountWidgetSalut *settings)
-{
- gchar *nickname = NULL;
- gchar *published_name = NULL;
- gchar *first_name = NULL;
- gchar *last_name = NULL;
- gchar *email = NULL;
- gchar *jid = NULL;
-
- mc_account_get_param_string (settings->account, "nickname", &nickname);
- mc_account_get_param_string (settings->account, "published-name", &published_name);
- mc_account_get_param_string (settings->account, "first-name", &first_name);
- mc_account_get_param_string (settings->account, "last-name", &last_name);
- mc_account_get_param_string (settings->account, "email", &email);
- mc_account_get_param_string (settings->account, "jid", &jid);
-
- gtk_entry_set_text (GTK_ENTRY (settings->entry_nickname), nickname ? nickname : "");
- gtk_entry_set_text (GTK_ENTRY (settings->entry_published), published_name ? published_name : "");
- gtk_entry_set_text (GTK_ENTRY (settings->entry_first_name), first_name ? first_name : "");
- gtk_entry_set_text (GTK_ENTRY (settings->entry_last_name), last_name ? last_name : "");
- gtk_entry_set_text (GTK_ENTRY (settings->entry_email), email ? email : "");
- gtk_entry_set_text (GTK_ENTRY (settings->entry_jid), jid ? jid : "");
-
- g_free (nickname);
- g_free (published_name);
- g_free (first_name);
- g_free (last_name);
- g_free (email);
- g_free (jid);
-}
-
-
-GtkWidget *
-empathy_account_widget_salut_new (McAccount *account)
-{
- EmpathyAccountWidgetSalut *settings;
- GladeXML *glade;
-
- settings = g_new0 (EmpathyAccountWidgetSalut, 1);
- settings->account = g_object_ref (account);
-
- glade = empathy_glade_get_file ("empathy-account-widget-salut.glade",
- "vbox_salut_settings",
- NULL,
- "vbox_salut_settings", &settings->vbox_settings,
- "entry_published", &settings->entry_published,
- "entry_nickname", &settings->entry_nickname,
- "entry_first_name", &settings->entry_first_name,
- "entry_last_name", &settings->entry_last_name,
- "entry_email", &settings->entry_email,
- "entry_jid", &settings->entry_jid,
- NULL);
-
- account_widget_salut_setup (settings);
-
- empathy_glade_connect (glade,
- settings,
- "vbox_salut_settings", "destroy", account_widget_salut_destroy_cb,
- "entry_nickname", "focus-out-event", account_widget_salut_entry_focus_cb,
- "entry_published", "focus-out-event", account_widget_salut_entry_focus_cb,
- "entry_first_name", "focus-out-event", account_widget_salut_entry_focus_cb,
- "entry_last_name", "focus-out-event", account_widget_salut_entry_focus_cb,
- "entry_email", "focus-out-event", account_widget_salut_entry_focus_cb,
- "entry_jid", "focus-out-event", account_widget_salut_entry_focus_cb,
- NULL);
-
- g_object_unref (glade);
-
- gtk_widget_show (settings->vbox_settings);
-
- return settings->vbox_settings;
-}
diff --git a/libempathy-gtk/empathy-account-widget-salut.h b/libempathy-gtk/empathy-account-widget-salut.h
deleted file mode 100644
index 0cfe4f8b9..000000000
--- a/libempathy-gtk/empathy-account-widget-salut.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2007 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors: Xavier Claessens <xclaesse@gmail.com>
- * Cosimo Cecchi <anarki@lilik.it>
- */
-
-#ifndef __EMPATHY_ACCOUNT_WIDGET_SALUT_H__
-#define __EMPATHY_ACCOUNT_WIDGET_SALUT_H__
-
-#include <libmissioncontrol/mc-account.h>
-
-G_BEGIN_DECLS
-
-GtkWidget *empathy_account_widget_salut_new (McAccount *account);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_ACCOUNT_WIDGET_SALUT_H__ */
diff --git a/libempathy-gtk/empathy-account-widget.c b/libempathy-gtk/empathy-account-widget.c
new file mode 100644
index 000000000..aed38ff0f
--- /dev/null
+++ b/libempathy-gtk/empathy-account-widget.c
@@ -0,0 +1,589 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2006-2007 Imendio AB
+ * Copyright (C) 2007 Collabora Ltd.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Xavier Claessens <xclaesse@gmail.com>
+ * Martyn Russell <martyn@imendio.com>
+ */
+
+#include <config.h>
+
+#include <string.h>
+
+#include <gtk/gtk.h>
+#include <glib/gi18n.h>
+
+#include <libmissioncontrol/mc-account.h>
+#include <libmissioncontrol/mc-protocol.h>
+
+#include <libempathy/empathy-debug.h>
+
+#include "empathy-account-widget.h"
+#include "empathy-ui-utils.h"
+
+#define DEBUG_DOMAIN "AccountWidget"
+
+static gboolean
+account_widget_entry_focus_cb (GtkWidget *widget,
+ GdkEventFocus *event,
+ McAccount *account)
+{
+ const gchar *str;
+ const gchar *param_name;
+
+ str = gtk_entry_get_text (GTK_ENTRY (widget));
+ param_name = g_object_get_data (G_OBJECT (widget), "param_name");
+
+ if (G_STR_EMPTY (str)) {
+ gchar *value = NULL;
+
+ mc_account_unset_param (account, param_name);
+ mc_account_get_param_string (account, param_name, &value);
+ empathy_debug (DEBUG_DOMAIN, "Unset %s and restore to %s", param_name, value);
+ gtk_entry_set_text (GTK_ENTRY (widget), value ? value : "");
+ g_free (value);
+ } else {
+ empathy_debug (DEBUG_DOMAIN, "Setting %s to %s", param_name, str);
+ mc_account_set_param_string (account, param_name, str);
+ }
+
+ return FALSE;
+}
+
+static void
+account_widget_int_changed_cb (GtkWidget *widget,
+ McAccount *account)
+{
+ const gchar *param_name;
+ gint value;
+
+ value = gtk_spin_button_get_value (GTK_SPIN_BUTTON (widget));
+ param_name = g_object_get_data (G_OBJECT (widget), "param_name");
+
+ if (value == 0) {
+ gint val;
+
+ mc_account_unset_param (account, param_name);
+ mc_account_get_param_int (account, param_name, &val);
+ empathy_debug (DEBUG_DOMAIN, "Unset %s and restore to %d", param_name, val);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), val);
+ } else {
+ empathy_debug (DEBUG_DOMAIN, "Setting %s to %d", param_name, (gint) value);
+ mc_account_set_param_int (account, param_name, (gint) value);
+ }
+}
+
+static void
+account_widget_checkbutton_toggled_cb (GtkWidget *widget,
+ McAccount *account)
+{
+ gboolean value;
+ gboolean default_value;
+ const gchar *param_name;
+
+ value = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
+ param_name = g_object_get_data (G_OBJECT (widget), "param_name");
+
+ /* 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 (account, param_name);
+ mc_account_get_param_boolean (account, param_name, &default_value);
+
+ if (default_value == value) {
+ empathy_debug (DEBUG_DOMAIN, "Unset %s and restore to %d", param_name, default_value);
+ } else {
+ empathy_debug (DEBUG_DOMAIN, "Setting %s to %d", param_name, value);
+ mc_account_set_param_boolean (account, param_name, value);
+ }
+}
+
+static void
+account_widget_forget_clicked_cb (GtkWidget *button,
+ GtkWidget *entry)
+{
+ McAccount *account;
+ const gchar *param_name;
+
+ param_name = g_object_get_data (G_OBJECT (entry), "param_name");
+ account = g_object_get_data (G_OBJECT (entry), "account");
+
+ empathy_debug (DEBUG_DOMAIN, "Unset %s", param_name);
+ mc_account_unset_param (account, param_name);
+ gtk_entry_set_text (GTK_ENTRY (entry), "");
+}
+
+static void
+account_widget_password_changed_cb (GtkWidget *entry,
+ GtkWidget *button)
+{
+ const gchar *str;
+
+ str = gtk_entry_get_text (GTK_ENTRY (entry));
+ gtk_widget_set_sensitive (button, !G_STR_EMPTY (str));
+}
+
+static void
+account_widget_jabber_ssl_toggled_cb (GtkWidget *checkbutton_ssl,
+ GtkWidget *spinbutton_port)
+{
+ McAccount *account;
+ gboolean value;
+ gint port = 0;
+
+ value = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (checkbutton_ssl));
+ account = g_object_get_data (G_OBJECT (spinbutton_port), "account");
+ mc_account_get_param_int (account, "port", &port);
+
+ if (value) {
+ if (port == 5222 || port == 0) {
+ port = 5223;
+ }
+ } else {
+ if (port == 5223 || port == 0) {
+ port = 5222;
+ }
+ }
+
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (spinbutton_port), port);
+}
+
+static void
+account_widget_destroy_cb (GtkWidget *widget,
+ McAccount *account)
+{
+ empathy_debug (DEBUG_DOMAIN, "destroyed!");
+ g_object_unref (account);
+}
+
+static void
+account_widget_setup_widget (GtkWidget *widget,
+ McAccount *account,
+ const gchar *param_name)
+{
+ g_object_set_data_full (G_OBJECT (widget), "param_name",
+ g_strdup (param_name), g_free);
+
+ if (GTK_IS_SPIN_BUTTON (widget)) {
+ gint value = 0;
+
+ mc_account_get_param_int (account, param_name, &value);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), value);
+
+ g_signal_connect (widget, "value-changed",
+ G_CALLBACK (account_widget_int_changed_cb),
+ account);
+ }
+ else if (GTK_IS_ENTRY (widget)) {
+ gchar *str = NULL;
+
+ mc_account_get_param_string (account, param_name, &str);
+ gtk_entry_set_text (GTK_ENTRY (widget), str ? str : "");
+ g_free (str);
+
+ if (strstr (param_name, "password")) {
+ gtk_entry_set_visibility (GTK_ENTRY (widget), FALSE);
+ }
+
+ g_signal_connect (widget, "focus-out-event",
+ G_CALLBACK (account_widget_entry_focus_cb),
+ account);
+ }
+ else if (GTK_IS_TOGGLE_BUTTON (widget)) {
+ gboolean value = FALSE;
+
+ mc_account_get_param_boolean (account, param_name, &value);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), value);
+
+ g_signal_connect (widget, "toggled",
+ G_CALLBACK (account_widget_checkbutton_toggled_cb),
+ account);
+ } else {
+ empathy_debug (DEBUG_DOMAIN,
+ "Unknown type of widget for param %s",
+ param_name);
+ }
+}
+
+static gchar *
+account_widget_generic_format_param_name (const gchar *param_name)
+{
+ gchar *str;
+ gchar *p;
+
+ str = g_strdup (param_name);
+
+ if (str && g_ascii_isalpha (str[0])) {
+ str[0] = g_ascii_toupper (str[0]);
+ }
+
+ while ((p = strchr (str, '-')) != NULL) {
+ if (p[1] != '\0' && g_ascii_isalpha (p[1])) {
+ p[0] = ' ';
+ p[1] = g_ascii_toupper (p[1]);
+ }
+
+ p++;
+ }
+
+ return str;
+}
+
+static void
+accounts_widget_generic_setup (McAccount *account,
+ GtkWidget *table_settings)
+{
+ McProtocol *protocol;
+ McProfile *profile;
+ GSList *params, *l;
+ guint n_rows = 0;
+
+ profile = mc_account_get_profile (account);
+ protocol = mc_profile_get_protocol (profile);
+
+ if (!protocol) {
+ /* The CM is not installed, MC shouldn't list them
+ * see SF bug #1688779
+ * FIXME: We should display something asking the user to
+ * install the CM
+ */
+ g_object_unref (profile);
+ return;
+ }
+
+ params = mc_protocol_get_params (protocol);
+
+ for (l = params; l; l = l->next) {
+ McProtocolParam *param;
+ GtkWidget *widget = NULL;
+ gchar *param_name_formatted;
+
+ param = l->data;
+ param_name_formatted = account_widget_generic_format_param_name (param->name);
+ gtk_table_resize (GTK_TABLE (table_settings), ++n_rows, 2);
+
+ if (param->signature[0] == 's') {
+ gchar *str;
+
+ str = g_strdup_printf (_("%s:"), param_name_formatted);
+ widget = gtk_label_new (str);
+ gtk_misc_set_alignment (GTK_MISC (widget), 0, 0.5);
+ g_free (str);
+
+ gtk_table_attach (GTK_TABLE (table_settings),
+ widget,
+ 0, 1,
+ n_rows - 1, n_rows,
+ GTK_FILL, 0,
+ 0, 0);
+
+ widget = gtk_entry_new ();
+ gtk_table_attach (GTK_TABLE (table_settings),
+ widget,
+ 1, 2,
+ n_rows - 1, n_rows,
+ GTK_FILL | GTK_EXPAND, 0,
+ 0, 0);
+ }
+ /* int types: ynqiuxt. double type is 'd' */
+ else if (param->signature[0] == 'y' ||
+ param->signature[0] == 'n' ||
+ param->signature[0] == 'q' ||
+ param->signature[0] == 'i' ||
+ param->signature[0] == 'u' ||
+ param->signature[0] == 'x' ||
+ param->signature[0] == 't' ||
+ param->signature[0] == 'd') {
+ gchar *str = NULL;
+ gdouble minint = 0;
+ gdouble maxint = 0;
+ gdouble step = 1;
+
+ switch (param->signature[0]) {
+ case 'y': minint = G_MININT8; maxint = G_MAXINT8; break;
+ case 'n': minint = G_MININT16; maxint = G_MAXINT16; break;
+ case 'q': minint = 0; maxint = G_MAXUINT16; break;
+ case 'i': minint = G_MININT32; maxint = G_MAXINT32; break;
+ case 'u': minint = 0; maxint = G_MAXUINT32; break;
+ case 'x': minint = G_MININT64; maxint = G_MAXINT64; break;
+ case 't': minint = 0; maxint = G_MAXUINT64; break;
+ case 'd': minint = G_MININT32; maxint = G_MAXINT32; step = 0.1; break;
+ }
+
+ str = g_strdup_printf (_("%s:"), param_name_formatted);
+ widget = gtk_label_new (str);
+ gtk_misc_set_alignment (GTK_MISC (widget), 0, 0.5);
+ g_free (str);
+
+ gtk_table_attach (GTK_TABLE (table_settings),
+ widget,
+ 0, 1,
+ n_rows - 1, n_rows,
+ GTK_FILL, 0,
+ 0, 0);
+
+ widget = gtk_spin_button_new_with_range (minint, maxint, step);
+ gtk_table_attach (GTK_TABLE (table_settings),
+ widget,
+ 1, 2,
+ n_rows - 1, n_rows,
+ GTK_FILL | GTK_EXPAND, 0,
+ 0, 0);
+ }
+ else if (param->signature[0] == 'b') {
+ widget = gtk_check_button_new_with_label (param_name_formatted);
+ gtk_table_attach (GTK_TABLE (table_settings),
+ widget,
+ 0, 2,
+ n_rows - 1, n_rows,
+ GTK_FILL | GTK_EXPAND, 0,
+ 0, 0);
+ } else {
+ empathy_debug (DEBUG_DOMAIN,
+ "Unknown signature for param %s: %s",
+ param_name_formatted, param->signature);
+ }
+
+ if (widget) {
+ account_widget_setup_widget (widget, account, param->name);
+ }
+
+ g_free (param_name_formatted);
+ }
+
+ g_slist_free (params);
+ g_object_unref (profile);
+ g_object_unref (protocol);
+}
+
+static GtkWidget *
+account_widget_new_valist (McAccount *account,
+ GladeXML *gui,
+ const gchar *root,
+ const gchar *first_widget_name,
+ va_list args)
+{
+ GtkWidget *widget;
+ const gchar *widget_name;
+
+ for (widget_name = first_widget_name; widget_name; widget_name = va_arg (args, gchar*)) {
+ const gchar *param_name;
+
+ param_name = va_arg (args, gchar*);
+
+ widget = glade_xml_get_widget (gui, widget_name);
+
+ if (!widget) {
+ g_warning ("Glade is missing widget '%s'.", widget_name);
+ continue;
+ }
+
+ account_widget_setup_widget (widget, account, param_name);
+ }
+
+ widget = glade_xml_get_widget (gui, root);
+ g_signal_connect (widget, "destroy",
+ G_CALLBACK (account_widget_destroy_cb),
+ g_object_ref (account));
+
+ return widget;
+}
+
+GtkWidget *
+empathy_account_widget_new_with_glade (McAccount *account,
+ GladeXML *gui,
+ const gchar *root,
+ const gchar *first_widget_name,
+ ...)
+{
+ GtkWidget *widget;
+ va_list args;
+
+ g_return_val_if_fail (MC_IS_ACCOUNT (account), NULL);
+
+ va_start (args, first_widget_name);
+ widget = account_widget_new_valist (account, gui, root,
+ first_widget_name,
+ args);
+ va_end (args);
+
+ return widget;
+}
+
+void
+emapthy_account_widget_add_forget_button (McAccount *account,
+ GladeXML *glade,
+ const gchar *button,
+ const gchar *entry)
+{
+ GtkWidget *button_forget;
+ GtkWidget *entry_password;
+ gchar *password = NULL;
+
+ button_forget = glade_xml_get_widget (glade, button);
+ entry_password = glade_xml_get_widget (glade, entry);
+
+ mc_account_get_param_string (account, "password", &password);
+ gtk_widget_set_sensitive (button_forget, !G_STR_EMPTY (password));
+ g_free (password);
+
+ g_signal_connect (button_forget, "clicked",
+ G_CALLBACK (account_widget_forget_clicked_cb),
+ entry_password);
+ g_signal_connect (entry_password, "changed",
+ G_CALLBACK (account_widget_password_changed_cb),
+ button_forget);
+
+ g_object_set_data_full (G_OBJECT (entry_password), "account",
+ g_object_ref (account),
+ g_object_unref);
+}
+
+GtkWidget *
+empathy_account_widget_generic_new (McAccount *account)
+{
+ GtkWidget *table_settings;
+ GtkWidget *sw;
+
+ g_return_val_if_fail (MC_IS_ACCOUNT (account), NULL);
+
+ table_settings = gtk_table_new (0, 2, FALSE);
+ gtk_table_set_row_spacings (GTK_TABLE (table_settings), 6);
+ gtk_table_set_col_spacings (GTK_TABLE (table_settings), 6);
+ sw = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+ gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (sw),
+ table_settings);
+
+ accounts_widget_generic_setup (account, table_settings);
+
+ g_signal_connect (sw, "destroy",
+ G_CALLBACK (account_widget_destroy_cb),
+ g_object_ref (account));
+
+ gtk_widget_show_all (sw);
+
+ return sw;
+}
+
+GtkWidget *
+empathy_account_widget_salut_new (McAccount *account)
+{
+ GladeXML *glade;
+ GtkWidget *widget;
+
+ glade = empathy_glade_get ("empathy-account-widget-salut.glade",
+ "vbox_salut_settings",
+ NULL);
+
+ widget = empathy_account_widget_new_with_glade (account, glade,
+ "vbox_salut_settings",
+ "entry_published", "published-name",
+ "entry_nickname", "nickname",
+ "entry_first_name", "first-name",
+ "entry_last_name", "last-name",
+ "entry_email", "email",
+ "entry_jid", "jid",
+ NULL);
+
+ g_object_unref (glade);
+
+ gtk_widget_show (widget);
+
+ return widget;
+}
+
+GtkWidget *
+empathy_account_widget_msn_new (McAccount *account)
+{
+ GladeXML *glade;
+ GtkWidget *widget;
+
+ glade = empathy_glade_get ("empathy-account-widget-msn.glade",
+ "vbox_msn_settings",
+ NULL);
+
+ widget = empathy_account_widget_new_with_glade (account, glade,
+ "vbox_msn_settings",
+ "entry_id", "account",
+ "entry_password", "password",
+ "entry_server", "server",
+ "spinbutton_port", "port",
+ NULL);
+
+ emapthy_account_widget_add_forget_button (account, glade,
+ "button_forget",
+ "entry_password");
+
+ g_object_unref (glade);
+
+ gtk_widget_show (widget);
+
+ return widget;
+}
+
+GtkWidget *
+empathy_account_widget_jabber_new (McAccount *account)
+{
+ GladeXML *glade;
+ GtkWidget *widget;
+ GtkWidget *spinbutton_port;
+ GtkWidget *checkbutton_ssl;
+
+ glade = empathy_glade_get_file ("empathy-account-widget-jabber.glade",
+ "vbox_jabber_settings",
+ NULL,
+ "spinbutton_port", &spinbutton_port,
+ "checkbutton_ssl", &checkbutton_ssl,
+ NULL);
+
+ widget = empathy_account_widget_new_with_glade (account, glade,
+ "vbox_jabber_settings",
+ "entry_id", "account",
+ "entry_password", "password",
+ "entry_resource", "resource",
+ "entry_server", "server",
+ "spinbutton_port", "port",
+ "spinbutton_priority", "priority",
+ "checkbutton_ssl", "old-ssl",
+ "checkbutton_ignore_ssl_errors", "ignore-ssl-errors",
+ "checkbutton_encryption", "require-encryption",
+ NULL);
+
+ emapthy_account_widget_add_forget_button (account, glade,
+ "button_forget",
+ "entry_password");
+
+ g_signal_connect (checkbutton_ssl, "toggled",
+ G_CALLBACK (account_widget_jabber_ssl_toggled_cb),
+ spinbutton_port);
+
+ g_object_set_data_full (G_OBJECT (spinbutton_port), "account",
+ g_object_ref (account),
+ g_object_unref);
+
+ g_object_unref (glade);
+
+ gtk_widget_show (widget);
+
+ return widget;
+}
+
diff --git a/libempathy-gtk/empathy-account-widget-generic.h b/libempathy-gtk/empathy-account-widget.h
index 406e0a78d..191997ece 100644
--- a/libempathy-gtk/empathy-account-widget-generic.h
+++ b/libempathy-gtk/empathy-account-widget.h
@@ -26,12 +26,25 @@
#define __EMPATHY_ACCOUNT_WIDGET_GENERIC_H__
#include <gtk/gtk.h>
+#include <glade/glade.h>
#include <libmissioncontrol/mc-account.h>
G_BEGIN_DECLS
-GtkWidget *empathy_account_widget_generic_new (McAccount *account);
+GtkWidget *empathy_account_widget_new_with_glade (McAccount *account,
+ GladeXML *glade,
+ const gchar *root,
+ const gchar *first_widget_name,
+ ...);
+void emapthy_account_widget_add_forget_button (McAccount *account,
+ GladeXML *glade,
+ const gchar *button,
+ const gchar *entry);
+GtkWidget *empathy_account_widget_generic_new (McAccount *account);
+GtkWidget *empathy_account_widget_salut_new (McAccount *account);
+GtkWidget *empathy_account_widget_msn_new (McAccount *account);
+GtkWidget *empathy_account_widget_jabber_new (McAccount *account);
G_END_DECLS
diff --git a/libempathy-gtk/empathy-accounts-dialog.c b/libempathy-gtk/empathy-accounts-dialog.c
index 1be402a24..93b7b005b 100644
--- a/libempathy-gtk/empathy-accounts-dialog.c
+++ b/libempathy-gtk/empathy-accounts-dialog.c
@@ -45,10 +45,7 @@
#include "empathy-accounts-dialog.h"
#include "empathy-profile-chooser.h"
-#include "empathy-account-widget-generic.h"
-#include "empathy-account-widget-jabber.h"
-#include "empathy-account-widget-msn.h"
-#include "empathy-account-widget-salut.h"
+#include "empathy-account-widget.h"
#define DEBUG_DOMAIN "AccountDialog"
diff --git a/libempathy-gtk/empathy-ui-utils.c b/libempathy-gtk/empathy-ui-utils.c
index 0b29232bc..23875f722 100644
--- a/libempathy-gtk/empathy-ui-utils.c
+++ b/libempathy-gtk/empathy-ui-utils.c
@@ -53,17 +53,13 @@ struct SizeData {
gboolean preserve_aspect_ratio;
};
-static GladeXML *
-get_glade_file (const gchar *filename,
- const gchar *root,
- const gchar *domain,
- const gchar *first_required_widget,
- va_list args)
+GladeXML *
+empathy_glade_get (const gchar *filename,
+ const gchar *root,
+ const gchar *domain)
{
- gchar *path;
- GladeXML *gui;
- const char *name;
- GtkWidget **widget_ptr;
+ GladeXML *gui;
+ gchar *path;
path = g_build_filename (UNINSTALLED_GLADE_DIR, filename, NULL);
if (!g_file_test (path, G_FILE_TEST_EXISTS)) {
@@ -77,9 +73,24 @@ get_glade_file (const gchar *filename,
if (!gui) {
g_warning ("Couldn't find necessary glade file '%s'", filename);
- return NULL;
}
+ return gui;
+}
+
+static GladeXML *
+get_glade_file (const gchar *filename,
+ const gchar *root,
+ const gchar *domain,
+ const gchar *first_required_widget,
+ va_list args)
+{
+ GladeXML *gui;
+ const char *name;
+ GtkWidget **widget_ptr;
+
+ gui = empathy_glade_get (filename, root, domain);
+
for (name = first_required_widget; name; name = va_arg (args, char *)) {
widget_ptr = va_arg (args, void *);
@@ -114,11 +125,9 @@ empathy_glade_get_file_simple (const gchar *filename,
va_end (args);
- if (!gui) {
- return;
+ if (gui) {
+ g_object_unref (gui);
}
-
- g_object_unref (gui);
}
GladeXML *
diff --git a/libempathy-gtk/empathy-ui-utils.h b/libempathy-gtk/empathy-ui-utils.h
index 1fb29a97d..fedf8f7be 100644
--- a/libempathy-gtk/empathy-ui-utils.h
+++ b/libempathy-gtk/empathy-ui-utils.h
@@ -47,6 +47,9 @@ G_BEGIN_DECLS
#define G_STR_EMPTY(x) ((x) == NULL || (x)[0] == '\0')
/* Glade */
+GladeXML * empathy_glade_get (const gchar *filename,
+ const gchar *root,
+ const gchar *domain);
void empathy_glade_get_file_simple (const gchar *filename,
const gchar *root,
const gchar *domain,