Sisyphus repository
Last update: 1 october 2023 | SRPMs: 18631 | Visits: 37847876
en ru br
ALT Linux repos
S:1.32.0-alt4

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


 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
 
design & coding: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
current maintainer: Michael Shigorin