--- gdm-2.27.4/gui/simple-greeter/gdm-greeter-panel.c.orig	2009-08-24 15:52:40.895706946 +0900
+++ gdm-2.27.4/gui/simple-greeter/gdm-greeter-panel.c	2009-08-24 16:29:28.478181698 +0900
@@ -75,6 +75,7 @@ enum {
 
 enum {
         LANGUAGE_SELECTED,
+        LANGUAGE_HIDE_DIALOG_SELECTED,
         LAYOUT_SELECTED,
         SESSION_SELECTED,
         NUMBER_OF_SIGNALS
@@ -434,6 +435,17 @@ gdm_greeter_panel_class_init (GdmGreeter
                               G_TYPE_NONE,
                               1, G_TYPE_STRING);
 
+        signals[LANGUAGE_HIDE_DIALOG_SELECTED] =
+                g_signal_new ("language-hide-dialog-selected",
+                              G_TYPE_FROM_CLASS (object_class),
+                              G_SIGNAL_RUN_LAST,
+                              G_STRUCT_OFFSET (GdmGreeterPanelClass, language_hide_dialog_selected),
+                              NULL,
+                              NULL,
+                              g_cclosure_marshal_VOID__VOID,
+                              G_TYPE_NONE,
+                              0);
+
         signals[LAYOUT_SELECTED] =
                 g_signal_new ("layout-selected",
                               G_TYPE_FROM_CLASS (object_class),
@@ -488,6 +500,14 @@ on_language_activated (GdmLanguageOption
 }
 
 static void
+on_language_hide_dialog (GdmLanguageOptionWidget *widget,
+                       GdmGreeterPanel         *panel)
+{
+
+        g_signal_emit (panel, signals[LANGUAGE_HIDE_DIALOG_SELECTED], 0);
+}
+
+static void
 on_layout_activated (GdmLayoutOptionWidget *widget,
                      GdmGreeterPanel       *panel)
 {
@@ -580,6 +600,9 @@ gdm_greeter_panel_init (GdmGreeterPanel 
         g_signal_connect (G_OBJECT (panel->priv->language_option_widget),
                           "language-activated",
                           G_CALLBACK (on_language_activated), panel);
+        g_signal_connect (G_OBJECT (panel->priv->language_option_widget),
+                          "language-hide-dialog",
+                          G_CALLBACK (on_language_hide_dialog), panel);
         gtk_box_pack_start (GTK_BOX (panel->priv->option_hbox), panel->priv->language_option_widget, FALSE, FALSE, 6);
         gdm_profile_end ("creating option widget");
 
--- gdm-2.27.4/gui/simple-greeter/gdm-greeter-panel.h.orig	2009-08-24 16:17:30.848639082 +0900
+++ gdm-2.27.4/gui/simple-greeter/gdm-greeter-panel.h	2009-08-24 16:18:37.434448675 +0900
@@ -48,6 +48,8 @@ typedef struct
         void (* language_selected)           (GdmGreeterPanel *panel,
                                               const char      *text);
 
+        void (* language_hide_dialog_selected) (GdmGreeterPanel *panel);
+
         void (* layout_selected)             (GdmGreeterPanel *panel,
                                               const char      *text);
 
--- gdm/gui/simple-greeter/gdm-greeter-session.c.orig	2009-06-26 12:51:54.000000000 +0900
+++ gdm/gui/simple-greeter/gdm-greeter-session.c	2009-08-25 15:21:09.000000000 +0900
@@ -228,6 +228,12 @@ on_select_language (GdmGreeterSession   
 }
 
 static void
+on_select_language_hide_dialog (GdmGreeterSession     *session)
+{
+        gtk_window_present (GTK_WINDOW (session->priv->login_window));
+}
+
+static void
 on_select_layout (GdmGreeterSession      *session,
                   const char             *text)
 {
@@ -327,6 +333,11 @@ toggle_panel (GdmGreeterSession *session
                                           session);
 
                 g_signal_connect_swapped (session->priv->panel,
+                                          "language-hide-dialog-selected",
+                                          G_CALLBACK (on_select_language_hide_dialog),
+                                          session);
+
+                g_signal_connect_swapped (session->priv->panel,
                                           "layout-selected",
                                           G_CALLBACK (on_select_layout),
                                           session);
--- gdm-2.27.4/gui/simple-greeter/gdm-language-option-widget.c.orig	2009-08-21 18:39:58.921678544 +0900
+++ gdm-2.27.4/gui/simple-greeter/gdm-language-option-widget.c	2009-08-24 17:03:49.332113821 +0900
@@ -50,6 +50,7 @@ struct GdmLanguageOptionWidgetPrivate
 
 enum {
         LANGUAGE_ACTIVATED,
+        LANGUAGE_HIDE_DIALOG,
         NUMBER_OF_SIGNALS
 };
 
@@ -94,6 +95,7 @@ gdm_language_option_widget_hide_dialog (
 {
         gtk_widget_destroy (widget->priv->dialog);
         widget->priv->dialog = NULL;
+        g_signal_emit (G_OBJECT (widget), signals[LANGUAGE_HIDE_DIALOG], 0);
 }
 
 static void
@@ -170,6 +172,16 @@ gdm_language_option_widget_class_init (G
                                                      G_TYPE_NONE,
                                                      0);
 
+        signals[LANGUAGE_HIDE_DIALOG] = g_signal_new ("language-hide-dialog",
+                                                       G_TYPE_FROM_CLASS (object_class),
+                                                       G_SIGNAL_RUN_FIRST,
+                                                       G_STRUCT_OFFSET (GdmLanguageOptionWidgetClass, language_hide_dialog),
+                                                       NULL,
+                                                       NULL,
+                                                       g_cclosure_marshal_VOID__VOID,
+                                                       G_TYPE_NONE,
+                                                       0);
+
         g_type_class_add_private (klass, sizeof (GdmLanguageOptionWidgetPrivate));
 }
 
--- gdm-2.27.4/gui/simple-greeter/gdm-language-option-widget.h.orig	2009-08-24 16:17:07.436864325 +0900
+++ gdm-2.27.4/gui/simple-greeter/gdm-language-option-widget.h	2009-08-24 16:18:05.235552092 +0900
@@ -48,6 +48,7 @@ typedef struct
         GdmRecentOptionWidgetClass    parent_class;
 
         void (* language_activated)        (GdmLanguageOptionWidget *widget);
+        void (* language_hide_dialog)      (GdmLanguageOptionWidget *widget);
 } GdmLanguageOptionWidgetClass;
 
 GType                  gdm_language_option_widget_get_type               (void);
