1
Description: Addition of FormatsLocale property and SetFormatsLocale method.
2
Forwarded: https://bugs.freedesktop.org/42857
3
Author: Gunnar Hjalmarsson <ubuntu@gunnar.cc>
4
Last-Update: 2011-11-12
6
Index: accountsservice-0.6.35/data/org.freedesktop.Accounts.User.xml
7
===================================================================
8
--- accountsservice-0.6.35.orig/data/org.freedesktop.Accounts.User.xml 2013-11-13 15:16:36.076124828 +0100
9
+++ accountsservice-0.6.35/data/org.freedesktop.Accounts.User.xml 2013-11-13 15:16:36.064124828 +0100
14
+ <method name="SetFormatsLocale">
15
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
16
+ <arg name="formats_locale" direction="in" type="s">
19
+ The new regional formats, as a locale specification like "de_DE.UTF-8".
26
+ Sets the users regional formats.
30
+ The caller needs one of the following PolicyKit authorizations:
33
+ <doc:term>org.freedesktop.accounts.change-own-user-data</doc:term>
34
+ <doc:definition>To change his own language</doc:definition>
37
+ <doc:term>org.freedesktop.accounts.user-administration</doc:term>
38
+ <doc:definition>To change the language of another user</doc:definition>
43
+ <doc:error name="org.freedesktop.Accounts.Error.PermissionDenied">if the caller lacks the appropriate PolicyKit authorization</doc:error>
44
+ <doc:error name="org.freedesktop.Accounts.Error.Failed">if the operation failed</doc:error>
49
<method name="SetXSession">
50
<annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
51
<annotation name="org.freedesktop.DBus.GLib.CSymbol" value="user_set_x_session"/>
58
+ <property name="FormatsLocale" type="s" access="read">
62
+ The users regional formats, as a locale specification like "de_DE.UTF-8".
68
<property name="XSession" type="s" access="read">
69
Index: accountsservice-0.6.35/src/libaccountsservice/act-user.c
70
===================================================================
71
--- accountsservice-0.6.35.orig/src/libaccountsservice/act-user.c 2013-11-13 15:16:36.076124828 +0100
72
+++ accountsservice-0.6.35/src/libaccountsservice/act-user.c 2013-11-13 15:16:36.068124828 +0100
77
+ PROP_FORMATS_LOCALE,
85
+ char *formats_locale;
88
GList *other_sessions;
91
g_value_set_string (value, user->language);
93
+ case PROP_FORMATS_LOCALE:
94
+ g_value_set_string (value, user->formats_locale);
97
g_value_set_string (value, user->x_session);
102
g_object_class_install_property (gobject_class,
103
+ PROP_FORMATS_LOCALE,
104
+ g_param_spec_string ("formats_locale",
105
+ "Regional Formats",
106
+ "User's regional formats.",
108
+ G_PARAM_READABLE));
109
+ g_object_class_install_property (gobject_class,
111
g_param_spec_string ("x-session",
114
g_free (user->location);
115
if (user->login_history)
116
g_variant_unref (user->login_history);
117
+ g_free (user->formats_locale);
119
if (user->accounts_proxy != NULL) {
120
g_object_unref (user->accounts_proxy);
121
@@ -1052,6 +1065,22 @@
125
+ * act_user_get_formats_locale:
126
+ * @user: a #ActUser
128
+ * Returns the path to the configured formats locale of @user.
130
+ * Returns: (transfer none): a path to an icon
133
+act_user_get_formats_locale (ActUser *user)
135
+ g_return_val_if_fail (ACT_IS_USER (user), NULL);
137
+ return user->formats_locale;
141
* act_user_get_x_session:
144
@@ -1279,6 +1308,17 @@
145
user->language = g_strdup (new_language);
146
g_object_notify (G_OBJECT (user), "language");
149
+ } else if (strcmp (key, "FormatsLocale") == 0) {
150
+ const char *new_formats_locale;
152
+ new_formats_locale = g_variant_get_string (value, NULL);
153
+ if (g_strcmp0 (user->formats_locale, new_formats_locale) != 0) {
154
+ g_free (user->formats_locale);
155
+ user->formats_locale = g_strdup (new_formats_locale);
156
+ g_object_notify (G_OBJECT (user), "formats_locale");
159
} else if (strcmp (key, "XSession") == 0) {
160
const char *new_x_session;
162
@@ -1603,6 +1643,35 @@
163
g_error_free (error);
169
+ * act_user_set_formats_locale:
170
+ * @user: the user object to alter.
171
+ * @formats_locale: a locale (e.g. en_US.utf8)
173
+ * Assigns a new formats locale for @user.
175
+ * Note this function is synchronous and ignores errors.
178
+act_user_set_formats_locale (ActUser *user,
179
+ const char *formats_locale)
181
+ GError *error = NULL;
183
+ g_return_if_fail (ACT_IS_USER (user));
184
+ g_return_if_fail (formats_locale != NULL);
185
+ g_return_if_fail (ACCOUNTS_IS_USER (user->accounts_proxy));
187
+ if (!accounts_user_call_set_formats_locale_sync (user->accounts_proxy,
191
+ g_warning ("SetFormatsLocale call failed: %s", error->message);
192
+ g_error_free (error);
198
Index: accountsservice-0.6.35/src/libaccountsservice/act-user.h
199
===================================================================
200
--- accountsservice-0.6.35.orig/src/libaccountsservice/act-user.h 2013-11-13 15:16:36.076124828 +0100
201
+++ accountsservice-0.6.35/src/libaccountsservice/act-user.h 2013-11-13 15:16:36.068124828 +0100
203
gboolean act_user_is_nonexistent (ActUser *user);
204
const char *act_user_get_icon_file (ActUser *user);
205
const char *act_user_get_language (ActUser *user);
206
+const char *act_user_get_formats_locale (ActUser *user);
207
const char *act_user_get_x_session (ActUser *user);
208
const char *act_user_get_primary_session_id (ActUser *user);
212
void act_user_set_language (ActUser *user,
213
const char *language);
214
+void act_user_set_formats_locale (ActUser *user,
215
+ const char *formats_locale);
216
void act_user_set_x_session (ActUser *user,
217
const char *x_session);
218
void act_user_set_location (ActUser *user,
219
Index: accountsservice-0.6.35/src/user.c
220
===================================================================
221
--- accountsservice-0.6.35.orig/src/user.c 2013-11-13 15:16:36.076124828 +0100
222
+++ accountsservice-0.6.35/src/user.c 2013-11-13 15:16:36.072124828 +0100
227
+ PROP_FORMATS_LOCALE,
230
PROP_LOGIN_FREQUENCY,
235
+ gchar *formats_locale;
238
guint64 login_frequency;
240
g_object_notify (G_OBJECT (user), "language");
243
+ s = g_key_file_get_string (keyfile, "User", "FormatsLocale", NULL);
245
+ g_free (user->formats_locale);
246
+ user->formats_locale = s;
247
+ g_object_notify (G_OBJECT (user), "formats-locale");
250
s = g_key_file_get_string (keyfile, "User", "XSession", NULL);
252
g_free (user->x_session);
255
g_key_file_set_string (keyfile, "User", "Language", user->language);
257
+ if (user->formats_locale)
258
+ g_key_file_set_string (keyfile, "User", "FormatsLocale", user->formats_locale);
261
g_key_file_set_string (keyfile, "User", "XSession", user->x_session);
263
@@ -1106,6 +1118,61 @@
267
+user_change_formats_locale_authorized_cb (Daemon *daemon,
269
+ GDBusMethodInvocation *context,
273
+ gchar *formats_locale = data;
275
+ if (g_strcmp0 (user->formats_locale, formats_locale) != 0) {
276
+ g_free (user->formats_locale);
277
+ user->formats_locale = g_strdup (formats_locale);
279
+ save_extra_data (user);
281
+ accounts_user_emit_changed (ACCOUNTS_USER (user));
283
+ g_object_notify (G_OBJECT (user), "formats_locale");
286
+ accounts_user_complete_set_formats_locale (ACCOUNTS_USER (user), context);
290
+user_set_formats_locale (AccountsUser *auser,
291
+ GDBusMethodInvocation *context,
292
+ const gchar *formats_locale)
294
+ User *user = (User*)auser;
297
+ const gchar *action_id;
299
+ if (!get_caller_uid (context, &uid)) {
300
+ throw_error (context, ERROR_FAILED, "identifying caller failed");
304
+ if (user->uid == (uid_t) uid)
305
+ action_id = "org.freedesktop.accounts.change-own-user-data";
307
+ action_id = "org.freedesktop.accounts.user-administration";
309
+ daemon_local_check_auth (user->daemon,
313
+ user_change_formats_locale_authorized_cb,
315
+ g_strdup (formats_locale),
316
+ (GDestroyNotify) g_free);
322
user_change_x_session_authorized_cb (Daemon *daemon,
324
GDBusMethodInvocation *context,
325
@@ -2106,6 +2173,7 @@
326
g_free (user->default_icon_file);
327
g_free (user->email);
328
g_free (user->language);
329
+ g_free (user->formats_locale);
330
g_free (user->x_session);
331
g_free (user->location);
332
g_free (user->password_hint);
333
@@ -2132,6 +2200,9 @@
335
user->language = g_value_dup_string (value);
337
+ case PROP_FORMATS_LOCALE:
338
+ user->formats_locale = g_value_dup_string (value);
341
user->x_session = g_value_dup_string (value);
343
@@ -2200,6 +2271,9 @@
345
g_value_set_string (value, user->language);
347
+ case PROP_FORMATS_LOCALE:
348
+ g_value_set_string (value, user->formats_locale);
351
g_value_set_string (value, user->x_session);
353
@@ -2263,6 +2337,7 @@
354
iface->handle_set_account_type = user_set_account_type;
355
iface->handle_set_automatic_login = user_set_automatic_login;
356
iface->handle_set_email = user_set_email;
357
+ iface->handle_set_formats_locale = user_set_formats_locale;
358
iface->handle_set_home_directory = user_set_home_directory;
359
iface->handle_set_icon_file = user_set_icon_file;
360
iface->handle_set_language = user_set_language;
361
@@ -2309,6 +2384,7 @@
362
user->default_icon_file = NULL;
364
user->language = NULL;
365
+ user->formats_locale = NULL;
366
user->x_session = NULL;
367
user->location = NULL;
368
user->password_mode = PASSWORD_MODE_REGULAR;