diff options
author | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2012-01-13 14:56:41 +0100 |
---|---|---|
committer | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2012-01-13 15:14:25 +0100 |
commit | 2a7fa12bcf9c0ee5a9ff506bc88af2194990dabc (patch) | |
tree | 5f52a4950e1864ecc824808f692a816ee697c642 /libempathy | |
parent | ddb4928052ff303f024ea9b69e10064fade790a3 (diff) | |
download | empathy-2a7fa12bcf9c0ee5a9ff506bc88af2194990dabc.tar.gz |
account-settings: allow to change the service
https://bugzilla.gnome.org/show_bug.cgi?id=667791
Diffstat (limited to 'libempathy')
-rw-r--r-- | libempathy/empathy-account-settings.c | 44 | ||||
-rw-r--r-- | libempathy/empathy-account-settings.h | 3 |
2 files changed, 47 insertions, 0 deletions
diff --git a/libempathy/empathy-account-settings.c b/libempathy/empathy-account-settings.c index 78d609685..cf269bdc8 100644 --- a/libempathy/empathy-account-settings.c +++ b/libempathy/empathy-account-settings.c @@ -103,6 +103,8 @@ struct _EmpathyAccountSettingsPriv /* If TRUE, the account should have 'tel' in its * Account.Interface.Addressing.URISchemes property. */ gboolean uri_scheme_tel; + /* If TRUE, Service property needs to be updated when applying changes */ + gboolean update_service; GSimpleAsyncResult *apply_result; }; @@ -743,6 +745,21 @@ empathy_account_settings_get_service (EmpathyAccountSettings *settings) return priv->service; } +void +empathy_account_settings_set_service (EmpathyAccountSettings *settings, + const gchar *service) +{ + EmpathyAccountSettingsPriv *priv = GET_PRIV (settings); + + if (!tp_strdiff (priv->service, service)) + return; + + g_free (priv->service); + priv->service = g_strdup (service); + g_object_notify (G_OBJECT (settings), "service"); + priv->update_service = TRUE; +} + gchar * empathy_account_settings_get_icon_name (EmpathyAccountSettings *settings) { @@ -1446,6 +1463,32 @@ update_account_uri_schemes (EmpathyAccountSettings *self) } static void +set_service_cb (GObject *source, + GAsyncResult *result, + gpointer user_data) +{ + GError *error = NULL; + + if (!tp_account_set_service_finish (TP_ACCOUNT (source), result, &error)) + { + DEBUG ("Failed to set Account.Service: %s", error->message); + g_error_free (error); + } +} + +static void +update_account_service (EmpathyAccountSettings *self) +{ + EmpathyAccountSettingsPriv *priv = GET_PRIV (self); + + if (!priv->update_service) + return; + + tp_account_set_service_async (priv->account, + priv->service != NULL ? priv->service : "", set_service_cb, self); +} + +static void empathy_account_settings_account_updated (GObject *source, GAsyncResult *result, gpointer user_data) @@ -1486,6 +1529,7 @@ empathy_account_settings_account_updated (GObject *source, } update_account_uri_schemes (settings); + update_account_service (settings); g_simple_async_result_set_op_res_gboolean (priv->apply_result, g_strv_length (reconnect_required) > 0); diff --git a/libempathy/empathy-account-settings.h b/libempathy/empathy-account-settings.h index ea0c5b048..10ed3684f 100644 --- a/libempathy/empathy-account-settings.h +++ b/libempathy/empathy-account-settings.h @@ -78,6 +78,9 @@ const gchar *empathy_account_settings_get_protocol ( const gchar *empathy_account_settings_get_service ( EmpathyAccountSettings *settings); +void empathy_account_settings_set_service (EmpathyAccountSettings *settings, + const gchar *service); + TpAccount *empathy_account_settings_get_account ( EmpathyAccountSettings *settings); |