Index: oem-config-1.54.13netbook4/gui/glade/step_language.glade
===================================================================
--- oem-config-1.54.13netbook4.orig/gui/glade/step_language.glade	2009-07-29 11:48:24.000000000 -0400
+++ oem-config-1.54.13netbook4/gui/glade/step_language.glade	2009-07-29 11:53:24.000000000 -0400
@@ -1,7 +1,7 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
-<!--Generated with glade3 3.4.5 on Tue Nov 18 12:54:18 2008 -->
+<?xml version="1.0"?>
 <glade-interface>
+  <!-- interface-requires gtk+ 2.16 -->
+  <!-- interface-naming-policy toplevel-contextual -->
   <widget class="GtkWindow" id="dummy_window">
     <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
     <child>
@@ -21,6 +21,7 @@
           <packing>
             <property name="expand">False</property>
             <property name="fill">False</property>
+            <property name="position">0</property>
           </packing>
         </child>
         <child>
@@ -36,16 +37,14 @@
         </child>
         <child>
           <widget class="GtkScrolledWindow" id="language_scrolledwindow">
-            <property name="visible">True</property>
             <property name="can_focus">True</property>
-            <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-            <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-            <property name="shadow_type">GTK_SHADOW_IN</property>
+            <property name="hscrollbar_policy">automatic</property>
+            <property name="vscrollbar_policy">automatic</property>
+            <property name="shadow_type">in</property>
             <child>
               <widget class="GtkIconView" id="language_iconview">
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
-                <property name="text_column">0</property>
                 <property name="columns">5</property>
                 <property name="row_spacing">0</property>
                 <property name="column_spacing">0</property>
@@ -54,9 +53,25 @@
             </child>
           </widget>
           <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
             <property name="position">2</property>
           </packing>
         </child>
+        <child>
+          <widget class="GtkScrolledWindow" id="scrolledwindow_tree">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="hscrollbar_policy">automatic</property>
+            <property name="vscrollbar_policy">automatic</property>
+            <child>
+              <placeholder/>
+            </child>
+          </widget>
+          <packing>
+            <property name="position">3</property>
+          </packing>
+        </child>
       </widget>
     </child>
   </widget>
Index: oem-config-1.54.13netbook4/lib/frontend/gtk_ui.py
===================================================================
--- oem-config-1.54.13netbook4.orig/lib/frontend/gtk_ui.py	2009-07-29 11:48:24.000000000 -0400
+++ oem-config-1.54.13netbook4/lib/frontend/gtk_ui.py	2009-07-29 11:55:53.000000000 -0400
@@ -42,6 +42,7 @@
 
 class Frontend(BaseFrontend):
     def __init__(self):
+
         def add_subpage(self, steps, name):
             """Inserts a subpage into the notebook.  This assumes the file
             shares the same base name as the page you are looking for."""
@@ -66,6 +67,9 @@
                 if isinstance(widget, gtk.Label):
                     widget.set_property('can-focus', False)
 
+
+
+
         BaseFrontend.__init__(self)
 
         self.previous_excepthook = sys.excepthook
@@ -81,6 +85,10 @@
         self.watch = gtk.gdk.Cursor(gtk.gdk.WATCH)
         self.apply_changes = False
 
+
+        msg = str(self.all_widgets)
+
+
         # Set default language.
         dbfilter = language.Language(self, self.debconf_communicator())
         dbfilter.cleanup()
@@ -93,6 +101,7 @@
         self.glade = gtk.glade.XML(gladefile)
         add_widgets(self, self.glade)
 
+
         steps = self.glade.get_widget("steps")
         for page in self.pages:
             add_subpage(self, steps, page)
@@ -138,6 +147,15 @@
 
         if 'OEM_CONFIG_DEBUG' in os.environ:
             self.password_debug_warning_label.show()
+        
+#        self.scrolledwindow.hide()
+
+        self.language_treeview = gtk.TreeView()
+
+        self.scrolledwindow_tree.add(self.language_treeview)
+        self.language_treeview.connect("row-activated", self.on_language_treeview_row_activated)
+
+        self.language_treeview.show()
 
     def setup_timezone_page(self):
         renderer = gtk.CellRendererText()
@@ -208,6 +226,7 @@
             current_name = self.step_name(self.current_page)
             if current_name == 'step_language':
                 self.dbfilter = language.Language(self)
