Group :: Graphical desktop/Other
RPM: lightdm
Main Changelog Spec Patches Sources Download Gear Bugs and FR Repocop
Patch: lightdm-1.32.0-update-user.patch
Download
Download
common/user-list.c | 12 ++++++++
tests/Makefile.am | 2 ++
tests/scripts/language-greeter.conf | 57 +++++++++++++++++++++++++++++++++++++
tests/src/test-gobject-greeter.c | 12 ++++++++
tests/test-language-greeter | 2 ++
5 files changed, 85 insertions(+)
diff --git a/common/user-list.c b/common/user-list.c
index fc04a127..5025a644 100644
--- a/common/user-list.c
+++ b/common/user-list.c
@@ -1351,6 +1351,14 @@ common_user_set_language (CommonUser *user, const gchar *language)
g_return_if_fail (COMMON_IS_USER (user));
if (g_strcmp0 (common_user_get_language (user), language) != 0)
{
+ // Update the selected language in the user object in order
+ // to get up to date value with common_user_get_language()
+ // above. Note, that re-reading of dmrc is buggy (see ALTBUG
+ // #30329, #40585).
+ CommonUserPrivate *priv = common_user_get_instance_private (user);
+ g_free (priv->language);
+ priv->language = g_strdup (language);
+
call_method (user, "SetLanguage", g_variant_new ("(s)", language), "()", NULL);
save_string_to_dmrc (user, "Desktop", "Language", language);
}
@@ -1424,6 +1432,10 @@ common_user_set_session (CommonUser *user, const gchar *session)
g_return_if_fail (COMMON_IS_USER (user));
if (g_strcmp0 (common_user_get_session (user), session) != 0)
{
+ CommonUserPrivate *priv = common_user_get_instance_private (user);
+ g_free (priv->session);
+ priv->session = g_strdup (session);
+
call_method (user, "SetXSession", g_variant_new ("(s)", session), "()", NULL);
save_string_to_dmrc (user, "Desktop", "Session", session);
}
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 1002c834..da6305f0 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -87,6 +87,7 @@ TESTS = \
test-users-gobject \
test-language \
test-language-no-accounts-service \
+ test-language-greeter \
test-login-crash-authenticate \
test-login-invalid-greeter \
test-login-gobject \
@@ -418,6 +419,7 @@ EXTRA_DIST = \
scripts/language.conf \
scripts/language-env.conf \
scripts/language-no-accounts-service.conf \
+ scripts/language-greeter.conf \
scripts/lock-seat.conf \
scripts/lock-seat-after-vt-switch.conf \
scripts/lock-seat-console-kit.conf \
diff --git a/tests/scripts/language-greeter.conf b/tests/scripts/language-greeter.conf
new file mode 100644
index 00000000..9617c022
--- /dev/null
+++ b/tests/scripts/language-greeter.conf
@@ -0,0 +1,57 @@
+#
+# Checks that custom language variables are set in the session
+#
+
+[Seat:*]
+user-session=default
+
+#?*START-DAEMON
+#?RUNNER DAEMON-START
+
+# X server starts
+#?XSERVER-0 START VT=7 SEAT=seat0
+
+# Daemon connects when X server is ready
+#?*XSERVER-0 INDICATE-READY
+#?XSERVER-0 INDICATE-READY
+#?XSERVER-0 ACCEPT-CONNECT
+
+# Greeter starts
+#?GREETER-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_SESSION_CLASS=greeter
+#?LOGIN1 ACTIVATE-SESSION SESSION=c0
+#?XSERVER-0 ACCEPT-CONNECT
+#?GREETER-X-0 CONNECT-XSERVER
+#?GREETER-X-0 CONNECT-TO-DAEMON
+#?GREETER-X-0 CONNECTED-TO-DAEMON
+
+# Start new authentication
+#?*GREETER-X-0 AUTHENTICATE USERNAME=have-language
+#?GREETER-X-0 AUTHENTICATION-COMPLETE USERNAME=have-language AUTHENTICATED=TRUE
+
+# Select language
+#?*GREETER-X-0 SET-LANGUAGE VALUE=ru_RU.UTF-8
+#?GREETER-X-0 SET-LANGUAGE OK
+
+# User session starts
+#?*GREETER-X-0 START-SESSION
+
+# Greeter session stops
+#?GREETER-X-0 TERMINATE SIGNAL=15
+
+# Session starts
+#?SESSION-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_GREETER_DATA_DIR=.*/have-language XDG_SESSION_TYPE=x11 XDG_SESSION_DESKTOP=default USER=have-language
+#?LOGIN1 ACTIVATE-SESSION SESSION=c1
+#?XSERVER-0 ACCEPT-CONNECT
+#?SESSION-X-0 CONNECT-XSERVER
+
+# Check environment variables
+#?*SESSION-X-0 READ-ENV NAME=LANG
+#?SESSION-X-0 READ-ENV NAME=LANG VALUE=ru_RU.UTF-8
+#?*SESSION-X-0 READ-ENV NAME=GDM_LANG
+#?SESSION-X-0 READ-ENV NAME=GDM_LANG VALUE=ru_RU.UTF-8
+
+# Cleanup
+#?*STOP-DAEMON
+#?SESSION-X-0 TERMINATE SIGNAL=15
+#?XSERVER-0 TERMINATE SIGNAL=15
+#?RUNNER DAEMON-EXIT STATUS=0
diff --git a/tests/src/test-gobject-greeter.c b/tests/src/test-gobject-greeter.c
index 54fff9a9..1517e41a 100644
--- a/tests/src/test-gobject-greeter.c
+++ b/tests/src/test-gobject-greeter.c
@@ -377,6 +377,18 @@ request_cb (const gchar *name, GHashTable *params)
if (!lightdm_shutdown (&error))
status_notify ("%s FAIL-SHUTDOWN", greeter_id);
}
+
+ else if (strcmp (name, "SET-LANGUAGE") == 0)
+ {
+ if (g_hash_table_lookup (params, "VALUE"))
+ {
+ g_autoptr(GError) error = NULL;
+ if (lightdm_greeter_set_language (greeter, g_hash_table_lookup (params, "VALUE"), &error))
+ status_notify ("%s SET-LANGUAGE OK", greeter_id);
+ else
+ status_notify ("%s SET-LANGUAGE ERROR=%s", greeter_id, error->message);
+ }
+ }
}
static void
diff --git a/tests/test-language-greeter b/tests/test-language-greeter
new file mode 100755
index 00000000..9416309f
--- /dev/null
+++ b/tests/test-language-greeter
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner language-greeter test-gobject-greeter