From a84d2ff1a684995ce75ff78c57c0e1ac2a4bf7d5 Mon Sep 17 00:00:00 2001 From: Xavier Claessens Date: Sun, 10 Feb 2008 17:12:07 +0000 Subject: 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 --- libempathy-gtk/Makefile.am | 10 +- libempathy-gtk/empathy-account-widget-generic.c | 327 ------------- libempathy-gtk/empathy-account-widget-generic.h | 38 -- libempathy-gtk/empathy-account-widget-jabber.c | 322 ------------- libempathy-gtk/empathy-account-widget-jabber.h | 33 -- libempathy-gtk/empathy-account-widget-msn.c | 214 --------- libempathy-gtk/empathy-account-widget-msn.h | 34 -- libempathy-gtk/empathy-account-widget-salut.c | 180 -------- libempathy-gtk/empathy-account-widget-salut.h | 34 -- libempathy-gtk/empathy-account-widget.c | 589 ++++++++++++++++++++++++ libempathy-gtk/empathy-account-widget.h | 51 ++ libempathy-gtk/empathy-accounts-dialog.c | 5 +- libempathy-gtk/empathy-ui-utils.c | 39 +- libempathy-gtk/empathy-ui-utils.h | 3 + 14 files changed, 670 insertions(+), 1209 deletions(-) delete mode 100644 libempathy-gtk/empathy-account-widget-generic.c delete mode 100644 libempathy-gtk/empathy-account-widget-generic.h delete mode 100644 libempathy-gtk/empathy-account-widget-jabber.c delete mode 100644 libempathy-gtk/empathy-account-widget-jabber.h delete mode 100644 libempathy-gtk/empathy-account-widget-msn.c delete mode 100644 libempathy-gtk/empathy-account-widget-msn.h delete mode 100644 libempathy-gtk/empathy-account-widget-salut.c delete mode 100644 libempathy-gtk/empathy-account-widget-salut.h create mode 100644 libempathy-gtk/empathy-account-widget.c create mode 100644 libempathy-gtk/empathy-account-widget.h (limited to 'libempathy-gtk') 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 - * Martyn Russell - */ - -#include - -#include - -#include -#include - -#include -#include - -#include - -#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-generic.h b/libempathy-gtk/empathy-account-widget-generic.h deleted file mode 100644 index 406e0a78d..000000000 --- a/libempathy-gtk/empathy-account-widget-generic.h +++ /dev/null @@ -1,38 +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 - * Martyn Russell - */ - -#ifndef __EMPATHY_ACCOUNT_WIDGET_GENERIC_H__ -#define __EMPATHY_ACCOUNT_WIDGET_GENERIC_H__ - -#include - -#include - -G_BEGIN_DECLS - -GtkWidget *empathy_account_widget_generic_new (McAccount *account); - -G_END_DECLS - -#endif /* __EMPATHY_ACCOUNT_WIDGET_GENERIC_H__ */ 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 - */ - -#include "config.h" - -#include -#include -#include - -#include -#include -#include - -#include - -#include -#include - -#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 - */ - -#ifndef __EMPATHY_ACCOUNT_WIDGET_JABBER_H__ -#define __EMPATHY_ACCOUNT_WIDGET_JABBER_H__ - -#include - -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 - * Cosimo Cecchi - */ - -#include "config.h" - -#include -#include -#include - -#include -#include -#include - -#include - -#include -#include - -#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 - * Cosimo Cecchi - */ - -#ifndef __EMPATHY_ACCOUNT_WIDGET_MSN_H__ -#define __EMPATHY_ACCOUNT_WIDGET_MSN_H__ - -#include - -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 - * Cosimo Cecchi - */ - -#include "config.h" - -#include - -#include -#include -#include - -#include - -#include -#include - -#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 - * Cosimo Cecchi - */ - -#ifndef __EMPATHY_ACCOUNT_WIDGET_SALUT_H__ -#define __EMPATHY_ACCOUNT_WIDGET_SALUT_H__ - -#include - -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 + * Martyn Russell + */ + +#include + +#include + +#include +#include + +#include +#include + +#include + +#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.h b/libempathy-gtk/empathy-account-widget.h new file mode 100644 index 000000000..191997ece --- /dev/null +++ b/libempathy-gtk/empathy-account-widget.h @@ -0,0 +1,51 @@ +/* -*- 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 + * Martyn Russell + */ + +#ifndef __EMPATHY_ACCOUNT_WIDGET_GENERIC_H__ +#define __EMPATHY_ACCOUNT_WIDGET_GENERIC_H__ + +#include +#include + +#include + +G_BEGIN_DECLS + +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 + +#endif /* __EMPATHY_ACCOUNT_WIDGET_GENERIC_H__ */ 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, -- cgit v1.2.3