diff options
author | Cosimo Cecchi <cosimoc@gnome.org> | 2009-08-28 20:36:44 +0800 |
---|---|---|
committer | Cosimo Cecchi <cosimoc@gnome.org> | 2009-08-31 23:20:55 +0800 |
commit | 35aa8545a7ba5d6bef718206f11d3b391dcfc4e4 (patch) | |
tree | 4c0fc7429b2da11a7356c14c0042ebd0b3bd5ce6 /libempathy/empathy-account.c | |
parent | 5ca188be7636eec84c5a20be11fb7d137c0efbc1 (diff) | |
download | gsoc2013-empathy-35aa8545a7ba5d6bef718206f11d3b391dcfc4e4.tar gsoc2013-empathy-35aa8545a7ba5d6bef718206f11d3b391dcfc4e4.tar.gz gsoc2013-empathy-35aa8545a7ba5d6bef718206f11d3b391dcfc4e4.tar.bz2 gsoc2013-empathy-35aa8545a7ba5d6bef718206f11d3b391dcfc4e4.tar.lz gsoc2013-empathy-35aa8545a7ba5d6bef718206f11d3b391dcfc4e4.tar.xz gsoc2013-empathy-35aa8545a7ba5d6bef718206f11d3b391dcfc4e4.tar.zst gsoc2013-empathy-35aa8545a7ba5d6bef718206f11d3b391dcfc4e4.zip |
Implement setting icon name to the account and to the settings.
Diffstat (limited to 'libempathy/empathy-account.c')
-rw-r--r-- | libempathy/empathy-account.c | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/libempathy/empathy-account.c b/libempathy/empathy-account.c index 0e4758baa..175bea64d 100644 --- a/libempathy/empathy-account.c +++ b/libempathy/empathy-account.c @@ -240,6 +240,19 @@ empathy_account_update (EmpathyAccount *account, g_object_notify (G_OBJECT (account), "display-name"); } + if (g_hash_table_lookup (properties, "Icon") != NULL) + { + const gchar *icon_name; + + icon_name = tp_asv_get_string (properties, "Icon"); + + if (!EMP_STR_EMPTY (icon_name)) + { + g_free (priv->icon_name); + priv->icon_name = g_strdup (icon_name); + } + } + if (g_hash_table_lookup (properties, "Enabled") != NULL) { gboolean enabled = tp_asv_get_boolean (properties, "Enabled", NULL); @@ -1170,6 +1183,62 @@ empathy_account_set_display_name_finish (EmpathyAccount *account, } static void +account_icon_name_set_cb (TpProxy *proxy, + const GError *error, + gpointer user_data, + GObject *weak_object) +{ + GSimpleAsyncResult *result = user_data; + + if (error != NULL) + g_simple_async_result_set_from_error (result, (GError *) error); + + g_simple_async_result_complete (result); + g_object_unref (result); +} + +void +empathy_account_set_icon_name_async (EmpathyAccount *account, + const char *icon_name, + GAsyncReadyCallback callback, + gpointer user_data) +{ + GSimpleAsyncResult *result; + GValue value = {0, }; + EmpathyAccountPriv *priv = GET_PRIV (account); + const char *icon_name_set; + + if (icon_name == NULL) + /* settings an empty icon name is allowed */ + icon_name_set = ""; + else + icon_name_set = icon_name; + + result = g_simple_async_result_new (G_OBJECT (account), callback, + user_data, empathy_account_set_icon_name_finish); + + g_value_init (&value, G_TYPE_STRING); + g_value_set_string (&value, icon_name_set); + + tp_cli_dbus_properties_call_set (priv->account, -1, TP_IFACE_ACCOUNT, + "Icon", &value, account_icon_name_set_cb, result, NULL, + G_OBJECT (account)); +} + +gboolean +empathy_account_set_icon_name_finish (EmpathyAccount *account, + GAsyncResult *result, GError **error) +{ + if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), + error) || + !g_simple_async_result_is_valid (result, G_OBJECT (account), + empathy_account_set_icon_name_finish)) + return FALSE; + + return TRUE; +} + +static void empathy_account_remove_cb (TpAccount *proxy, const GError *error, gpointer user_data, @@ -1232,3 +1301,4 @@ empathy_account_refresh_properties (EmpathyAccount *account) NULL, G_OBJECT (account)); } + |