+              
             elif current_name == 'step_timezone':
                 self.dbfilter = timezone.Timezone(self)
             elif current_name == 'step_keyboard':
@@ -468,13 +487,14 @@
             self.oem_config.child_focus(gtk.DIR_TAB_FORWARD)
 
     def on_next_clicked(self, widget):
+ 
         if not self.allowed_change_step or not self.allowed_go_forward:
             return
 
         self.allow_change_step(False)
 
         step = self.step_name(self.steps.get_current_page())
-
+ 
         if step == "step_user":
             self.username_error_box.hide()
             self.password_error_box.hide()
@@ -483,10 +503,11 @@
             self.dbfilter.ok_handler()
             # expect recursive main loops to be exited and
             # debconffilter_done() to be called when the filter exits
-
+ 
         if not self.oem_config.get_focus():
             self.oem_config.child_focus(gtk.DIR_TAB_FORWARD)
 
+
     # Callbacks provided to components.
 
     def zone_combo_selection_changed(self, widget):
@@ -531,7 +552,19 @@
                 break
             iterator = m.iter_next(iterator)
 
-    def selected_language (self):
+
+
+    def selected_language_treeview(self, selection):
+        (model, iterator) = selection.get_selected()
+        if iterator is not None:
+            value = unicode(model.get_value(iterator, 0))
+            msg = str(self.language_choice_map[value][1])
+            return self.language_choice_map[value][1]
+        else:
+            return ''
+
+    def selected_language(self):
+
         model = self.language_iconview.get_model()
         items = self.language_iconview.get_selected_items()
         if not items:
@@ -539,10 +572,14 @@
         iterator = model.get_iter(items[0])
         if iterator is not None:
             value = unicode(model.get_value(iterator, 0))
+            msg = str(self.language_choice_map[value][1])
             return self.language_choice_map[value][1]
 
+
     def set_language_choices(self, choices, choice_map):
         BaseFrontend.set_language_choices(self, choices, choice_map)
+
+# iconview part
         self.language_iconview.connect('selection-changed',
                           self.on_language_iconview_selection_changed)
         list_store = gtk.ListStore(gobject.TYPE_STRING)
@@ -551,6 +588,20 @@
         for choice in choices:
             list_store.append([choice])
 
+# combo part
+        if len(self.language_treeview.get_columns()) < 1:
+            column = gtk.TreeViewColumn(None, gtk.CellRendererText(), text=0)
+            column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
+            self.language_treeview.append_column(column)
+            selection = self.language_treeview.get_selection()
+            selection.connect('changed', 
+                              self.on_language_treeview_selection_changed)
+        list_store_2 = gtk.ListStore(gobject.TYPE_STRING)
+        self.language_treeview.set_model(list_store_2)
+        for choice in choices:
+            list_store_2.append([choice])
+
+
     def set_language(self, language):
         model = self.language_iconview.get_model()
         iterator = model.iter_children(None)
@@ -562,17 +613,33 @@
                 break
             iterator = model.iter_next(iterator)
 
+        model = self.language_treeview.get_model()
+        iterator = model.iter_children(None)
+        while iterator is not None:
+            if unicode(model.get_value(iterator, 0)) == language:
+                path = model.get_path(iterator)
+                self.language_treeview.get_selection().select_path(path)
+                self.language_treeview.scroll_to_cell(
+                    path, use_align=True, row_align=0.5)
+                break
+            iterator = model.iter_next(iterator)
+
     def get_language(self):
-        model = self.language_iconview.get_model()
-        items = self.language_iconview.get_selected_items()
-        if not items:
-            return 'C'
-        iterator = model.get_iter(items[0])
-        if iterator is None:
-            return 'C'
-        else:
-            value = unicode(model.get_value(iterator, 0))
-            return self.language_choice_map[value][1]
+        selection = self.language_treeview.get_selection()
+        lang = self.selected_language_treeview(selection)
+        return lang
+
+    def on_language_treeview_row_activated(self, treeview, path, view_column):
+        self.next.activate()
+
+    def on_language_treeview_selection_changed(self, selection):
+        lang = self.selected_language_treeview(selection)
+
+        if lang:
+            # strip encoding; we use UTF-8 internally no matter what
+            lang = lang.split('.')[0].lower()
+            for widget in self.language_questions:
+                self.translate_widget(getattr(self, widget), lang)
 
     def on_language_iconview_item_activated (self, iconview, path):
         self.next.activate()
