/* Language */
gchar *language;
- /* Locale */
- gchar *locale;
-
/* X session */
gchar *xsession;
};
return user->priv->shell;
}
+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_locale (User *user)
+user_get_language (User *user)
{
+ GVariant *variant, *inner;
+ gboolean success;
+
g_return_val_if_fail (user != NULL, NULL);
- g_free (user->priv->locale);
+ g_free (user->priv->language);
if (user->priv->proxy)
- user->priv->locale = NULL;
+ {
+ /* the "Language" property cannot be retrieved with get_property () here since it
+ * uses g_dbus_proxy_get_cached_property () which would return the previous (cached) value
+ * of the "Language" property
+ */
+ 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
- user->priv->locale = get_string_from_dmrc (user->priv->name, "Desktop", "Language");
+ user->priv->language = get_string_from_dmrc (user->priv->name, "Desktop", "Language");
- /* Treat a blank locale as unset */
- if (g_strcmp0 (user->priv->locale, "") == 0)
+ /* Treat a blank language as unset */
+ if (g_strcmp0 (user->priv->language, "") == 0)
{
- g_free (user->priv->locale);
- user->priv->locale = NULL;
+ g_free (user->priv->language);
+ user->priv->language = NULL;
}
- return user->priv->locale;
-}
-
-void
-user_set_language (User *user, const gchar *language)
-{
- g_return_if_fail (user != NULL);
-
- if (user->priv->proxy)
- call_method (user->priv->proxy, "SetLanguage", g_variant_new ("(s)", language), "()", NULL);
- else
- save_string_to_dmrc (user->priv->name, "Desktop", "Language", language);
+ return user->priv->language;
}
void
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);
}
{
User *user;
gchar *filename, *sessions_dir, *path;
+ const gchar *language;
gchar **argv;
user = session_get_user (display->priv->session);
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