src/lightdm-gtk-greeter.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/lightdm-gtk-greeter.c b/src/lightdm-gtk-greeter.c index 27d009f..c50c364 100644 --- a/src/lightdm-gtk-greeter.c +++ b/src/lightdm-gtk-greeter.c @@ -193,6 +193,9 @@ static gchar* get_language (void); static void set_language (const gchar *language); void language_selected_cb (GtkMenuItem *menuitem, gpointer user_data); +/* Restart greeter flag */ +static gboolean restart_greeter = FALSE; + /* Screensaver values */ static int timeout, interval, prefer_blanking, allow_exposures; @@ -1171,6 +1174,15 @@ language_selected_cb (GtkMenuItem *menuitem, gpointer user_data) { gchar *language = g_object_get_data (G_OBJECT (menuitem), LANGUAGE_DATA_CODE); set_language (language); + if (setlocale (LC_ALL, current_language)) + { + setenv ("LANGUAGE", current_language, 1); + setenv ("LANG", current_language, 1); + setenv ("LC_ALL", current_language, 1); + setenv ("LC_MESSAGES", current_language, 1); + restart_greeter = TRUE; + gtk_main_quit (); + } } } @@ -3324,6 +3336,7 @@ main (int argc, char **argv) gtk_widget_show (GTK_WIDGET (screen_overlay)); g_debug ("Run Gtk loop..."); + restart_greeter = FALSE; gtk_main (); g_debug ("Gtk loop exits"); @@ -3341,5 +3354,18 @@ main (int argc, char **argv) } } + if (restart_greeter) + { + int i; + char **args = calloc (argc + 1, sizeof (char *)); + if (args) + { + for (i = 0; i < argc; i++) + args[i] = argv[i]; + args[i] = NULL; + execv (args[0], args); + } + } + return EXIT_SUCCESS; }