Index: gtkfilechooserdefault.c
===================================================================
--- gtkfilechooserdefault.c	(revision 20126)
+++ gtkfilechooserdefault.c	(working copy)
@@ -2573,13 +2573,42 @@
   queue_edited_idle (impl, NULL);
 }
 
+/* check the size being requested by this widget clamp/ellipsize if required */
+static void
+filter_combo_size_request (GtkWidget *combo, GtkRequisition *request,
+			   GtkCellRenderer *cell)
+{
+  /* FIXME: really shouldn't hard code at 400 pixels, need treeview width */
+  if (request->width > 400)
+  {
+    request->width = 400;
+    g_object_set (G_OBJECT (cell), "ellipsize", PANGO_ELLIPSIZE_MIDDLE, NULL);
+  }
+  else
+  {
+    g_object_set (G_OBJECT (cell), "ellipsize", PANGO_ELLIPSIZE_NONE, NULL);
+  }
+}
+
 /* Creates the widgets for the filter combo box */
 static GtkWidget *
 filter_create (GtkFileChooserDefault *impl)
 {
-  impl->filter_combo = gtk_combo_box_new_text ();
+  GtkListStore *store = gtk_list_store_new (1, G_TYPE_STRING);
+  GtkCellRenderer *cell;
+  
+  impl->filter_combo = gtk_combo_box_new_with_model (GTK_TREE_MODEL (store));
+  g_object_unref (store);
+
   gtk_combo_box_set_focus_on_click (GTK_COMBO_BOX (impl->filter_combo), FALSE);
 
+  cell = gtk_cell_renderer_text_new ();
+  gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (impl->filter_combo), cell, TRUE);
+  gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (impl->filter_combo), cell,
+				  "text", 0, NULL);
+  g_signal_connect (impl->filter_combo, "size-request",
+		    G_CALLBACK (filter_combo_size_request), cell);
+
   g_signal_connect (impl->filter_combo, "changed",
 		    G_CALLBACK (filter_combo_changed), impl);
 
@@ -4742,6 +4771,7 @@
   widget = filter_create (impl);
 
   gtk_widget_show (widget);
+  // gtk_widget_set_size_request (widget, 400, -1); /* dodgy? */
   gtk_box_pack_end (GTK_BOX (impl->filter_combo_hbox), widget, FALSE, FALSE, 0);
 
   gtk_size_group_add_widget (size_group, impl->filter_combo_hbox);
@@ -7572,6 +7602,8 @@
 				     GtkFileFilter  *filter)
 {
   GtkFileChooserDefault *impl = GTK_FILE_CHOOSER_DEFAULT (chooser);
+  GtkListStore *store;
+  GtkTreeIter iter;
   const gchar *name;
 
   if (g_slist_find (impl->filters, filter))
@@ -7587,7 +7619,10 @@
   if (!name)
     name = "Untitled filter";	/* Place-holder, doesn't need to be marked for translation */
 
-  gtk_combo_box_append_text (GTK_COMBO_BOX (impl->filter_combo), name);
+  /* append the filter name to the filter combo */
+  store = GTK_LIST_STORE (gtk_combo_box_get_model (GTK_COMBO_BOX (impl->filter_combo)));
+  gtk_list_store_append (store, &iter);
+  gtk_list_store_set (store, &iter, 0, name, -1);
 
   if (!g_slist_find (impl->filters, impl->current_filter))
     set_current_filter (impl, filter);
