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