diff -Nur gdm-2.19.1/gui/gdmlanguages.c gdm-2.19.1.new/gui/gdmlanguages.c
--- gdm-2.19.1/gui/gdmlanguages.c	2007-05-16 13:03:52.000000000 +0200
+++ gdm-2.19.1.new/gui/gdmlanguages.c	2007-05-16 13:03:53.000000000 +0200
@@ -686,6 +686,13 @@
 		      LOCALE_COLUMN, DEFAULT_LANGUAGE,
 		      -1);
 
+  gtk_list_store_append (lang_model, &iter);
+  gtk_list_store_set (lang_model, &iter,
+		      TRANSLATED_NAME_COLUMN, "separator",
+		      UNTRANSLATED_NAME_COLUMN, NULL,
+		      LOCALE_COLUMN, "separator",
+		      -1);
+
   for (li = list; li != NULL; li = li->next)
     {
       char *lang = li->data;
@@ -788,44 +795,44 @@
 }
 
 static void
-selection_changed (GtkTreeSelection *selection,
+selection_changed (GtkComboBox *selection,
 		   gpointer          data)
 {
   GtkTreeIter iter;
 
-  if (gtk_tree_selection_get_selected (selection, NULL, &iter))
+  if (gtk_combo_box_get_active_iter (selection, &iter))
     {
       g_free (dialog_selected_language);
       gtk_tree_model_get (GTK_TREE_MODEL (lang_model), &iter, LOCALE_COLUMN, &dialog_selected_language, -1);
     }
 }
 
-static void
-tree_row_activated (GtkTreeView         *view,
-                    GtkTreePath         *path,
-                    GtkTreeViewColumn   *column,
-                    gpointer            data)
-{
-  GtkTreeIter iter;
-  if (gtk_tree_model_get_iter (GTK_TREE_MODEL (lang_model), &iter, path))
-    {
-      g_free (dialog_selected_language);
-      gtk_tree_model_get (GTK_TREE_MODEL (lang_model), &iter,
-			  LOCALE_COLUMN, &dialog_selected_language,
-			  -1);
-      gtk_dialog_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
-  }
+static gboolean
+is_separator (GtkTreeModel *model,
+	      GtkTreeIter  *iter,
+	      gpointer      data)
+{
+   GtkTreePath *path;
+   gboolean result;
+
+   path = gtk_tree_model_get_path (model, iter);
+   result = gtk_tree_path_get_indices (path)[0] == 2;
+   gtk_tree_path_free (path);
+   
+   return result;
 }
 
 static void
 gdm_lang_setup_treeview (void)
 {
+  GtkWidget *combo = NULL;
+  GtkCellRenderer *renderer;
+
   if (dialog == NULL)
     {
       GtkWidget *main_vbox;
       GtkWidget *button;
       GtkWidget **tmp_p;
-      GtkWidget *swindow;
       GtkWidget *label;
       char *s;
 
@@ -866,47 +873,27 @@
       gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
       gtk_box_pack_start (GTK_BOX (main_vbox),
 			  label, FALSE, FALSE, 0);
-      tv = gtk_tree_view_new ();
-      gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tv), TRUE);
-      gtk_label_set_mnemonic_widget (GTK_LABEL (label), tv);
-      /* FIXME: we should handle this better, but things really look
-       * bad if we aren't always LTR */
-      gtk_widget_set_direction (tv, GTK_TEXT_DIR_LTR);
-      gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (tv), FALSE);
-      gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tv),
-					       GTK_DIALOG_MODAL,
-					       NULL,
-					       gtk_cell_renderer_text_new (),
-					       "text", TRANSLATED_NAME_COLUMN,
-					       NULL);
-      gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tv),
-					       GTK_DIALOG_MODAL,
-					       NULL,
-					       gtk_cell_renderer_text_new (),
-					       "markup",
-					       UNTRANSLATED_NAME_COLUMN,
-					       NULL);
-      swindow = gtk_scrolled_window_new (NULL, NULL);
-      gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (swindow), GTK_SHADOW_IN);
-      gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (swindow),
-				  GTK_POLICY_AUTOMATIC,
-				  GTK_POLICY_AUTOMATIC);
-      gtk_container_add (GTK_CONTAINER (swindow), tv);
-      gtk_box_pack_start (GTK_BOX (main_vbox),
-			  swindow, TRUE, TRUE, 0);
-      gtk_window_set_default_size (GTK_WINDOW (dialog),
-				   MIN (400, gdm_wm_screen.width),
-				   MIN (600, gdm_wm_screen.height));
-      g_signal_connect (G_OBJECT (gtk_tree_view_get_selection (GTK_TREE_VIEW (tv))),
+
+      combo = gtk_combo_box_new_with_model (GTK_TREE_MODEL(lang_model));
+      
+      renderer = gtk_cell_renderer_text_new ();
+      gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), renderer, TRUE);
+      gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo), renderer,
+				      "text", TRANSLATED_NAME_COLUMN,
+				      NULL);
+      gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0);
+      gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combo), 
+					    is_separator, NULL, NULL);
+      
+      gtk_label_set_mnemonic_widget (GTK_LABEL (label), combo);
+      gtk_widget_set_direction (combo, GTK_TEXT_DIR_LTR);
+      gtk_combo_box_set_column_span_column (GTK_COMBO_BOX(combo), (gint)2);
+      gtk_box_pack_start (GTK_BOX(main_vbox), combo,
+			  FALSE, FALSE, 0);
+      g_signal_connect (GTK_COMBO_BOX (combo),
 			"changed",
 			(GCallback) selection_changed,
 			NULL);
-      g_signal_connect (G_OBJECT (tv),
-                        "row_activated",
-                        (GCallback) tree_row_activated,
-                        NULL);
-      gtk_tree_view_set_model (GTK_TREE_VIEW (tv),
-			       GTK_TREE_MODEL (lang_model));
     }
 }
 
