aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libempathy-gtk/empathy-account-widget-irc.c61
-rw-r--r--libempathy-gtk/empathy-account-widget-irc.h4
-rw-r--r--libempathy-gtk/empathy-account-widget-sip.c22
-rw-r--r--libempathy-gtk/empathy-account-widget-sip.h4
-rw-r--r--libempathy-gtk/empathy-account-widget.c264
-rw-r--r--libempathy-gtk/empathy-account-widget.h25
-rw-r--r--src/empathy-accounts-dialog.c363
7 files changed, 475 insertions, 268 deletions
diff --git a/libempathy-gtk/empathy-account-widget-irc.c b/libempathy-gtk/empathy-account-widget-irc.c
index b2383a02a..ae41f1e39 100644
--- a/libempathy-gtk/empathy-account-widget-irc.c
+++ b/libempathy-gtk/empathy-account-widget-irc.c
@@ -41,7 +41,7 @@
#define IRC_NETWORKS_FILENAME "irc-networks.xml"
typedef struct {
- EmpathyAccount *account;
+ EmpathyAccountSettings *settings;
EmpathyIrcNetworkManager *network_manager;
GtkWidget *vbox_settings;
@@ -59,7 +59,7 @@ account_widget_irc_destroy_cb (GtkWidget *widget,
EmpathyAccountWidgetIrc *settings)
{
g_object_unref (settings->network_manager);
- g_object_unref (settings->account);
+ g_object_unref (settings->settings);
g_slice_free (EmpathyAccountWidgetIrc, settings);
}
@@ -67,9 +67,9 @@ static void
unset_server_params (EmpathyAccountWidgetIrc *settings)
{
DEBUG ("Unset server, port and use-ssl");
- empathy_account_unset_param (settings->account, "server");
- empathy_account_unset_param (settings->account, "port");
- empathy_account_unset_param (settings->account, "use-ssl");
+ empathy_account_settings_unset (settings->settings, "server");
+ empathy_account_settings_unset (settings->settings, "port");
+ empathy_account_settings_unset (settings->settings, "use-ssl");
}
static void
@@ -95,7 +95,7 @@ update_server_params (EmpathyAccountWidgetIrc *settings)
g_object_get (network, "charset", &charset, NULL);
DEBUG ("Setting charset to %s", charset);
- empathy_account_set_param_string (settings->account, "charset", charset);
+ empathy_account_settings_set_string (settings->settings, "charset", charset);
g_free (charset);
servers = empathy_irc_network_get_servers (network);
@@ -114,11 +114,13 @@ update_server_params (EmpathyAccountWidgetIrc *settings)
NULL);
DEBUG ("Setting server to %s", address);
- empathy_account_set_param_string (settings->account, "server", address);
+ empathy_account_settings_set_string (settings->settings,
+ "server", address);
DEBUG ("Setting port to %u", port);
- empathy_account_set_param_int (settings->account, "port", port);
+ empathy_account_settings_set_uint32 (settings->settings, "port", port);
DEBUG ("Setting use-ssl to %s", ssl ? "TRUE": "FALSE" );
- empathy_account_set_param_boolean (settings->account, "use-ssl", ssl);
+ empathy_account_settings_set_boolean (settings->settings,
+ "use-ssl", ssl);
g_free (address);
}
@@ -329,17 +331,19 @@ account_widget_irc_setup (EmpathyAccountWidgetIrc *settings)
gboolean ssl = FALSE;
EmpathyIrcNetwork *network = NULL;
- nick = empathy_account_get_param_string (settings->account, "account");
- fullname = empathy_account_get_param_string (settings->account, "fullname");
- server = empathy_account_get_param_string (settings->account, "server");
- charset = empathy_account_get_param_string (settings->account, "charset");
- port = empathy_account_get_param_int (settings->account, "port");
- ssl = empathy_account_get_param_boolean (settings->account, "use-ssl");
+ nick = empathy_account_settings_get_string (settings->settings, "account");
+ fullname = empathy_account_settings_get_string (settings->settings,
+ "fullname");
+ server = empathy_account_settings_get_string (settings->settings, "server");
+ charset = empathy_account_settings_get_string (settings->settings, "charset");
+ port = empathy_account_settings_get_uint32 (settings->settings, "port");
+ ssl = empathy_account_settings_get_boolean (settings->settings, "use-ssl");
if (!nick)
{
nick = g_strdup (g_get_user_name ());
- empathy_account_set_param_string (settings->account, "account", nick);
+ empathy_account_settings_set_string (settings->settings,
+ "account", nick);
}
if (!fullname)
@@ -349,7 +353,8 @@ account_widget_irc_setup (EmpathyAccountWidgetIrc *settings)
{
fullname = g_strdup (nick);
}
- empathy_account_set_param_string (settings->account, "fullname", fullname);
+ empathy_account_settings_set_string (settings->settings,
+ "fullname", fullname);
}
if (server != NULL)
@@ -406,14 +411,14 @@ account_widget_irc_setup (EmpathyAccountWidgetIrc *settings)
/**
* empathy_account_widget_irc_new:
- * @account: the #EmpathyAccount to configure
+ * @settings: the #EmpathyAccountSettings to configure
*
* Creates a new IRC account widget to configure a given #EmpathyAccount
*
* Returns: The toplevel container of the configuration widget
*/
GtkWidget *
-empathy_account_widget_irc_new (EmpathyAccount *account)
+empathy_account_widget_irc_new (EmpathyAccountSettings *account_settings)
{
EmpathyAccountWidgetIrc *settings;
gchar *dir, *user_file_with_path, *global_file_with_path;
@@ -423,7 +428,7 @@ empathy_account_widget_irc_new (EmpathyAccount *account)
gchar *filename;
settings = g_slice_new0 (EmpathyAccountWidgetIrc);
- settings->account = g_object_ref (account);
+ settings->settings = g_object_ref (settings);
dir = g_build_filename (g_get_home_dir (), ".gnome2", PACKAGE_NAME, NULL);
g_mkdir_with_parents (dir, S_IRUSR | S_IWUSR | S_IXUSR);
@@ -476,7 +481,7 @@ empathy_account_widget_irc_new (EmpathyAccount *account)
account_widget_irc_setup (settings);
- empathy_account_widget_handle_params (account, gui,
+ empathy_account_widget_handle_params (account_settings, gui,
"entry_nick", "account",
"entry_fullname", "fullname",
"entry_password", "password",
@@ -485,13 +490,19 @@ empathy_account_widget_irc_new (EmpathyAccount *account)
empathy_builder_connect (gui, settings,
"vbox_irc_settings", "destroy", account_widget_irc_destroy_cb,
- "button_network", "clicked", account_widget_irc_button_edit_network_clicked_cb,
- "button_add_network", "clicked", account_widget_irc_button_add_network_clicked_cb,
- "button_remove_network", "clicked", account_widget_irc_button_remove_clicked_cb,
- "combobox_network", "changed", account_widget_irc_combobox_network_changed_cb,
+ "button_network", "clicked",
+ account_widget_irc_button_edit_network_clicked_cb,
+ "button_add_network", "clicked",
+ account_widget_irc_button_add_network_clicked_cb,
+ "button_remove_network", "clicked",
+ account_widget_irc_button_remove_clicked_cb,
+ "combobox_network", "changed",
+ account_widget_irc_combobox_network_changed_cb,
NULL);
empathy_account_widget_set_default_focus (gui, "entry_nick");
+ empathy_account_widget_add_apply_button (account_settings,
+ settings->vbox_settings);
return empathy_builder_unref_and_keep_widget (gui, settings->vbox_settings);
}
diff --git a/libempathy-gtk/empathy-account-widget-irc.h b/libempathy-gtk/empathy-account-widget-irc.h
index 40e58bbc3..0373238ed 100644
--- a/libempathy-gtk/empathy-account-widget-irc.h
+++ b/libempathy-gtk/empathy-account-widget-irc.h
@@ -22,11 +22,11 @@
#define __EMPATHY_ACCOUNT_WIDGET_IRC_H__
#include <gtk/gtk.h>
-#include <libempathy/empathy-account.h>
+#include <libempathy/empathy-account-settings.h>
G_BEGIN_DECLS
-GtkWidget * empathy_account_widget_irc_new (EmpathyAccount *account);
+GtkWidget * empathy_account_widget_irc_new (EmpathyAccountSettings *settings);
G_END_DECLS
diff --git a/libempathy-gtk/empathy-account-widget-sip.c b/libempathy-gtk/empathy-account-widget-sip.c
index ad8cd7d8e..9f08046b7 100644
--- a/libempathy-gtk/empathy-account-widget-sip.c
+++ b/libempathy-gtk/empathy-account-widget-sip.c
@@ -35,7 +35,7 @@
#include "empathy-ui-utils.h"
typedef struct {
- EmpathyAccount *account;
+ EmpathyAccountSettings *settings;
GtkWidget *vbox_settings;
@@ -48,7 +48,7 @@ static void
account_widget_sip_destroy_cb (GtkWidget *widget,
EmpathyAccountWidgetSip *settings)
{
- g_object_unref (settings->account);
+ g_object_unref (settings->settings);
g_slice_free (EmpathyAccountWidgetSip, settings);
}
@@ -73,14 +73,14 @@ account_widget_sip_discover_stun_toggled_cb (
* Returns: The toplevel container of the configuration widget
*/
GtkWidget *
-empathy_account_widget_sip_new (EmpathyAccount *account)
+empathy_account_widget_sip_new (EmpathyAccountSettings *account_settings)
{
EmpathyAccountWidgetSip *settings;
GtkBuilder *gui;
gchar *filename;
settings = g_slice_new0 (EmpathyAccountWidgetSip);
- settings->account = g_object_ref (account);
+ settings->settings = g_object_ref (account_settings);
filename = empathy_file_lookup ("empathy-account-widget-sip.ui",
"libempathy-gtk");
@@ -92,7 +92,7 @@ empathy_account_widget_sip_new (EmpathyAccount *account)
NULL);
g_free (filename);
- empathy_account_widget_handle_params (account, gui,
+ empathy_account_widget_handle_params (account_settings, gui,
"entry_userid", "account",
"entry_password", "password",
"checkbutton_discover-stun", "discover-stun",
@@ -100,19 +100,23 @@ empathy_account_widget_sip_new (EmpathyAccount *account)
"spinbutton_stun-port", "stun-port",
NULL);
- empathy_account_widget_add_forget_button (account, gui,
+ empathy_account_widget_add_forget_button (account_settings, gui,
"button_forget",
"entry_password");
- account_widget_sip_discover_stun_toggled_cb (settings->checkbutton_discover_stun,
- settings);
+ account_widget_sip_discover_stun_toggled_cb (
+ settings->checkbutton_discover_stun,
+ settings);
empathy_builder_connect (gui, settings,
"vbox_sip_settings", "destroy", account_widget_sip_destroy_cb,
- "checkbutton_discover-stun", "toggled", account_widget_sip_discover_stun_toggled_cb,
+ "checkbutton_discover-stun", "toggled",
+ account_widget_sip_discover_stun_toggled_cb,
NULL);
empathy_account_widget_set_default_focus (gui, "entry_userid");
+ empathy_account_widget_add_apply_button (account_settings,
+ settings->vbox_settings);
return empathy_builder_unref_and_keep_widget (gui, settings->vbox_settings);
}
diff --git a/libempathy-gtk/empathy-account-widget-sip.h b/libempathy-gtk/empathy-account-widget-sip.h
index 69f60aacc..15dd7244a 100644
--- a/libempathy-gtk/empathy-account-widget-sip.h
+++ b/libempathy-gtk/empathy-account-widget-sip.h
@@ -22,11 +22,11 @@
#define __EMPATHY_ACCOUNT_WIDGET_SIP_H__
#include <gtk/gtk.h>
-#include <libempathy/empathy-account.h>
+#include <libempathy/empathy-account-settings.h>
G_BEGIN_DECLS
-GtkWidget * empathy_account_widget_sip_new (EmpathyAccount *account);
+GtkWidget * empathy_account_widget_sip_new (EmpathyAccountSettings *settings);
G_END_DECLS
diff --git a/libempathy-gtk/empathy-account-widget.c b/libempathy-gtk/empathy-account-widget.c
index 783a48a0a..ea0a05b35 100644
--- a/libempathy-gtk/empathy-account-widget.c
+++ b/libempathy-gtk/empathy-account-widget.c
@@ -33,6 +33,7 @@
#include <libempathy/empathy-account.h>
#include <telepathy-glib/connection-manager.h>
+#include <dbus/dbus-protocol.h>
#include "empathy-account-widget.h"
#include "empathy-ui-utils.h"
@@ -43,7 +44,7 @@
static gboolean
account_widget_entry_focus_cb (GtkWidget *widget,
GdkEventFocus *event,
- EmpathyAccount *account)
+ EmpathyAccountSettings *settings)
{
const gchar *str;
const gchar *param_name;
@@ -54,14 +55,14 @@ account_widget_entry_focus_cb (GtkWidget *widget,
if (EMP_STR_EMPTY (str)) {
const gchar *value = NULL;
- empathy_account_unset_param (account, param_name);
- value = empathy_account_get_param_string (account, param_name);
+ empathy_account_settings_unset (settings, param_name);
+ value = empathy_account_settings_get_string (settings, param_name);
DEBUG ("Unset %s and restore to %s", param_name, value);
gtk_entry_set_text (GTK_ENTRY (widget), value ? value : "");
} else {
DEBUG ("Setting %s to %s", param_name,
strstr (param_name, "password") ? "***" : str);
- empathy_account_set_param_string (account, param_name, str);
+ empathy_account_settings_set_string (settings, param_name, str);
}
return FALSE;
@@ -69,28 +70,44 @@ account_widget_entry_focus_cb (GtkWidget *widget,
static void
account_widget_int_changed_cb (GtkWidget *widget,
- EmpathyAccount *account)
+ EmpathyAccountSettings *settings)
{
const gchar *param_name;
gint value;
+ const gchar *signature;
value = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (widget));
param_name = g_object_get_data (G_OBJECT (widget), "param_name");
- if (value == 0) {
- empathy_account_unset_param (account, param_name);
- value = empathy_account_get_param_int (account, param_name);
- DEBUG ("Unset %s and restore to %d", param_name, value);
- gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), value);
- } else {
- DEBUG ("Setting %s to %d", param_name, value);
- empathy_account_set_param_int (account, param_name, value);
- }
+ signature = empathy_settings_get_dbus_signature (settings, param_name);
+ g_return_if_fail (signature != NULL);
+
+ DEBUG ("Setting %s to %d", param_name, value);
+
+ switch ((int)*signature)
+ {
+ case DBUS_TYPE_INT16:
+ case DBUS_TYPE_INT32:
+ empathy_account_settings_set_int32 (settings, param_name, value);
+ break;
+ case DBUS_TYPE_INT64:
+ empathy_account_settings_set_int64 (settings, param_name, value);
+ break;
+ case DBUS_TYPE_UINT16:
+ case DBUS_TYPE_UINT32:
+ empathy_account_settings_set_uint32 (settings, param_name, value);
+ break;
+ case DBUS_TYPE_UINT64:
+ empathy_account_settings_set_uint64 (settings, param_name, value);
+ break;
+ default:
+ g_return_if_reached ();
+ }
}
static void
account_widget_checkbutton_toggled_cb (GtkWidget *widget,
- EmpathyAccount *account)
+ EmpathyAccountSettings *settings)
{
gboolean value;
gboolean default_value;
@@ -102,14 +119,14 @@ account_widget_checkbutton_toggled_cb (GtkWidget *widget,
/* 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. */
- empathy_account_unset_param (account, param_name);
- default_value = empathy_account_get_param_boolean (account, param_name);
+ empathy_account_settings_unset (settings, param_name);
+ default_value = empathy_account_settings_get_boolean (settings, param_name);
if (default_value == value) {
DEBUG ("Unset %s and restore to %d", param_name, default_value);
} else {
DEBUG ("Setting %s to %d", param_name, value);
- empathy_account_set_param_boolean (account, param_name, value);
+ empathy_account_settings_set_boolean (settings, param_name, value);
}
}
@@ -117,14 +134,14 @@ static void
account_widget_forget_clicked_cb (GtkWidget *button,
GtkWidget *entry)
{
- EmpathyAccount *account;
+ EmpathyAccountSettings *settings;
const gchar *param_name;
param_name = g_object_get_data (G_OBJECT (entry), "param_name");
- account = g_object_get_data (G_OBJECT (entry), "account");
+ settings = g_object_get_data (G_OBJECT (entry), "settings");
DEBUG ("Unset %s", param_name);
- empathy_account_unset_param (account, param_name);
+ empathy_account_settings_unset (settings, param_name);
gtk_entry_set_text (GTK_ENTRY (entry), "");
}
@@ -142,13 +159,13 @@ static void
account_widget_jabber_ssl_toggled_cb (GtkWidget *checkbutton_ssl,
GtkWidget *spinbutton_port)
{
- EmpathyAccount *account;
+ EmpathyAccountSettings *settings;
gboolean value;
- gint port = 0;
+ gint32 port = 0;
value = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (checkbutton_ssl));
- account = g_object_get_data (G_OBJECT (spinbutton_port), "account");
- port = empathy_account_get_param_int (account, "port");
+ settings = g_object_get_data (G_OBJECT (spinbutton_port), "settings");
+ port = empathy_account_settings_get_uint32 (settings, "port");
if (value) {
if (port == 5222 || port == 0) {
@@ -165,28 +182,51 @@ account_widget_jabber_ssl_toggled_cb (GtkWidget *checkbutton_ssl,
static void
account_widget_setup_widget (GtkWidget *widget,
- EmpathyAccount *account,
+ EmpathyAccountSettings *settings,
const gchar *param_name)
{
g_object_set_data_full (G_OBJECT (widget), "param_name",
g_strdup (param_name), g_free);
- g_object_set_data_full (G_OBJECT (widget), "account",
- g_object_ref (account), g_object_unref);
+ g_object_set_data_full (G_OBJECT (widget), "settings",
+ g_object_ref (settings), g_object_unref);
if (GTK_IS_SPIN_BUTTON (widget)) {
gint value = 0;
+ const gchar *signature;
+
+ signature = empathy_settings_get_dbus_signature (settings, param_name);
+ g_return_if_fail (signature != NULL);
+
+ switch ((int)*signature)
+ {
+ case DBUS_TYPE_INT16:
+ case DBUS_TYPE_INT32:
+ value = empathy_account_settings_get_int32 (settings, param_name);
+ break;
+ case DBUS_TYPE_INT64:
+ value = empathy_account_settings_get_int64 (settings, param_name);
+ break;
+ case DBUS_TYPE_UINT16:
+ case DBUS_TYPE_UINT32:
+ value = empathy_account_settings_get_uint32 (settings, param_name);
+ break;
+ case DBUS_TYPE_UINT64:
+ value = empathy_account_settings_get_uint64 (settings, param_name);
+ break;
+ default:
+ g_return_if_reached ();
+ }
- value = empathy_account_get_param_int (account, param_name);
gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), value);
g_signal_connect (widget, "value-changed",
G_CALLBACK (account_widget_int_changed_cb),
- account);
+ settings);
}
else if (GTK_IS_ENTRY (widget)) {
const gchar *str = NULL;
- str = empathy_account_get_param_string (account, param_name);
+ str = empathy_account_settings_get_string (settings, param_name);
gtk_entry_set_text (GTK_ENTRY (widget), str ? str : "");
if (strstr (param_name, "password")) {
@@ -195,17 +235,17 @@ account_widget_setup_widget (GtkWidget *widget,
g_signal_connect (widget, "focus-out-event",
G_CALLBACK (account_widget_entry_focus_cb),
- account);
+ settings);
}
else if (GTK_IS_TOGGLE_BUTTON (widget)) {
gboolean value = FALSE;
- value = empathy_account_get_param_boolean (account, param_name);
+ value = empathy_account_settings_get_boolean (settings, param_name);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), value);
g_signal_connect (widget, "toggled",
G_CALLBACK (account_widget_checkbutton_toggled_cb),
- account);
+ settings);
} else {
DEBUG ("Unknown type of widget for param %s", param_name);
}
@@ -236,14 +276,15 @@ account_widget_generic_format_param_name (const gchar *param_name)
}
static void
-accounts_widget_generic_setup (EmpathyAccount *account,
- TpConnectionManagerParam *params,
+accounts_widget_generic_setup (EmpathyAccountSettings *settings,
GtkWidget *table_common_settings,
GtkWidget *table_advanced_settings)
{
- TpConnectionManagerParam *param;
+ TpConnectionManagerParam *params, *param;
+
+ params = empathy_account_settings_get_tp_params (settings);
- for (param = params; param != NULL; param++) {
+ for (param = params; param != NULL && param->name != NULL; param++) {
GtkWidget *table_settings;
guint n_rows = 0;
GtkWidget *widget = NULL;
@@ -350,7 +391,7 @@ accounts_widget_generic_setup (EmpathyAccount *account,
}
if (widget) {
- account_widget_setup_widget (widget, account, param->name);
+ account_widget_setup_widget (widget, settings, param->name);
}
g_free (param_name_formatted);
@@ -358,7 +399,7 @@ accounts_widget_generic_setup (EmpathyAccount *account,
}
static void
-account_widget_handle_params_valist (EmpathyAccount *account,
+account_widget_handle_params_valist (EmpathyAccountSettings *settings,
GtkBuilder *gui,
const gchar *first_widget,
va_list args)
@@ -377,12 +418,12 @@ account_widget_handle_params_valist (EmpathyAccount *account,
continue;
}
- account_widget_setup_widget (GTK_WIDGET (object), account, param_name);
+ account_widget_setup_widget (GTK_WIDGET (object), settings, param_name);
}
}
void
-empathy_account_widget_handle_params (EmpathyAccount *account,
+empathy_account_widget_handle_params (EmpathyAccountSettings *settings,
GtkBuilder *gui,
const gchar *first_widget,
...)
@@ -392,12 +433,35 @@ empathy_account_widget_handle_params (EmpathyAccount *account,
g_return_if_fail (GTK_IS_BUILDER (gui));
va_start (args, first_widget);
- account_widget_handle_params_valist (account, gui, first_widget, args);
+ account_widget_handle_params_valist (settings, gui, first_widget, args);
va_end (args);
}
+static void
+account_widget_apply_clicked_cb (GtkWidget *button,
+ EmpathyAccountSettings *settings)
+{
+ empathy_account_settings_apply_async (settings, NULL, NULL);
+}
+
+void
+empathy_account_widget_add_apply_button (EmpathyAccountSettings *settings,
+ GtkWidget *vbox)
+{
+ GtkWidget *button;
+
+ button = gtk_button_new_from_stock (GTK_STOCK_APPLY);
+
+ gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 3);
+
+ g_signal_connect (button, "clicked",
+ G_CALLBACK (account_widget_apply_clicked_cb),
+ settings);
+ gtk_widget_show (button);
+}
+
void
-empathy_account_widget_add_forget_button (EmpathyAccount *account,
+empathy_account_widget_add_forget_button (EmpathyAccountSettings *settings,
GtkBuilder *gui,
const gchar *button,
const gchar *entry)
@@ -409,7 +473,7 @@ empathy_account_widget_add_forget_button (EmpathyAccount *account,
button_forget = GTK_WIDGET (gtk_builder_get_object (gui, button));
entry_password = GTK_WIDGET (gtk_builder_get_object (gui, entry));
- password = empathy_account_get_param_string (account, "password");
+ password = empathy_account_settings_get_string (settings, "password");
gtk_widget_set_sensitive (button_forget, !EMP_STR_EMPTY (password));
g_signal_connect (button_forget, "clicked",
@@ -433,37 +497,33 @@ empathy_account_widget_set_default_focus (GtkBuilder *gui,
}
static void
-account_widget_tp_cm_ready_cb (TpConnectionManager *cm, const GError *error,
- gpointer user_data, GObject *weak_object)
+account_widget_setup_generic (EmpathyAccountSettings *settings,
+ GtkBuilder *builder)
{
- GtkBuilder *builder;
- EmpathyAccount *account;
GtkWidget *table_common_settings;
GtkWidget *table_advanced_settings;
- const TpConnectionManagerProtocol *protocol;
-
- if (error != NULL) {
- DEBUG ("CM wasn't happy: %s", error->message);
- return;
- }
-
- account = EMPATHY_ACCOUNT (user_data);
- builder = GTK_BUILDER (weak_object);
table_common_settings = GTK_WIDGET (gtk_builder_get_object (builder,
"table_common_settings"));
table_advanced_settings = GTK_WIDGET (gtk_builder_get_object (builder,
"table_advanced_settings"));
- protocol = tp_connection_manager_get_protocol (cm,
- empathy_account_get_protocol (account));
+ accounts_widget_generic_setup (settings, table_common_settings,
+ table_advanced_settings);
+}
- accounts_widget_generic_setup (account, protocol->params,
- table_common_settings, table_advanced_settings);
+static void
+account_widget_settings_ready_cb (EmpathyAccountSettings *settings,
+ GParamSpec *pspec, gpointer user_data)
+{
+ GtkBuilder *builder = GTK_BUILDER (user_data);
+
+ if (empathy_account_settings_is_ready (settings))
+ account_widget_setup_generic (settings, builder);
}
GtkWidget *
-empathy_account_widget_generic_new (EmpathyAccount *account)
+empathy_account_widget_generic_new (EmpathyAccountSettings *settings)
{
GtkBuilder *gui;
GtkWidget *widget;
@@ -475,38 +535,19 @@ empathy_account_widget_generic_new (EmpathyAccount *account)
"vbox_generic_settings", &widget,
NULL);
- /* If the profile isn't installed get_protocol will return NULL with MC4 */
- if (empathy_account_get_protocol (account) != NULL) {
- TpDBusDaemon *dbus;
- TpConnectionManager *cm;
- GError *error;
-
- dbus = tp_dbus_daemon_dup (NULL);
+ if (empathy_account_settings_is_ready (settings))
+ account_widget_setup_generic (settings, gui);
+ else
+ g_signal_connect (settings, "notify::ready",
+ G_CALLBACK (account_widget_settings_ready_cb), gui);
- cm = tp_connection_manager_new (dbus,
- empathy_account_get_connection_manager (account), NULL, &error);
-
- if (cm == NULL) {
- DEBUG ("failed to get the cm: %s", error->message);
- g_error_free (error);
- g_object_unref (gui);
- return NULL;
- }
-
- tp_connection_manager_call_when_ready (cm, account_widget_tp_cm_ready_cb,
- account, g_object_unref, G_OBJECT (gui));
-
- g_object_unref (dbus);
- } else {
- /* no protocol information available :(( */
- return empathy_builder_unref_and_keep_widget (gui, widget);
- }
+ empathy_account_widget_add_apply_button (settings, widget);
return g_object_ref (widget);
}
GtkWidget *
-empathy_account_widget_salut_new (EmpathyAccount *account)
+empathy_account_widget_salut_new (EmpathyAccountSettings *settings)
{
GtkBuilder *gui;
GtkWidget *widget;
@@ -519,7 +560,7 @@ empathy_account_widget_salut_new (EmpathyAccount *account)
NULL);
g_free (filename);
- empathy_account_widget_handle_params (account, gui,
+ empathy_account_widget_handle_params (settings, gui,
"entry_published", "published-name",
"entry_nickname", "nickname",
"entry_first_name", "first-name",
@@ -534,7 +575,7 @@ empathy_account_widget_salut_new (EmpathyAccount *account)
}
GtkWidget *
-empathy_account_widget_msn_new (EmpathyAccount *account)
+empathy_account_widget_msn_new (EmpathyAccountSettings *settings)
{
GtkBuilder *gui;
GtkWidget *widget;
@@ -547,14 +588,14 @@ empathy_account_widget_msn_new (EmpathyAccount *account)
NULL);
g_free (filename);
- empathy_account_widget_handle_params (account, gui,
+ empathy_account_widget_handle_params (settings, gui,
"entry_id", "account",
"entry_password", "password",
"entry_server", "server",
"spinbutton_port", "port",
NULL);
- empathy_account_widget_add_forget_button (account, gui,
+ empathy_account_widget_add_forget_button (settings, gui,
"button_forget",
"entry_password");
@@ -564,7 +605,7 @@ empathy_account_widget_msn_new (EmpathyAccount *account)
}
GtkWidget *
-empathy_account_widget_jabber_new (EmpathyAccount *account)
+empathy_account_widget_jabber_new (EmpathyAccountSettings *settings)
{
GtkBuilder *gui;
GtkWidget *widget;
@@ -581,7 +622,7 @@ empathy_account_widget_jabber_new (EmpathyAccount *account)
NULL);
g_free (filename);
- empathy_account_widget_handle_params (account, gui,
+ empathy_account_widget_handle_params (settings, gui,
"entry_id", "account",
"entry_password", "password",
"entry_resource", "resource",
@@ -593,7 +634,7 @@ empathy_account_widget_jabber_new (EmpathyAccount *account)
"checkbutton_encryption", "require-encryption",
NULL);
- empathy_account_widget_add_forget_button (account, gui,
+ empathy_account_widget_add_forget_button (settings, gui,
"button_forget",
"entry_password");
@@ -603,11 +644,13 @@ empathy_account_widget_jabber_new (EmpathyAccount *account)
G_CALLBACK (account_widget_jabber_ssl_toggled_cb),
spinbutton_port);
+ empathy_account_widget_add_apply_button (settings, widget);
+
return empathy_builder_unref_and_keep_widget (gui, widget);
}
GtkWidget *
-empathy_account_widget_icq_new (EmpathyAccount *account)
+empathy_account_widget_icq_new (EmpathyAccountSettings *settings)
{
GtkBuilder *gui;
GtkWidget *widget;
@@ -622,7 +665,7 @@ empathy_account_widget_icq_new (EmpathyAccount *account)
NULL);
g_free (filename);
- empathy_account_widget_handle_params (account, gui,
+ empathy_account_widget_handle_params (settings, gui,
"entry_uin", "account",
"entry_password", "password",
"entry_server", "server",
@@ -630,17 +673,19 @@ empathy_account_widget_icq_new (EmpathyAccount *account)
"entry_charset", "charset",
NULL);
- empathy_account_widget_add_forget_button (account, gui,
+ empathy_account_widget_add_forget_button (settings, gui,
"button_forget",
"entry_password");
empathy_account_widget_set_default_focus (gui, "entry_uin");
+ empathy_account_widget_add_apply_button (settings, widget);
+
return empathy_builder_unref_and_keep_widget (gui, widget);
}
GtkWidget *
-empathy_account_widget_aim_new (EmpathyAccount *account)
+empathy_account_widget_aim_new (EmpathyAccountSettings *settings)
{
GtkBuilder *gui;
GtkWidget *widget;
@@ -655,24 +700,25 @@ empathy_account_widget_aim_new (EmpathyAccount *account)
NULL);
g_free (filename);
- empathy_account_widget_handle_params (account, gui,
+ empathy_account_widget_handle_params (settings, gui,
"entry_screenname", "account",
"entry_password", "password",
"entry_server", "server",
"spinbutton_port", "port",
NULL);
- empathy_account_widget_add_forget_button (account, gui,
+ empathy_account_widget_add_forget_button (settings, gui,
"button_forget",
"entry_password");
empathy_account_widget_set_default_focus (gui, "entry_screenname");
+ empathy_account_widget_add_apply_button (settings, widget);
return empathy_builder_unref_and_keep_widget (gui, widget);
}
GtkWidget *
-empathy_account_widget_yahoo_new (EmpathyAccount *account)
+empathy_account_widget_yahoo_new (EmpathyAccountSettings *settings)
{
GtkBuilder *gui;
GtkWidget *widget;
@@ -685,7 +731,7 @@ empathy_account_widget_yahoo_new (EmpathyAccount *account)
NULL);
g_free (filename);
- empathy_account_widget_handle_params (account, gui,
+ empathy_account_widget_handle_params (settings, gui,
"entry_id", "account",
"entry_password", "password",
"entry_server", "server",
@@ -696,17 +742,18 @@ empathy_account_widget_yahoo_new (EmpathyAccount *account)
"checkbutton_ignore_invites", "ignore-invites",
NULL);
- empathy_account_widget_add_forget_button (account, gui,
+ empathy_account_widget_add_forget_button (settings, gui,
"button_forget",
"entry_password");
empathy_account_widget_set_default_focus (gui, "entry_id");
+ empathy_account_widget_add_apply_button (settings, widget);
return empathy_builder_unref_and_keep_widget (gui, widget);
}
GtkWidget *
-empathy_account_widget_groupwise_new (EmpathyAccount *account)
+empathy_account_widget_groupwise_new (EmpathyAccountSettings *settings)
{
GtkBuilder *gui;
GtkWidget *widget;
@@ -719,18 +766,19 @@ empathy_account_widget_groupwise_new (EmpathyAccount *account)
NULL);
g_free (filename);
- empathy_account_widget_handle_params (account, gui,
+ empathy_account_widget_handle_params (settings, gui,
"entry_id", "account",
"entry_password", "password",
"entry_server", "server",
"spinbutton_port", "port",
NULL);
- empathy_account_widget_add_forget_button (account, gui,
+ empathy_account_widget_add_forget_button (settings, gui,
"button_forget",
"entry_password");
empathy_account_widget_set_default_focus (gui, "entry_id");
+ empathy_account_widget_add_apply_button (settings, widget);
return empathy_builder_unref_and_keep_widget (gui, widget);
}
diff --git a/libempathy-gtk/empathy-account-widget.h b/libempathy-gtk/empathy-account-widget.h
index 7a76db9e0..f05c66012 100644
--- a/libempathy-gtk/empathy-account-widget.h
+++ b/libempathy-gtk/empathy-account-widget.h
@@ -27,28 +27,31 @@
#include <gtk/gtk.h>
-#include <libempathy/empathy-account.h>
+#include <libempathy/empathy-account-settings.h>
G_BEGIN_DECLS
-void empathy_account_widget_handle_params (EmpathyAccount *account,
+void empathy_account_widget_handle_params (EmpathyAccountSettings *settings,
GtkBuilder *gui,
const gchar *first_widget,
...);
-void empathy_account_widget_add_forget_button (EmpathyAccount *account,
+void empathy_account_widget_add_forget_button (EmpathyAccountSettings *settings,
GtkBuilder *gui,
const gchar *button,
const gchar *entry);
+void empathy_account_widget_add_apply_button (EmpathyAccountSettings *settings,
+ GtkWidget *vbox);
+
void empathy_account_widget_set_default_focus (GtkBuilder *gui,
const gchar *entry);
-GtkWidget *empathy_account_widget_generic_new (EmpathyAccount *account);
-GtkWidget *empathy_account_widget_salut_new (EmpathyAccount *account);
-GtkWidget *empathy_account_widget_msn_new (EmpathyAccount *account);
-GtkWidget *empathy_account_widget_jabber_new (EmpathyAccount *account);
-GtkWidget *empathy_account_widget_icq_new (EmpathyAccount *account);
-GtkWidget *empathy_account_widget_aim_new (EmpathyAccount *account);
-GtkWidget *empathy_account_widget_yahoo_new (EmpathyAccount *account);
-GtkWidget *empathy_account_widget_groupwise_new (EmpathyAccount *account);
+GtkWidget *empathy_account_widget_generic_new (EmpathyAccountSettings *settings);
+GtkWidget *empathy_account_widget_salut_new (EmpathyAccountSettings *settings);
+GtkWidget *empathy_account_widget_msn_new (EmpathyAccountSettings *settings);
+GtkWidget *empathy_account_widget_jabber_new (EmpathyAccountSettings *settings);
+GtkWidget *empathy_account_widget_icq_new (EmpathyAccountSettings *settings);
+GtkWidget *empathy_account_widget_aim_new (EmpathyAccountSettings *settings);
+GtkWidget *empathy_account_widget_yahoo_new (EmpathyAccountSettings *settings);
+GtkWidget *empathy_account_widget_groupwise_new (EmpathyAccountSettings *settings);
G_END_DECLS
diff --git a/src/empathy-accounts-dialog.c b/src/empathy-accounts-dialog.c
index 080a6cae3..d6a29ea63 100644
--- a/src/empathy-accounts-dialog.c
+++ b/src/empathy-accounts-dialog.c
@@ -84,6 +84,9 @@ typedef struct {
gboolean connecting_show;
guint connecting_id;
+ gulong settings_ready_id;
+ EmpathyAccountSettings *settings_ready;
+
EmpathyAccountManager *account_manager;
} EmpathyAccountsDialog;
@@ -92,11 +95,12 @@ enum {
COL_NAME,
COL_STATUS,
COL_ACCOUNT_POINTER,
+ COL_ACCOUNT_SETTINGS_POINTER,
COL_COUNT
};
-static void accounts_dialog_update_account (EmpathyAccountsDialog *dialog,
- EmpathyAccount *account);
+static void accounts_dialog_update (EmpathyAccountsDialog *dialog,
+ EmpathyAccountSettings *settings);
static void accounts_dialog_model_setup (EmpathyAccountsDialog *dialog);
static void accounts_dialog_model_add_columns (EmpathyAccountsDialog *dialog);
static void accounts_dialog_name_editing_started_cb (GtkCellRenderer *renderer,
@@ -109,14 +113,11 @@ static void accounts_dialog_model_pixbuf_data_func (GtkTreeViewColumn
GtkTreeModel *model,
GtkTreeIter *iter,
EmpathyAccountsDialog *dialog);
-static EmpathyAccount *accounts_dialog_model_get_selected (EmpathyAccountsDialog *dialog);
static void accounts_dialog_model_set_selected (EmpathyAccountsDialog *dialog,
- EmpathyAccount *account);
+ EmpathyAccountSettings *settings);
static gboolean accounts_dialog_model_remove_selected (EmpathyAccountsDialog *dialog);
static void accounts_dialog_model_selection_changed (GtkTreeSelection *selection,
EmpathyAccountsDialog *dialog);
-static void accounts_dialog_add_or_update_account (EmpathyAccountsDialog *dialog,
- EmpathyAccount *account);
static void accounts_dialog_account_added_cb (EmpathyAccountManager *manager,
EmpathyAccount *account,
EmpathyAccountsDialog *dialog);
@@ -157,24 +158,24 @@ static void accounts_dialog_destroy_cb (GtkWidget
static void
accounts_dialog_update_name_label (EmpathyAccountsDialog *dialog,
- EmpathyAccount *account)
+ EmpathyAccountSettings *settings)
{
gchar *text;
text = g_markup_printf_escaped ("<big><b>%s</b></big>",
- empathy_account_get_display_name (account));
+ empathy_account_settings_get_display_name (settings));
gtk_label_set_markup (GTK_LABEL (dialog->label_name), text);
g_free (text);
}
-typedef GtkWidget *CreateWidget (EmpathyAccount *);
+typedef GtkWidget *CreateWidget (EmpathyAccountSettings *);
static GtkWidget *
-get_account_setup_widget (EmpathyAccount *account)
+get_account_setup_widget (EmpathyAccountSettings *settings)
{
- const gchar *cm = empathy_account_get_connection_manager (account);
- const gchar *proto = empathy_account_get_protocol (account);
+ const gchar *cm = empathy_account_settings_get_cm (settings);
+ const gchar *proto = empathy_account_settings_get_protocol (settings);
struct {
const gchar *cm;
const gchar *proto;
@@ -196,18 +197,53 @@ get_account_setup_widget (EmpathyAccount *account)
for (i = 0; dialogs[i].cm != NULL; i++) {
if (!tp_strdiff (cm, dialogs[i].cm)
&& !tp_strdiff (proto, dialogs[i].proto))
- return dialogs[i].cb(account);
+ return dialogs[i].cb (settings);
}
- return empathy_account_widget_generic_new (account);
+ return empathy_account_widget_generic_new (settings);
}
static void
-accounts_dialog_update_account (EmpathyAccountsDialog *dialog,
- EmpathyAccount *account)
+account_dialog_create_settings_widget (EmpathyAccountsDialog *dialog,
+ EmpathyAccountSettings *settings)
+{
+ dialog->settings_widget = get_account_setup_widget (settings);
+
+ gtk_container_add (GTK_CONTAINER (dialog->alignment_settings),
+ dialog->settings_widget);
+ gtk_widget_show (dialog->settings_widget);
+
+
+ gtk_image_set_from_icon_name (GTK_IMAGE (dialog->image_type),
+ empathy_account_settings_get_icon_name (settings),
+ GTK_ICON_SIZE_DIALOG);
+ gtk_widget_set_tooltip_text (dialog->image_type,
+ empathy_account_settings_get_protocol (settings));
+
+ accounts_dialog_update_name_label (dialog, settings);
+}
+
+static void
+account_dialog_settings_ready_cb (EmpathyAccountSettings *settings,
+ GParamSpec *spec, EmpathyAccountsDialog *dialog)
+{
+ if (empathy_account_settings_is_ready (settings))
+ account_dialog_create_settings_widget (dialog, settings);
+}
+
+static void
+accounts_dialog_update_settings (EmpathyAccountsDialog *dialog,
+ EmpathyAccountSettings *settings)
{
- if (!account) {
+ if (dialog->settings_ready != NULL) {
+ g_signal_handler_disconnect (dialog->settings_ready,
+ dialog->settings_ready_id);
+ dialog->settings_ready = NULL;
+ dialog->settings_ready_id = 0;
+ }
+
+ if (!settings) {
GtkTreeView *view;
GtkTreeModel *model;
@@ -251,20 +287,18 @@ accounts_dialog_update_account (EmpathyAccountsDialog *dialog,
dialog->settings_widget = NULL;
}
- dialog->settings_widget = get_account_setup_widget (account);
-
- gtk_container_add (GTK_CONTAINER (dialog->alignment_settings),
- dialog->settings_widget);
- gtk_widget_show (dialog->settings_widget);
-
-
- gtk_image_set_from_icon_name (GTK_IMAGE (dialog->image_type),
- empathy_account_get_icon_name (account),
- GTK_ICON_SIZE_DIALOG);
- gtk_widget_set_tooltip_text (dialog->image_type,
- empathy_account_get_protocol (account));
+ if (empathy_account_settings_is_ready (settings))
+ {
+ account_dialog_create_settings_widget (dialog, settings);
+ }
+ else
+ {
+ dialog->settings_ready = settings;
+ dialog->settings_ready_id =
+ g_signal_connect (settings, "notify::ready",
+ G_CALLBACK (account_dialog_settings_ready_cb), dialog);
+ }
- accounts_dialog_update_name_label (dialog, account);
}
static void
@@ -277,7 +311,8 @@ accounts_dialog_model_setup (EmpathyAccountsDialog *dialog)
G_TYPE_BOOLEAN, /* enabled */
G_TYPE_STRING, /* name */
G_TYPE_UINT, /* status */
- EMPATHY_TYPE_ACCOUNT); /* account */
+ EMPATHY_TYPE_ACCOUNT, /* account */
+ EMPATHY_TYPE_ACCOUNT_SETTINGS); /* settings */
gtk_tree_view_set_model (GTK_TREE_VIEW (dialog->treeview),
GTK_TREE_MODEL (store));
@@ -303,7 +338,7 @@ accounts_dialog_name_edited_cb (GtkCellRendererText *renderer,
gchar *new_text,
EmpathyAccountsDialog *dialog)
{
- EmpathyAccount *account;
+ EmpathyAccountSettings *settings;
GtkTreeModel *model;
GtkTreePath *treepath;
GtkTreeIter iter;
@@ -318,15 +353,16 @@ accounts_dialog_name_edited_cb (GtkCellRendererText *renderer,
treepath = gtk_tree_path_new_from_string (path);
gtk_tree_model_get_iter (model, &iter, treepath);
gtk_tree_model_get (model, &iter,
- COL_ACCOUNT_POINTER, &account,
+ COL_ACCOUNT_SETTINGS_POINTER, &settings,
-1);
gtk_list_store_set (GTK_LIST_STORE (model), &iter,
COL_NAME, new_text,
-1);
gtk_tree_path_free (treepath);
- empathy_account_set_display_name (account, new_text);
- g_object_unref (account);
+ empathy_account_settings_set_display_name_async (settings, new_text,
+ NULL, NULL);
+ g_object_unref (settings);
}
static void
@@ -348,6 +384,9 @@ accounts_dialog_enable_toggled_cb (GtkCellRendererToggle *cell_renderer,
-1);
gtk_tree_path_free (treepath);
+ if (account == NULL)
+ return;
+
enabled = empathy_account_is_enabled (account);
empathy_account_set_enabled (account, !enabled);
@@ -438,7 +477,7 @@ accounts_dialog_model_select_first (EmpathyAccountsDialog *dialog)
selection = gtk_tree_view_get_selection (view);
gtk_tree_selection_select_iter (selection, &iter);
} else {
- accounts_dialog_update_account (dialog, NULL);
+ accounts_dialog_update_settings (dialog, NULL);
}
}
@@ -449,17 +488,17 @@ accounts_dialog_model_pixbuf_data_func (GtkTreeViewColumn *tree_column,
GtkTreeIter *iter,
EmpathyAccountsDialog *dialog)
{
- EmpathyAccount *account;
+ EmpathyAccountSettings *settings;
const gchar *icon_name;
GdkPixbuf *pixbuf;
TpConnectionStatus status;
gtk_tree_model_get (model, iter,
COL_STATUS, &status,
- COL_ACCOUNT_POINTER, &account,
+ COL_ACCOUNT_SETTINGS_POINTER, &settings,
-1);
- icon_name = empathy_account_get_icon_name (account);
+ icon_name = empathy_account_settings_get_icon_name (settings);
pixbuf = empathy_pixbuf_from_icon_name (icon_name, GTK_ICON_SIZE_BUTTON);
if (pixbuf) {
@@ -488,15 +527,15 @@ accounts_dialog_model_pixbuf_data_func (GtkTreeViewColumn *tree_column,
"pixbuf", pixbuf,
NULL);
- g_object_unref (account);
+ g_object_unref (settings);
if (pixbuf) {
g_object_unref (pixbuf);
}
}
static gboolean
-accounts_dialog_get_account_iter (EmpathyAccountsDialog *dialog,
- EmpathyAccount *account,
+accounts_dialog_get_settings_iter (EmpathyAccountsDialog *dialog,
+ EmpathyAccountSettings *settings,
GtkTreeIter *iter)
{
GtkTreeView *view;
@@ -512,6 +551,42 @@ accounts_dialog_get_account_iter (EmpathyAccountsDialog *dialog,
for (ok = gtk_tree_model_get_iter_first (model, iter);
ok;
ok = gtk_tree_model_iter_next (model, iter)) {
+ EmpathyAccountSettings *this_settings;
+ gboolean equal;
+
+ gtk_tree_model_get (model, iter,
+ COL_ACCOUNT_SETTINGS_POINTER, &this_settings,
+ -1);
+
+ equal = (this_settings == settings);
+ g_object_unref (this_settings);
+
+ if (equal) {
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+static gboolean
+accounts_dialog_get_account_iter (EmpathyAccountsDialog *dialog,
+ EmpathyAccount *account,
+ GtkTreeIter *iter)
+{
+ GtkTreeView *view;
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+ gboolean ok;
+
+ /* Update the status in the model */
+ view = GTK_TREE_VIEW (dialog->treeview);
+ selection = gtk_tree_view_get_selection (view);
+ model = gtk_tree_view_get_model (view);
+
+ for (ok = gtk_tree_model_get_iter_first (model, iter);
+ ok;
+ ok = gtk_tree_model_iter_next (model, iter)) {
EmpathyAccount *this_account;
gboolean equal;
@@ -519,7 +594,7 @@ accounts_dialog_get_account_iter (EmpathyAccountsDialog *dialog,
COL_ACCOUNT_POINTER, &this_account,
-1);
- equal = empathy_account_equal (this_account, account);
+ equal = (this_account == account);
g_object_unref (this_account);
if (equal) {
@@ -530,8 +605,31 @@ accounts_dialog_get_account_iter (EmpathyAccountsDialog *dialog,
return FALSE;
}
+static EmpathyAccountSettings *
+accounts_dialog_model_get_selected_settings (EmpathyAccountsDialog *dialog)
+{
+ GtkTreeView *view;
+ GtkTreeModel *model;
+ GtkTreeSelection *selection;
+ GtkTreeIter iter;
+ EmpathyAccountSettings *settings;
+
+ view = GTK_TREE_VIEW (dialog->treeview);
+ selection = gtk_tree_view_get_selection (view);
+
+ if (!gtk_tree_selection_get_selected (selection, &model, &iter)) {
+ return NULL;
+ }
+
+ gtk_tree_model_get (model, &iter,
+ COL_ACCOUNT_SETTINGS_POINTER, &settings, -1);
+
+ return settings;
+}
+
+
static EmpathyAccount *
-accounts_dialog_model_get_selected (EmpathyAccountsDialog *dialog)
+accounts_dialog_model_get_selected_account (EmpathyAccountsDialog *dialog)
{
GtkTreeView *view;
GtkTreeModel *model;
@@ -553,13 +651,13 @@ accounts_dialog_model_get_selected (EmpathyAccountsDialog *dialog)
static void
accounts_dialog_model_set_selected (EmpathyAccountsDialog *dialog,
- EmpathyAccount *account)
+ EmpathyAccountSettings *settings)
{
GtkTreeSelection *selection;
GtkTreeIter iter;
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (dialog->treeview));
- if (accounts_dialog_get_account_iter (dialog, account, &iter)) {
+ if (accounts_dialog_get_settings_iter (dialog, settings, &iter)) {
gtk_tree_selection_select_iter (selection, &iter);
}
}
@@ -586,25 +684,48 @@ static void
accounts_dialog_model_selection_changed (GtkTreeSelection *selection,
EmpathyAccountsDialog *dialog)
{
- EmpathyAccount *account;
+ EmpathyAccountSettings *settings;
GtkTreeModel *model;
GtkTreeIter iter;
gboolean is_selection;
is_selection = gtk_tree_selection_get_selected (selection, &model, &iter);
- account = accounts_dialog_model_get_selected (dialog);
- accounts_dialog_update_account (dialog, account);
+ settings = accounts_dialog_model_get_selected_settings (dialog);
+ accounts_dialog_update_settings (dialog, settings);
- if (account) {
- g_object_unref (account);
+ if (settings) {
+ g_object_unref (settings);
}
}
static void
-accounts_dialog_add_or_update_account (EmpathyAccountsDialog *dialog,
+accounts_dialog_add (EmpathyAccountsDialog *dialog,
+ EmpathyAccountSettings *settings)
+{
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ const gchar *name;
+
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->treeview));
+ name = empathy_account_settings_get_display_name (settings);
+
+ gtk_list_store_append (GTK_LIST_STORE (model), &iter);
+
+ gtk_list_store_set (GTK_LIST_STORE (model), &iter,
+ COL_ENABLED, FALSE,
+ COL_NAME, name,
+ COL_STATUS, TP_CONNECTION_STATUS_DISCONNECTED,
+ COL_ACCOUNT_SETTINGS_POINTER, settings,
+ -1);
+}
+
+
+static void
+accounts_dialog_add_account (EmpathyAccountsDialog *dialog,
EmpathyAccount *account)
{
+ EmpathyAccountSettings *settings;
GtkTreeModel *model;
GtkTreeIter iter;
TpConnectionStatus status;
@@ -616,16 +737,16 @@ accounts_dialog_add_or_update_account (EmpathyAccountsDialog *dialog,
name = empathy_account_get_display_name (account);
enabled = empathy_account_is_enabled (account);
- if (!accounts_dialog_get_account_iter (dialog, account, &iter)) {
- DEBUG ("Adding new account");
- gtk_list_store_append (GTK_LIST_STORE (model), &iter);
- }
+ gtk_list_store_append (GTK_LIST_STORE (model), &iter);
+
+ settings = empathy_account_settings_new_for_account (account);
gtk_list_store_set (GTK_LIST_STORE (model), &iter,
COL_ENABLED, enabled,
COL_NAME, name,
COL_STATUS, status,
COL_ACCOUNT_POINTER, account,
+ COL_ACCOUNT_SETTINGS_POINTER, settings,
-1);
accounts_dialog_connection_changed_cb (dialog->account_manager,
@@ -634,6 +755,39 @@ accounts_dialog_add_or_update_account (EmpathyAccountsDialog *dialog,
status,
TP_CONNECTION_STATUS_DISCONNECTED,
dialog);
+
+ g_object_unref (settings);
+}
+
+static void
+accounts_dialog_update (EmpathyAccountsDialog *dialog,
+ EmpathyAccountSettings *settings)
+{
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ TpConnectionStatus status = TP_CONNECTION_STATUS_DISCONNECTED;
+ const gchar *name;
+ gboolean enabled = FALSE;
+ EmpathyAccount *account;
+
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->treeview));
+ name = empathy_account_settings_get_display_name (settings);
+
+ account = empathy_account_settings_get_account (settings);
+ if (account != NULL)
+ {
+ enabled = empathy_account_is_enabled (account);
+ g_object_get (account, "connection-status", &status, NULL);
+ }
+
+ accounts_dialog_get_settings_iter (dialog, settings, &iter);
+ gtk_list_store_set (GTK_LIST_STORE (model), &iter,
+ COL_ENABLED, enabled,
+ COL_NAME, name,
+ COL_STATUS, status,
+ COL_ACCOUNT_POINTER, account,
+ COL_ACCOUNT_SETTINGS_POINTER, settings,
+ -1);
}
static void
@@ -641,43 +795,20 @@ accounts_dialog_account_added_cb (EmpathyAccountManager *manager,
EmpathyAccount *account,
EmpathyAccountsDialog *dialog)
{
- const gchar *current_name;
- const gchar *account_param = NULL;
-
- accounts_dialog_add_or_update_account (dialog, account);
-
- /* Change the display name to "%s (%s)" % (protocol, account).
- * - The protocol is the display name of the profile.
- * - The account should be the normalized name of the EmpathyAccount but
- * it's not set until first connection, so we get the "account"
- * parameter for CM that have it. */
- current_name = empathy_account_get_display_name (account);
- account_param = empathy_account_get_param_string (account, "account");
- if (!EMP_STR_EMPTY (account_param)) {
- gchar *new_name;
-
- new_name = g_strdup_printf ("%s (%s)",
- empathy_account_get_protocol (account),
- account_param);
-
- DEBUG ("Setting new display name for account %s: '%s'",
- empathy_account_get_unique_name (account), new_name);
-
- empathy_account_set_display_name (account, new_name);
- g_free (new_name);
- } else {
- /* FIXME: This CM has no account parameter, what can be done? */
- }
+ accounts_dialog_add_account (dialog, account);
}
+
static void
accounts_dialog_account_removed_cb (EmpathyAccountManager *manager,
EmpathyAccount *account,
EmpathyAccountsDialog *dialog)
{
+ GtkTreeIter iter;
- accounts_dialog_model_set_selected (dialog, account);
- accounts_dialog_model_remove_selected (dialog);
+ if (accounts_dialog_get_account_iter (dialog, account, &iter))
+ gtk_list_store_remove (GTK_LIST_STORE (
+ gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->treeview))), &iter);
}
static gboolean
@@ -791,20 +922,31 @@ accounts_dialog_account_changed_cb (EmpathyAccountManager *manager,
EmpathyAccount *account,
EmpathyAccountsDialog *dialog)
{
- EmpathyAccount *selected_account;
+ EmpathyAccountSettings *settings, *selected_settings;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
- accounts_dialog_add_or_update_account (dialog, account);
- selected_account = accounts_dialog_model_get_selected (dialog);
- if (empathy_account_equal (account, selected_account)) {
- accounts_dialog_update_name_label (dialog, account);
- }
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->treeview));
+
+ if (!accounts_dialog_get_account_iter (dialog, account, &iter))
+ return;
+
+ gtk_tree_model_get (model, &iter,
+ COL_ACCOUNT_SETTINGS_POINTER, &settings,
+ -1);
+
+ accounts_dialog_update (dialog, settings);
+ selected_settings = accounts_dialog_model_get_selected_settings (dialog);
+
+ if (settings == selected_settings)
+ accounts_dialog_update_name_label (dialog, settings);
}
static void
accounts_dialog_button_create_clicked_cb (GtkWidget *button,
EmpathyAccountsDialog *dialog)
{
- EmpathyAccount *account;
+ EmpathyAccountSettings *settings;
gchar *str;
TpConnectionManager *cm;
TpConnectionManagerProtocol *proto;
@@ -816,30 +958,23 @@ accounts_dialog_button_create_clicked_cb (GtkWidget *button,
/* To translator: %s is the protocol name */
str = g_strdup_printf (_("New %s account"), proto->name);
- account = empathy_account_manager_create (dialog->account_manager,
- cm->name, proto->name, str);
+ settings = empathy_account_settings_new (cm->name, proto->name, str);
g_free (str);
- if (account == NULL) {
- /* We can't display an error to the user as MC doesn't give us
- * any clue about the reason of the failure... */
- return;
- }
-
if (tp_connection_manager_protocol_can_register (proto)) {
gboolean active;
active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->radiobutton_register));
if (active) {
- empathy_account_set_param_boolean (account, "register", TRUE);
+ empathy_account_settings_set_boolean (settings, "register", TRUE);
}
}
- accounts_dialog_add_or_update_account (dialog, account);
- accounts_dialog_model_set_selected (dialog, account);
+ accounts_dialog_add (dialog, settings);
+ accounts_dialog_model_set_selected (dialog, settings);
- g_object_unref (account);
+ g_object_unref (settings);
g_object_unref (cm);
}
@@ -847,10 +982,10 @@ static void
accounts_dialog_button_back_clicked_cb (GtkWidget *button,
EmpathyAccountsDialog *dialog)
{
- EmpathyAccount *account;
+ EmpathyAccountSettings *settings;
- account = accounts_dialog_model_get_selected (dialog);
- accounts_dialog_update_account (dialog, account);
+ settings = accounts_dialog_model_get_selected_settings (dialog);
+ accounts_dialog_update (dialog, settings);
}
static void
@@ -921,9 +1056,9 @@ accounts_dialog_button_remove_clicked_cb (GtkWidget *button,
GtkWidget *message_dialog;
gint res;
- account = accounts_dialog_model_get_selected (dialog);
+ account = accounts_dialog_model_get_selected_account (dialog);
- if (!empathy_account_is_valid (account)) {
+ if (account == NULL || !empathy_account_is_valid (account)) {
accounts_dialog_model_remove_selected (dialog);
accounts_dialog_model_select_first (dialog);
return;
@@ -1127,13 +1262,19 @@ empathy_accounts_dialog_show (GtkWindow *parent,
/* Add existing accounts */
accounts = empathy_account_manager_dup_accounts (dialog->account_manager);
for (l = accounts; l; l = l->next) {
- accounts_dialog_add_or_update_account (dialog, l->data);
+ accounts_dialog_add_account (dialog, l->data);
g_object_unref (l->data);
}
g_list_free (accounts);
if (selected_account) {
- accounts_dialog_model_set_selected (dialog, selected_account);
+ GtkTreeSelection *selection;
+ GtkTreeIter iter;
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (dialog->treeview));
+ if (accounts_dialog_get_account_iter (dialog, selected_account, &iter)) {
+ gtk_tree_selection_select_iter (selection, &iter);
+ }
} else {
accounts_dialog_model_select_first (dialog);
}