Compare commits
10 Commits
3ecf97bd91
...
e49cdc8338
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e49cdc8338 | ||
|
|
c7cdf520a5 | ||
|
|
b954535e5a | ||
|
|
a736ff85aa | ||
|
|
e222ab5663 | ||
|
|
0669db37ed | ||
|
|
9cc1c96998 | ||
|
|
a7104621c8 | ||
|
|
7cbfaeca33 | ||
|
|
3839f0787c |
Binary file not shown.
307
accountsservice-22.08.8-kylin-add-background-file-support.patch
Normal file
307
accountsservice-22.08.8-kylin-add-background-file-support.patch
Normal file
@ -0,0 +1,307 @@
|
|||||||
|
From 06f3b7c3f0f2afec76d370ff134a2d029c0482c7 Mon Sep 17 00:00:00 2001
|
||||||
|
From: peijiankang <peijiankang@kylinos.cn>
|
||||||
|
Date: Mon, 18 Sep 2023 10:29:43 +0800
|
||||||
|
Subject: [PATCH] add-background-file-support
|
||||||
|
|
||||||
|
---
|
||||||
|
data/org.freedesktop.Accounts.User.xml | 46 +++++++++++++++
|
||||||
|
src/libaccountsservice/act-user.c | 57 +++++++++++++++++++
|
||||||
|
src/libaccountsservice/act-user.h | 3 +
|
||||||
|
src/user.c | 79 ++++++++++++++++++++++++++
|
||||||
|
4 files changed, 185 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/data/org.freedesktop.Accounts.User.xml b/data/org.freedesktop.Accounts.User.xml
|
||||||
|
index d54ba44..7a8a915 100644
|
||||||
|
--- a/data/org.freedesktop.Accounts.User.xml
|
||||||
|
+++ b/data/org.freedesktop.Accounts.User.xml
|
||||||
|
@@ -420,6 +420,42 @@
|
||||||
|
</doc:doc>
|
||||||
|
</method>
|
||||||
|
|
||||||
|
+ <method name="SetBackgroundFile">
|
||||||
|
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
|
||||||
|
+ <arg name="filename" direction="in" type="s">
|
||||||
|
+ <doc:doc>
|
||||||
|
+ <doc:summary>
|
||||||
|
+ The absolute filename of a png file to use as the users background.
|
||||||
|
+ </doc:summary>
|
||||||
|
+ </doc:doc>
|
||||||
|
+ </arg>
|
||||||
|
+ <doc:doc>
|
||||||
|
+ <doc:description>
|
||||||
|
+ <doc:para>
|
||||||
|
+ Sets the users background.
|
||||||
|
+ </doc:para>
|
||||||
|
+ </doc:description>
|
||||||
|
+ <doc:permission>
|
||||||
|
+ The caller needs one of the following PolicyKit authorizations:
|
||||||
|
+ <doc:list>
|
||||||
|
+ <doc:item>
|
||||||
|
+ <doc:term>org.freedesktop.accounts.change-own-user-data</doc:term>
|
||||||
|
+ <doc:definition>To change his own background</doc:definition>
|
||||||
|
+ </doc:item>
|
||||||
|
+ <doc:item>
|
||||||
|
+ <doc:term>org.freedesktop.accounts.user-administration</doc:term>
|
||||||
|
+ <doc:definition>To change the background of another user</doc:definition>
|
||||||
|
+ </doc:item>
|
||||||
|
+ </doc:list>
|
||||||
|
+ </doc:permission>
|
||||||
|
+ <doc:errors>
|
||||||
|
+ <doc:error name="org.freedesktop.Accounts.Error.PermissionDenied">if the caller lacks the appropriate PolicyKit authorization</doc:error>
|
||||||
|
+ <doc:error name="org.freedesktop.Accounts.Error.Failed">if the operation failed</doc:error>
|
||||||
|
+ </doc:errors>
|
||||||
|
+ </doc:doc>
|
||||||
|
+ </method>
|
||||||
|
+
|
||||||
|
+
|
||||||
|
<method name="SetIconFile">
|
||||||
|
<annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
|
||||||
|
<arg name="filename" direction="in" type="s">
|
||||||
|
@@ -893,6 +929,16 @@
|
||||||
|
</doc:doc>
|
||||||
|
</property>
|
||||||
|
|
||||||
|
+ <property name="BackgroundFile" type="s" access="read">
|
||||||
|
+ <doc:doc>
|
||||||
|
+ <doc:description>
|
||||||
|
+ <doc:para>
|
||||||
|
+ The filename of a png file containing the users background.
|
||||||
|
+ </doc:para>
|
||||||
|
+ </doc:description>
|
||||||
|
+ </doc:doc>
|
||||||
|
+ </property>
|
||||||
|
+
|
||||||
|
<property name="IconFile" type="s" access="read">
|
||||||
|
<doc:doc>
|
||||||
|
<doc:description>
|
||||||
|
diff --git a/src/libaccountsservice/act-user.c b/src/libaccountsservice/act-user.c
|
||||||
|
index 77b7b2f..9125d43 100644
|
||||||
|
--- a/src/libaccountsservice/act-user.c
|
||||||
|
+++ b/src/libaccountsservice/act-user.c
|
||||||
|
@@ -90,6 +90,7 @@ enum
|
||||||
|
PROP_LOGIN_FREQUENCY,
|
||||||
|
PROP_LOGIN_TIME,
|
||||||
|
PROP_LOGIN_HISTORY,
|
||||||
|
+ PROP_BACKGROUND_FILE,
|
||||||
|
PROP_ICON_FILE,
|
||||||
|
PROP_LANGUAGE,
|
||||||
|
PROP_X_SESSION,
|
||||||
|
@@ -272,6 +273,13 @@ act_user_class_init (ActUserClass *class)
|
||||||
|
"The real name to display for this user.",
|
||||||
|
NULL,
|
||||||
|
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
|
||||||
|
+ g_object_class_install_property (gobject_class,
|
||||||
|
+ PROP_BACKGROUND_FILE,
|
||||||
|
+ g_param_spec_string ("background-file",
|
||||||
|
+ "Background File",
|
||||||
|
+ "The path to a background for this user.",
|
||||||
|
+ NULL,
|
||||||
|
+ G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
|
||||||
|
|
||||||
|
g_object_class_install_property (gobject_class,
|
||||||
|
PROP_ACCOUNT_TYPE,
|
||||||
|
@@ -998,6 +1006,25 @@ act_user_is_nonexistent (ActUser *user)
|
||||||
|
return user->nonexistent;
|
||||||
|
}
|
||||||
|
|
||||||
|
+/**
|
||||||
|
+ * act_user_get_background_file:
|
||||||
|
+ * @user: a #ActUser
|
||||||
|
+ *
|
||||||
|
+ * Returns the path to the account background belonging to @user.
|
||||||
|
+ *
|
||||||
|
+ * Returns: (transfer none): a path to a background
|
||||||
|
+ */
|
||||||
|
+const char *
|
||||||
|
+act_user_get_background_file (ActUser *user)
|
||||||
|
+{
|
||||||
|
+ g_return_val_if_fail (ACT_IS_USER (user), NULL);
|
||||||
|
+
|
||||||
|
+ if (user->accounts_proxy == NULL)
|
||||||
|
+ return NULL;
|
||||||
|
+
|
||||||
|
+ return accounts_user_get_background_file (user->accounts_proxy);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/**
|
||||||
|
* act_user_get_icon_file:
|
||||||
|
* @user: a #ActUser
|
||||||
|
@@ -1474,6 +1501,7 @@ act_user_set_language (ActUser *user,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+
|
||||||
|
/**
|
||||||
|
* act_user_set_languages:
|
||||||
|
* @user: the user object to alter.
|
||||||
|
@@ -1509,6 +1537,35 @@ act_user_set_languages (ActUser *user,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+/**
|
||||||
|
+ * act_user_set_background_file:
|
||||||
|
+ * @user: the user object to alter.
|
||||||
|
+ * @background_file: path to an background
|
||||||
|
+ *
|
||||||
|
+ * Assigns a new background for @user.
|
||||||
|
+ *
|
||||||
|
+ * Note this function is synchronous and ignores errors.
|
||||||
|
+ **/
|
||||||
|
+void
|
||||||
|
+act_user_set_background_file (ActUser *user,
|
||||||
|
+ const char *background_file)
|
||||||
|
+{
|
||||||
|
+ g_autoptr(GError) error = NULL;
|
||||||
|
+
|
||||||
|
+ g_return_if_fail (ACT_IS_USER (user));
|
||||||
|
+ g_return_if_fail (background_file != NULL);
|
||||||
|
+ g_return_if_fail (ACCOUNTS_IS_USER (user->accounts_proxy));
|
||||||
|
+
|
||||||
|
+ if (!accounts_user_call_set_background_file_sync (user->accounts_proxy,
|
||||||
|
+ background_file,
|
||||||
|
+ G_DBUS_CALL_FLAGS_ALLOW_INTERACTIVE_AUTHORIZATION,
|
||||||
|
+ -1,
|
||||||
|
+ NULL,
|
||||||
|
+ &error)) {
|
||||||
|
+ g_warning ("SetBackgroundFile for backgroundfile %s failed: %s", background_file, error->message);
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
/**
|
||||||
|
* act_user_set_x_session:
|
||||||
|
* @user: the user object to alter.
|
||||||
|
diff --git a/src/libaccountsservice/act-user.h b/src/libaccountsservice/act-user.h
|
||||||
|
index fe9a8a4..82019f5 100644
|
||||||
|
--- a/src/libaccountsservice/act-user.h
|
||||||
|
+++ b/src/libaccountsservice/act-user.h
|
||||||
|
@@ -69,6 +69,7 @@ gboolean act_user_get_automatic_login (ActUser *user);
|
||||||
|
gboolean act_user_is_system_account (ActUser *user);
|
||||||
|
gboolean act_user_is_local_account (ActUser *user);
|
||||||
|
gboolean act_user_is_nonexistent (ActUser *user);
|
||||||
|
+const char *act_user_get_background_file (ActUser *user);
|
||||||
|
const char *act_user_get_icon_file (ActUser *user);
|
||||||
|
const char *act_user_get_language (ActUser *user);
|
||||||
|
const char * const *act_user_get_languages (ActUser *user);
|
||||||
|
@@ -100,6 +101,8 @@ void act_user_set_user_expiration_policy (ActUser *user,
|
||||||
|
|
||||||
|
void act_user_set_language (ActUser *user,
|
||||||
|
const char *language);
|
||||||
|
+void act_user_set_background_file (ActUser *user,
|
||||||
|
+ const char *background_file);
|
||||||
|
void act_user_set_languages (ActUser *user,
|
||||||
|
const char * const *languages);
|
||||||
|
|
||||||
|
diff --git a/src/user.c b/src/user.c
|
||||||
|
index 917d427..16a1cbd 100644
|
||||||
|
--- a/src/user.c
|
||||||
|
+++ b/src/user.c
|
||||||
|
@@ -521,6 +521,11 @@ user_update_from_keyfile (User *user,
|
||||||
|
GKeyFile *keyfile)
|
||||||
|
{
|
||||||
|
gchar *s, **sl;
|
||||||
|
+ s = g_key_file_get_string (keyfile, "User", "Background", NULL);
|
||||||
|
+ if (s != NULL) {
|
||||||
|
+ accounts_user_set_background_file (ACCOUNTS_USER (user), s);
|
||||||
|
+ g_clear_pointer (&s, g_free);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
s = g_key_file_get_string (keyfile, "User", "Language", NULL);
|
||||||
|
sl = g_key_file_get_string_list (keyfile, "User", "Languages", NULL, NULL);
|
||||||
|
@@ -676,6 +681,9 @@ user_save_to_keyfile (User *user,
|
||||||
|
if (accounts_user_get_password_hint (ACCOUNTS_USER (user)))
|
||||||
|
g_key_file_set_string (keyfile, "User", "PasswordHint", accounts_user_get_password_hint (ACCOUNTS_USER (user)));
|
||||||
|
|
||||||
|
+ if (accounts_user_get_background_file (ACCOUNTS_USER (user)))
|
||||||
|
+ g_key_file_set_string (keyfile, "User", "Background", accounts_user_get_background_file (ACCOUNTS_USER (user)));
|
||||||
|
+
|
||||||
|
if (accounts_user_get_icon_file (ACCOUNTS_USER (user)))
|
||||||
|
g_key_file_set_string (keyfile, "User", "Icon", accounts_user_get_icon_file (ACCOUNTS_USER (user)));
|
||||||
|
|
||||||
|
@@ -2026,6 +2034,76 @@ become_user (gpointer data)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void
|
||||||
|
+user_change_background_file_authorized_cb (Daemon *daemon,
|
||||||
|
+ User *user,
|
||||||
|
+ GDBusMethodInvocation *context,
|
||||||
|
+ gpointer data)
|
||||||
|
+{
|
||||||
|
+ g_autofree gchar *filename = NULL;
|
||||||
|
+ g_autoptr(GFile) file = NULL;
|
||||||
|
+ g_autoptr(GFileInfo) info = NULL;
|
||||||
|
+ GFileType type;
|
||||||
|
+
|
||||||
|
+ filename = g_strdup (data);
|
||||||
|
+
|
||||||
|
+ if (filename == NULL ||
|
||||||
|
+ *filename == '\0') {
|
||||||
|
+ g_free (filename);
|
||||||
|
+ filename = NULL;
|
||||||
|
+
|
||||||
|
+ goto background_saved;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ file = g_file_new_for_path (filename);
|
||||||
|
+ info = g_file_query_info (file, G_FILE_ATTRIBUTE_STANDARD_TYPE,
|
||||||
|
+ 0, NULL, NULL);
|
||||||
|
+ type = g_file_info_get_file_type (info);
|
||||||
|
+
|
||||||
|
+ if (type != G_FILE_TYPE_REGULAR) {
|
||||||
|
+ g_debug ("not a regular file\n");
|
||||||
|
+ throw_error (context, ERROR_FAILED, "file '%s' is not a regular file", filename);
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+background_saved:
|
||||||
|
+ accounts_user_set_background_file (ACCOUNTS_USER (user), filename);
|
||||||
|
+
|
||||||
|
+ save_extra_data (user);
|
||||||
|
+
|
||||||
|
+ accounts_user_complete_set_background_file (ACCOUNTS_USER (user), context);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static gboolean
|
||||||
|
+user_set_background_file (AccountsUser *auser,
|
||||||
|
+ GDBusMethodInvocation *context,
|
||||||
|
+ const gchar *filename)
|
||||||
|
+{
|
||||||
|
+ User *user = (User*)auser;
|
||||||
|
+ int uid;
|
||||||
|
+ const gchar *action_id;
|
||||||
|
+
|
||||||
|
+ if (!get_caller_uid (context, &uid)) {
|
||||||
|
+ throw_error (context, ERROR_FAILED, "identifying caller failed");
|
||||||
|
+ return FALSE;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (accounts_user_get_uid (ACCOUNTS_USER (user)) == (uid_t) uid)
|
||||||
|
+ action_id = "org.freedesktop.accounts.change-own-user-data";
|
||||||
|
+ else
|
||||||
|
+ action_id = "org.freedesktop.accounts.user-administration";
|
||||||
|
+
|
||||||
|
+ daemon_local_check_auth (user->daemon,
|
||||||
|
+ user,
|
||||||
|
+ action_id,
|
||||||
|
+ user_change_background_file_authorized_cb,
|
||||||
|
+ context,
|
||||||
|
+ g_strdup (filename),
|
||||||
|
+ (GDestroyNotify)g_free);
|
||||||
|
+
|
||||||
|
+ return TRUE;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void
|
||||||
|
user_change_icon_file_authorized_cb (Daemon *daemon,
|
||||||
|
User *user,
|
||||||
|
@@ -2722,6 +2800,7 @@ user_accounts_user_iface_init (AccountsUserIface *iface)
|
||||||
|
{
|
||||||
|
iface->handle_set_account_type = user_set_account_type;
|
||||||
|
iface->handle_set_automatic_login = user_set_automatic_login;
|
||||||
|
+ iface->handle_set_background_file = user_set_background_file;
|
||||||
|
iface->handle_set_email = user_set_email;
|
||||||
|
iface->handle_set_home_directory = user_set_home_directory;
|
||||||
|
iface->handle_set_icon_file = user_set_icon_file;
|
||||||
|
--
|
||||||
|
2.27.0
|
||||||
|
|
||||||
287
accountsservice-22.08.8-kylin-add-formats-locale-support.patch
Normal file
287
accountsservice-22.08.8-kylin-add-formats-locale-support.patch
Normal file
@ -0,0 +1,287 @@
|
|||||||
|
From fb8f804e09c4505773e0324302c565df02ba250d Mon Sep 17 00:00:00 2001
|
||||||
|
From: peijiankang <peijiankang@kylinos.cn>
|
||||||
|
Date: Mon, 18 Sep 2023 10:55:57 +0800
|
||||||
|
Subject: [PATCH] Addition of FormatsLocale property and SetFormatsLocale
|
||||||
|
|
||||||
|
---
|
||||||
|
data/org.freedesktop.Accounts.User.xml | 45 +++++++++++++++++++
|
||||||
|
src/libaccountsservice/act-user.c | 60 ++++++++++++++++++++++++++
|
||||||
|
src/libaccountsservice/act-user.h | 3 ++
|
||||||
|
src/user.c | 57 ++++++++++++++++++++++++
|
||||||
|
4 files changed, 165 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/data/org.freedesktop.Accounts.User.xml b/data/org.freedesktop.Accounts.User.xml
|
||||||
|
index 7a8a915..c750878 100644
|
||||||
|
--- a/data/org.freedesktop.Accounts.User.xml
|
||||||
|
+++ b/data/org.freedesktop.Accounts.User.xml
|
||||||
|
@@ -191,6 +191,41 @@
|
||||||
|
</doc:doc>
|
||||||
|
</method>
|
||||||
|
|
||||||
|
+ <method name="SetFormatsLocale">
|
||||||
|
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
|
||||||
|
+ <arg name="formats_locale" direction="in" type="s">
|
||||||
|
+ <doc:doc>
|
||||||
|
+ <doc:summary>
|
||||||
|
+ The new regional formats, as a locale specification like "de_DE.UTF-8".
|
||||||
|
+ </doc:summary>
|
||||||
|
+ </doc:doc>
|
||||||
|
+ </arg>
|
||||||
|
+ <doc:doc>
|
||||||
|
+ <doc:description>
|
||||||
|
+ <doc:para>
|
||||||
|
+ Sets the users regional formats.
|
||||||
|
+ </doc:para>
|
||||||
|
+ </doc:description>
|
||||||
|
+ <doc:permission>
|
||||||
|
+ The caller needs one of the following PolicyKit authorizations:
|
||||||
|
+ <doc:list>
|
||||||
|
+ <doc:item>
|
||||||
|
+ <doc:term>org.freedesktop.accounts.change-own-user-data</doc:term>
|
||||||
|
+ <doc:definition>To change regional formats</doc:definition>
|
||||||
|
+ </doc:item>
|
||||||
|
+ <doc:item>
|
||||||
|
+ <doc:term>org.freedesktop.accounts.user-administration</doc:term>
|
||||||
|
+ <doc:definition>To change egional formats of another user</doc:definition>
|
||||||
|
+ </doc:item>
|
||||||
|
+ </doc:list>
|
||||||
|
+ </doc:permission>
|
||||||
|
+ <doc:errors>
|
||||||
|
+ <doc:error name="org.freedesktop.Accounts.Error.PermissionDenied">if the caller lacks the appropriate PolicyKit authorization</doc:error>
|
||||||
|
+ <doc:error name="org.freedesktop.Accounts.Error.Failed">if the operation failed</doc:error>
|
||||||
|
+ </doc:errors>
|
||||||
|
+ </doc:doc>
|
||||||
|
+ </method>
|
||||||
|
+
|
||||||
|
<method name="SetXSession">
|
||||||
|
<annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
|
||||||
|
<annotation name="org.freedesktop.DBus.GLib.CSymbol" value="user_set_x_session"/>
|
||||||
|
@@ -871,6 +906,16 @@
|
||||||
|
</doc:doc>
|
||||||
|
</property>
|
||||||
|
|
||||||
|
+ <property name="FormatsLocale" type="s" access="read">
|
||||||
|
+ <doc:doc>
|
||||||
|
+ <doc:description>
|
||||||
|
+ <doc:para>
|
||||||
|
+ The users regional formats, as a locale specification like "de_DE.UTF-8".
|
||||||
|
+ </doc:para>
|
||||||
|
+ </doc:description>
|
||||||
|
+ </doc:doc>
|
||||||
|
+ </property>
|
||||||
|
+
|
||||||
|
<property name="XSession" type="s" access="read">
|
||||||
|
<doc:doc>
|
||||||
|
<doc:description>
|
||||||
|
diff --git a/src/libaccountsservice/act-user.c b/src/libaccountsservice/act-user.c
|
||||||
|
index 9125d43..daf634c 100644
|
||||||
|
--- a/src/libaccountsservice/act-user.c
|
||||||
|
+++ b/src/libaccountsservice/act-user.c
|
||||||
|
@@ -93,6 +93,7 @@ enum
|
||||||
|
PROP_BACKGROUND_FILE,
|
||||||
|
PROP_ICON_FILE,
|
||||||
|
PROP_LANGUAGE,
|
||||||
|
+ PROP_FORMATS_LOCALE,
|
||||||
|
PROP_X_SESSION,
|
||||||
|
PROP_IS_LOADED
|
||||||
|
};
|
||||||
|
@@ -273,6 +274,7 @@ act_user_class_init (ActUserClass *class)
|
||||||
|
"The real name to display for this user.",
|
||||||
|
NULL,
|
||||||
|
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
|
||||||
|
+
|
||||||
|
g_object_class_install_property (gobject_class,
|
||||||
|
PROP_BACKGROUND_FILE,
|
||||||
|
g_param_spec_string ("background-file",
|
||||||
|
@@ -406,6 +408,15 @@ act_user_class_init (ActUserClass *class)
|
||||||
|
"User's locale.",
|
||||||
|
NULL,
|
||||||
|
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
|
||||||
|
+
|
||||||
|
+ g_object_class_install_property (gobject_class,
|
||||||
|
+ PROP_FORMATS_LOCALE,
|
||||||
|
+ g_param_spec_string ("formats-locale",
|
||||||
|
+ "Regional Formats",
|
||||||
|
+ "User's regional formats.",
|
||||||
|
+ NULL,
|
||||||
|
+ G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
|
||||||
|
+
|
||||||
|
g_object_class_install_property (gobject_class,
|
||||||
|
PROP_X_SESSION,
|
||||||
|
g_param_spec_string ("x-session",
|
||||||
|
@@ -1086,6 +1097,25 @@ act_user_get_language (ActUser *user)
|
||||||
|
return accounts_user_get_language (user->accounts_proxy);
|
||||||
|
}
|
||||||
|
|
||||||
|
+/**
|
||||||
|
+ * act_user_get_formats_locale:
|
||||||
|
+ * @user: a #ActUser
|
||||||
|
+ *
|
||||||
|
+ * Returns the path to the configured formats locale of @user.
|
||||||
|
+ *
|
||||||
|
+ * Returns: (transfer none): a path to an icon
|
||||||
|
+ */
|
||||||
|
+const char *
|
||||||
|
+act_user_get_formats_locale (ActUser *user)
|
||||||
|
+{
|
||||||
|
+ g_return_val_if_fail (ACT_IS_USER (user), NULL);
|
||||||
|
+
|
||||||
|
+ if (user->accounts_proxy == NULL)
|
||||||
|
+ return NULL;
|
||||||
|
+
|
||||||
|
+ return accounts_user_get_formats_locale (user->accounts_proxy);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/**
|
||||||
|
* act_user_get_x_session:
|
||||||
|
* @user: a #ActUser
|
||||||
|
@@ -1440,6 +1470,36 @@ act_user_set_password_expiration_policy (ActUser *user,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+/**
|
||||||
|
+ * act_user_set_formats_locale:
|
||||||
|
+ * @user: the user object to alter.
|
||||||
|
+ * @formats_locale: a locale (e.g. en_US.utf8)
|
||||||
|
+ *
|
||||||
|
+ * Assigns a new formats locale for @user.
|
||||||
|
+ *
|
||||||
|
+ * Note this function is synchronous and ignores errors.
|
||||||
|
+ **/
|
||||||
|
+void
|
||||||
|
+act_user_set_formats_locale (ActUser *user,
|
||||||
|
+ const char *formats_locale)
|
||||||
|
+{
|
||||||
|
+ g_autoptr(GError) error = NULL;
|
||||||
|
+
|
||||||
|
+ g_return_if_fail (ACT_IS_USER (user));
|
||||||
|
+ g_return_if_fail (formats_locale != NULL);
|
||||||
|
+ g_return_if_fail (ACCOUNTS_IS_USER (user->accounts_proxy));
|
||||||
|
+
|
||||||
|
+ if (!accounts_user_call_set_formats_locale_sync (user->accounts_proxy,
|
||||||
|
+ formats_locale,
|
||||||
|
+ G_DBUS_CALL_FLAGS_ALLOW_INTERACTIVE_AUTHORIZATION,
|
||||||
|
+ -1,
|
||||||
|
+ NULL,
|
||||||
|
+ &error)) {
|
||||||
|
+ g_warning ("SetFormatsLocale for formats_locale %s call failed: %s", formats_locale, error->message);
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/**
|
||||||
|
* act_user_set_email:
|
||||||
|
* @user: the user object to alter.
|
||||||
|
diff --git a/src/libaccountsservice/act-user.h b/src/libaccountsservice/act-user.h
|
||||||
|
index 82019f5..4281553 100644
|
||||||
|
--- a/src/libaccountsservice/act-user.h
|
||||||
|
+++ b/src/libaccountsservice/act-user.h
|
||||||
|
@@ -72,6 +72,7 @@ gboolean act_user_is_nonexistent (ActUser *user);
|
||||||
|
const char *act_user_get_background_file (ActUser *user);
|
||||||
|
const char *act_user_get_icon_file (ActUser *user);
|
||||||
|
const char *act_user_get_language (ActUser *user);
|
||||||
|
+const char *act_user_get_formats_locale (ActUser *user);
|
||||||
|
const char * const *act_user_get_languages (ActUser *user);
|
||||||
|
const char *act_user_get_x_session (ActUser *user);
|
||||||
|
const char *act_user_get_session (ActUser *user);
|
||||||
|
@@ -101,6 +102,8 @@ void act_user_set_user_expiration_policy (ActUser *user,
|
||||||
|
|
||||||
|
void act_user_set_language (ActUser *user,
|
||||||
|
const char *language);
|
||||||
|
+void act_user_set_formats_locale (ActUser *user,
|
||||||
|
+ const char *formats_locale);
|
||||||
|
void act_user_set_background_file (ActUser *user,
|
||||||
|
const char *background_file);
|
||||||
|
void act_user_set_languages (ActUser *user,
|
||||||
|
diff --git a/src/user.c b/src/user.c
|
||||||
|
index 16a1cbd..9b5cf7d 100644
|
||||||
|
--- a/src/user.c
|
||||||
|
+++ b/src/user.c
|
||||||
|
@@ -545,6 +545,11 @@ user_update_from_keyfile (User *user,
|
||||||
|
accounts_user_set_language (ACCOUNTS_USER (user), s);
|
||||||
|
g_clear_pointer (&s, g_free);
|
||||||
|
}
|
||||||
|
+ s = g_key_file_get_string (keyfile, "User", "FormatsLocale", NULL);
|
||||||
|
+ if (s != NULL) {
|
||||||
|
+ accounts_user_set_formats_locale (ACCOUNTS_USER (user), s);
|
||||||
|
+ g_clear_pointer (&s, g_free);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
s = g_key_file_get_string (keyfile, "User", "XSession", NULL);
|
||||||
|
if (s != NULL) {
|
||||||
|
@@ -672,6 +677,9 @@ user_save_to_keyfile (User *user,
|
||||||
|
if (accounts_user_get_session_type (ACCOUNTS_USER (user)))
|
||||||
|
g_key_file_set_string (keyfile, "User", "SessionType", accounts_user_get_session_type (ACCOUNTS_USER (user)));
|
||||||
|
|
||||||
|
+ if (accounts_user_get_formats_locale (ACCOUNTS_USER (user)))
|
||||||
|
+ g_key_file_set_string (keyfile, "User", "FormatsLocale", accounts_user_get_formats_locale (ACCOUNTS_USER (user)));
|
||||||
|
+
|
||||||
|
if (accounts_user_get_xsession (ACCOUNTS_USER (user)))
|
||||||
|
g_key_file_set_string (keyfile, "User", "XSession", accounts_user_get_xsession (ACCOUNTS_USER (user)));
|
||||||
|
|
||||||
|
@@ -1583,6 +1591,54 @@ user_set_session_type (AccountsUser *auser,
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void
|
||||||
|
+user_change_formats_locale_authorized_cb (Daemon *daemon,
|
||||||
|
+ User *user,
|
||||||
|
+ GDBusMethodInvocation *context,
|
||||||
|
+ gpointer user_data)
|
||||||
|
+
|
||||||
|
+{
|
||||||
|
+ const gchar *formats_locale = user_data;
|
||||||
|
+
|
||||||
|
+ if (g_strcmp0 (accounts_user_get_formats_locale (ACCOUNTS_USER (user)), formats_locale) != 0) {
|
||||||
|
+ accounts_user_set_formats_locale (ACCOUNTS_USER (user), formats_locale);
|
||||||
|
+
|
||||||
|
+ save_extra_data (user);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ accounts_user_complete_set_formats_locale (ACCOUNTS_USER (user), context);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static gboolean
|
||||||
|
+user_set_formats_locale (AccountsUser *auser,
|
||||||
|
+ GDBusMethodInvocation *context,
|
||||||
|
+ const gchar *formats_locale)
|
||||||
|
+{
|
||||||
|
+ User *user = (User*)auser;
|
||||||
|
+ int uid;
|
||||||
|
+ const gchar *action_id;
|
||||||
|
+
|
||||||
|
+ if (!get_caller_uid (context, &uid)) {
|
||||||
|
+ throw_error (context, ERROR_FAILED, "identifying caller failed");
|
||||||
|
+ return FALSE;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (accounts_user_get_uid (ACCOUNTS_USER (user)) == (uid_t) uid)
|
||||||
|
+ action_id = "org.freedesktop.accounts.change-own-user-data";
|
||||||
|
+ else
|
||||||
|
+ action_id = "org.freedesktop.accounts.user-administration";
|
||||||
|
+
|
||||||
|
+ daemon_local_check_auth (user->daemon,
|
||||||
|
+ user,
|
||||||
|
+ action_id,
|
||||||
|
+ user_change_formats_locale_authorized_cb,
|
||||||
|
+ context,
|
||||||
|
+ g_strdup (formats_locale),
|
||||||
|
+ (GDestroyNotify) g_free);
|
||||||
|
+
|
||||||
|
+ return TRUE;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void
|
||||||
|
user_change_x_session_authorized_cb (Daemon *daemon,
|
||||||
|
User *user,
|
||||||
|
@@ -2802,6 +2858,7 @@ user_accounts_user_iface_init (AccountsUserIface *iface)
|
||||||
|
iface->handle_set_automatic_login = user_set_automatic_login;
|
||||||
|
iface->handle_set_background_file = user_set_background_file;
|
||||||
|
iface->handle_set_email = user_set_email;
|
||||||
|
+ iface->handle_set_formats_locale = user_set_formats_locale;
|
||||||
|
iface->handle_set_home_directory = user_set_home_directory;
|
||||||
|
iface->handle_set_icon_file = user_set_icon_file;
|
||||||
|
iface->handle_set_language = user_set_language;
|
||||||
|
--
|
||||||
|
2.27.0
|
||||||
|
|
||||||
BIN
accountsservice-23.13.9.tar.xz
Normal file
BIN
accountsservice-23.13.9.tar.xz
Normal file
Binary file not shown.
@ -1,14 +1,18 @@
|
|||||||
Name: accountsservice
|
Name: accountsservice
|
||||||
Version: 0.6.55
|
Version: 23.13.9
|
||||||
Release: 1
|
Release: 2
|
||||||
Summary: D-Bus service for accessing the list of user accounts and information attached to those accounts.
|
Summary: D-Bus service for accessing the list of user accounts and information attached to those accounts.
|
||||||
|
|
||||||
License: GPLv3+
|
License: GPLv3+
|
||||||
URL: https://www.freedesktop.org/wiki/Software/AccountsService/
|
URL: https://www.freedesktop.org/wiki/Software/AccountsService/
|
||||||
Source0: https://www.freedesktop.org/software/%{name}/%{name}-%{version}.tar.xz
|
Source0: https://www.freedesktop.org/software/%{name}/%{name}-%{version}.tar.xz
|
||||||
|
|
||||||
|
Patch1: accountsservice-22.08.8-kylin-add-background-file-support.patch
|
||||||
|
Patch2: accountsservice-22.08.8-kylin-add-formats-locale-support.patch
|
||||||
|
|
||||||
BuildRequires: gtk-doc polkit-devel libxslt pkgconfig(dbus-1) systemd systemd-devel
|
BuildRequires: gtk-doc polkit-devel libxslt pkgconfig(dbus-1) systemd systemd-devel
|
||||||
BuildRequires: meson gobject-introspection-devel gettext-devel glib2-devel
|
BuildRequires: meson gobject-introspection-devel gettext-devel glib2-devel vala
|
||||||
|
BuildRequires: python3-dbusmock
|
||||||
Requires: polkit shadow-utils
|
Requires: polkit shadow-utils
|
||||||
%systemd_requires
|
%systemd_requires
|
||||||
|
|
||||||
@ -37,10 +41,10 @@ are contained in %{name}-devel package.
|
|||||||
%package_help
|
%package_help
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
%autosetup -n %{name}-%{version}
|
%autosetup -n %{name}-%{version} -p 1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
%meson -Dgtk_doc=true -Duser_heuristics=true
|
%meson -Dgtk_doc=true
|
||||||
%meson_build
|
%meson_build
|
||||||
|
|
||||||
%install
|
%install
|
||||||
@ -68,9 +72,11 @@ are contained in %{name}-devel package.
|
|||||||
%{_datadir}/locale/
|
%{_datadir}/locale/
|
||||||
%{_datadir}/dbus-1/interfaces/*.xml
|
%{_datadir}/dbus-1/interfaces/*.xml
|
||||||
%{_datadir}/dbus-1/system-services/*.service
|
%{_datadir}/dbus-1/system-services/*.service
|
||||||
%{_libexecdir}/accounts-daemon
|
%{_datadir}/dbus-1/system.d/*.conf
|
||||||
%{_unitdir}/accounts-daemon.service
|
%{_unitdir}/accounts-daemon.service
|
||||||
%{_sysconfdir}/dbus-1/system.d/*.conf
|
%{_datadir}/accountsservice/user-templates/*
|
||||||
|
%{_datadir}/vala/vapi/*
|
||||||
|
%{_libexecdir}/accounts-daemon
|
||||||
|
|
||||||
%files libs
|
%files libs
|
||||||
%{_libdir}/*.so.*
|
%{_libdir}/*.so.*
|
||||||
@ -87,6 +93,21 @@ are contained in %{name}-devel package.
|
|||||||
%{_datadir}/gtk-doc/html/libaccountsservice/*
|
%{_datadir}/gtk-doc/html/libaccountsservice/*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Sep 02 2024 liweigang <liweiganga@uniontech.com> - 23.13.9-2
|
||||||
|
- add BuildRequires python3-dbusmock to fix local build failed
|
||||||
|
|
||||||
|
* Wed Nov 08 2023 wangqia <wangqia@uniontech.com> - 23.13.9-1
|
||||||
|
- Upgrade to version 23.13.9
|
||||||
|
|
||||||
|
* Mon Sep 18 2023 peijiankang <peijiankang@kylinos.cn> - 22.08.8-2
|
||||||
|
- add background-file and formats-locale support
|
||||||
|
|
||||||
|
* Tue Jun 21 2022 yangzhao <yangzhao1@kylinos.cn> - 22.08.8-1
|
||||||
|
- Upgrade to version 22.08.8
|
||||||
|
|
||||||
|
* Mon Jun 20 2022 wangkeorng <wangkerong@h-partners.com> - 0.6.55-2
|
||||||
|
- fix build fail on meson-0.6
|
||||||
|
|
||||||
* Thu Jan 28 2021 yanglu <yanglu60@huawei.com> - 0.6.55-1
|
* Thu Jan 28 2021 yanglu <yanglu60@huawei.com> - 0.6.55-1
|
||||||
- Version update
|
- Version update
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user