? ~comboboxspeedup.diff
Index: gtkcombobox.c
===================================================================
RCS file: /cvs/gnome/gtk+/gtk/gtkcombobox.c,v
retrieving revision 1.161
diff -u -r1.161 gtkcombobox.c
--- gtkcombobox.c	13 Sep 2005 19:57:40 -0000	1.161
+++ gtkcombobox.c	4 Oct 2005 20:52:13 -0000
@@ -2526,7 +2526,7 @@
   n_children = gtk_tree_model_iter_n_children (model, parent);
   
   last = NULL;
-  for (i = 0; i < n_children; i++)
+  for (i = n_children - 1; i >= 0; i--)
     {
       gtk_tree_model_iter_nth_child (model, &iter, parent, i);
 
@@ -2565,10 +2565,13 @@
 	      g_signal_connect (subitem, "activate",
 				G_CALLBACK (gtk_combo_box_menu_item_activate),
 				combo_box);
-	      gtk_menu_shell_append (GTK_MENU_SHELL (submenu), subitem);
-	      gtk_menu_shell_append (GTK_MENU_SHELL (submenu), separator);
 	      
+	      /* first insert everything from the submenu */
 	      gtk_combo_box_menu_fill_level (combo_box, submenu, &iter);
+	      
+	      /* and add the item itself */
+	      gtk_menu_shell_prepend (GTK_MENU_SHELL (submenu), separator);
+	      gtk_menu_shell_prepend (GTK_MENU_SHELL (submenu), subitem);
 	    }
 	  else
 	    g_signal_connect (item, "activate",
@@ -2576,7 +2579,7 @@
 			      combo_box);
 	}
       
-      gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+      gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item);
       if (combo_box->priv->wrap_width && menu == combo_box->priv->popup_widget)
         gtk_combo_box_relayout_item (combo_box, item, &iter, last);
       gtk_widget_show (item);
