Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 348170 Details for
Bug 468678
x11-misc/lightdm fails to set users' language and region setting for gnome desktop session
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
fix language settings
lightdm-1.6.0-fix-language-setting.patch (text/plain), 4.68 KB, created by
Mirko Guenther
on 2013-05-13 15:28:04 UTC
(
hide
)
Description:
fix language settings
Filename:
MIME Type:
Creator:
Mirko Guenther
Created:
2013-05-13 15:28:04 UTC
Size:
4.68 KB
patch
obsolete
># HG changeset patch ># Parent 11266c3c952ab631f1f8fa90f94497d3cebf30d8 >Fix saving/retrieving of the language setting > >Add user_get_language() for retrieving the language setting. >Remove unused user_get_locale(). >Always save the language to both accountsservice and dmrc. >Actually retrieve the language setting and export the locale via LANG and >GDM_LANG environment variables. > >diff --git a/src/accounts.c b/src/accounts.c >--- a/src/accounts.c >+++ b/src/accounts.c >@@ -44,9 +44,6 @@ struct UserPrivate > /* Language */ > gchar *language; > >- /* Locale */ >- gchar *locale; >- > /* X session */ > gchar *xsession; > }; >@@ -332,36 +329,59 @@ user_get_shell (User *user) > return user->priv->shell; > } > >-const gchar * >-user_get_locale (User *user) >-{ >- g_return_val_if_fail (user != NULL, NULL); >- >- g_free (user->priv->locale); >- if (user->priv->proxy) >- user->priv->locale = NULL; >- else >- user->priv->locale = get_string_from_dmrc (user->priv->name, "Desktop", "Language"); >- >- /* Treat a blank locale as unset */ >- if (g_strcmp0 (user->priv->locale, "") == 0) >- { >- g_free (user->priv->locale); >- user->priv->locale = NULL; >- } >- >- return user->priv->locale; >-} >- > void > user_set_language (User *user, const gchar *language) > { > g_return_if_fail (user != NULL); > >+ call_method (user->priv->proxy, "SetLanguage", g_variant_new ("(s)", language), "()", NULL); >+ save_string_to_dmrc (user->priv->name, "Desktop", "Language", language); >+} >+ >+const gchar * >+user_get_language (User *user) >+{ >+ GVariant *variant, *inner; >+ gboolean success; >+ >+ g_return_val_if_fail (user != NULL, NULL); >+ >+ g_free (user->priv->language); > if (user->priv->proxy) >- call_method (user->priv->proxy, "SetLanguage", g_variant_new ("(s)", language), "()", NULL); >+ { >+ /* get_property () uses g_dbus_proxy_get_cached_property () which would >+ * return the previous (cached) value of the "Language" property */ >+#if 0 >+ if (get_property (user->priv->proxy, "Language", "s", &variant)) >+ { >+ g_variant_get (variant, "s", &user->priv->language); >+ g_variant_unref (variant); >+ } >+ else >+ user->priv->language = NULL; >+#endif >+ success = call_method (user->priv->proxy, "org.freedesktop.DBus.Properties.Get", g_variant_new ("(ss)", g_dbus_proxy_get_interface_name(user->priv->proxy), "Language"), "(v)", &variant); >+ if (success) >+ { >+ g_variant_get (variant, "(v)", &inner); >+ user->priv->language = g_variant_dup_string (inner, NULL); >+ g_variant_unref (inner); >+ g_variant_unref (variant); >+ } >+ else >+ user->priv->language = NULL; >+ } > else >- save_string_to_dmrc (user->priv->name, "Desktop", "Language", language); >+ user->priv->language = get_string_from_dmrc (user->priv->name, "Desktop", "Language"); >+ >+ /* Treat a blank language as unset */ >+ if (g_strcmp0 (user->priv->language, "") == 0) >+ { >+ g_free (user->priv->language); >+ user->priv->language = NULL; >+ } >+ >+ return user->priv->language; > } > > void >@@ -436,6 +456,7 @@ user_finalize (GObject *object) > g_free (self->priv->gecos); > g_free (self->priv->home_directory); > g_free (self->priv->shell); >+ g_free (self->priv->language); > > G_OBJECT_CLASS (user_parent_class)->finalize (object); > } >diff --git a/src/accounts.h b/src/accounts.h >--- a/src/accounts.h >+++ b/src/accounts.h >@@ -58,7 +58,7 @@ const gchar *user_get_xsession (User *us > > void user_set_xsession (User *user, const gchar *session); > >-const gchar *user_get_locale (User *user); >+const gchar *user_get_language (User *user); > > void user_set_language (User *user, const gchar *language); > >diff --git a/src/display.c b/src/display.c >--- a/src/display.c >+++ b/src/display.c >@@ -705,6 +705,7 @@ display_start_session (Display *display) > { > User *user; > gchar *filename, *sessions_dir, *path; >+ const gchar *language; > gchar **argv; > > user = session_get_user (display->priv->session); >@@ -728,6 +729,14 @@ display_start_session (Display *display) > if (!argv) > return TRUE; > >+ /* Retrieve language setting */ >+ language = user_get_language (user); >+ if (language != NULL && language != '\0') >+ { >+ session_set_env (display->priv->session, "LANG", language); >+ session_set_env (display->priv->session, "GDM_LANG", language); >+ } >+ > session_set_env (display->priv->session, "DESKTOP_SESSION", display->priv->user_session); // FIXME: Apparently deprecated? > session_set_env (display->priv->session, "GDMSESSION", display->priv->user_session); // FIXME: Not cross-desktop >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 468678
: 348170 |
348174