diff -urNd ../gtk+-2.4.4-r5/gtk+-2.4.4/gtk/gtkfilesel.c gtk+-2.4.4/gtk/gtkfilesel.c
--- ../gtk+-2.4.4-r5/gtk+-2.4.4/gtk/gtkfilesel.c	2004-07-10 05:02:10.000000000 +0100
+++ gtk+-2.4.4/gtk/gtkfilesel.c	2004-09-13 13:40:09.000000000 +0100
@@ -68,6 +68,7 @@
 #include "gtkprivate.h"
 #include "gtkscrolledwindow.h"
 #include "gtkstock.h"
+#include "gtksignal.h"
 #include "gtktreeselection.h"
 #include "gtktreeview.h"
 #include "gtkvbox.h"
@@ -77,6 +78,7 @@
 #include "gtkmessagedialog.h"
 #include "gtkdnd.h"
 #include "gtkeventbox.h"
+#include "gtkimage.h"
 
 #undef GTK_DISABLE_DEPRECATED
 #include "gtkoptionmenu.h"
@@ -245,7 +247,8 @@
 };
 
 enum {
-  DIR_COLUMN
+  DIR_COLUMN,
+  ISFILE_COLUMN
 };
 
 enum {
@@ -400,6 +403,12 @@
 					      GtkTreePath       *path,
 					      GtkTreeViewColumn *column,
 					      gpointer           user_data);
+
+static void gtk_file_selection_activate (GtkTreeView       *tree_view,
+					 GtkTreePath       *path,
+					 GtkTreeViewColumn *column,
+					 gpointer           user_data);
+
 static void gtk_file_selection_file_changed  (GtkTreeSelection  *selection,
 					      gpointer           user_data);
 static void gtk_file_selection_dir_activate  (GtkTreeView       *tree_view,
@@ -419,6 +428,7 @@
 static void gtk_file_selection_create_dir  (GtkWidget *widget, gpointer data);
 static void gtk_file_selection_delete_file (GtkWidget *widget, gpointer data);
 static void gtk_file_selection_rename_file (GtkWidget *widget, gpointer data);
+static void gtk_file_selection_style_set (GtkWidget *widget, GtkStyle  *prev_style);
 
 static void free_selected_names (GPtrArray *names);
 
@@ -578,6 +588,23 @@
 							 G_PARAM_WRITABLE));
   object_class->destroy = gtk_file_selection_destroy;
   widget_class->map = gtk_file_selection_map;
+  widget_class->style_set = gtk_file_selection_style_set;
+
+  gtk_widget_class_install_style_property (widget_class,
+					   g_param_spec_boolean ("show_fileops_default",
+								 _("Show fileop buttons by default"),
+								 _("Whether file operation buttons are shown by default"),
+								 TRUE,
+								 G_PARAM_READABLE));
+
+  gtk_widget_class_install_style_property (widget_class,
+					   g_param_spec_int ("border_width",
+                                                             _("Border width"),
+                                                             _("Width of border around the main dialog area"),
+                                                             0,
+                                                             G_MAXINT,
+                                                             10,
+                                                             G_PARAM_READABLE));
 }
 
 static void gtk_file_selection_set_property (GObject         *object,
@@ -649,7 +676,29 @@
   gtk_widget_grab_default (widget);
   return FALSE;
 }
-     
+
+static void
+gtk_file_selection_style_set (GtkWidget *filesel,
+			      GtkStyle  *prev_style)
+{     
+  gboolean show_fileops;
+  gint border_width;
+
+  gtk_widget_style_get (filesel,
+                        "show_fileops_default",
+                        &show_fileops,
+			"border_width",
+			&border_width,
+			NULL);
+
+  gtk_container_set_border_width (GTK_CONTAINER (filesel), border_width);
+
+  if (show_fileops)
+    gtk_file_selection_show_fileop_buttons (GTK_FILE_SELECTION (filesel));
+  else
+    gtk_file_selection_hide_fileop_buttons (GTK_FILE_SELECTION (filesel));
+}
+
 static void
 gtk_file_selection_init (GtkFileSelection *filesel)
 {
@@ -674,17 +723,15 @@
 
   /* The dialog-sized vertical box  */
   filesel->main_vbox = dialog->vbox;
-  gtk_container_set_border_width (GTK_CONTAINER (filesel), 10);
 
   /* The horizontal box containing create, rename etc. buttons */
   filesel->button_area = gtk_hbutton_box_new ();
   gtk_button_box_set_layout (GTK_BUTTON_BOX (filesel->button_area), GTK_BUTTONBOX_START);
-  gtk_box_set_spacing (GTK_BOX (filesel->button_area), 0);
   gtk_box_pack_start (GTK_BOX (filesel->main_vbox), filesel->button_area, 
 		      FALSE, FALSE, 0);
   gtk_widget_show (filesel->button_area);
   
-  gtk_file_selection_show_fileop_buttons (filesel);
+  gtk_file_selection_style_set (GTK_WIDGET (filesel), NULL);
 
   /* hbox for pulldown menu */
   pulldown_hbox = gtk_hbox_new (TRUE, 5);
@@ -723,25 +770,32 @@
   
   /* The directories list */
 
-  model = gtk_list_store_new (1, G_TYPE_STRING);
+  model = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_BOOLEAN); /* MA */
   filesel->dir_list = gtk_tree_view_new_with_model (GTK_TREE_MODEL (model));
   g_object_unref (model);
 
-  column = gtk_tree_view_column_new_with_attributes (_("Folders"),
+  column = gtk_tree_view_column_new_with_attributes (/*_("Folders")*/ NULL,
 						     gtk_cell_renderer_text_new (),
 						     "text", DIR_COLUMN,
 						     NULL);
   label = gtk_label_new_with_mnemonic (_("Fol_ders"));
   gtk_label_set_mnemonic_widget (GTK_LABEL (label), filesel->dir_list);
   gtk_widget_show (label);
-  gtk_tree_view_column_set_widget (column, label);
+
+  /* gtk_tree_view_column_set_widget (column, label); */
+  gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (filesel->dir_list), FALSE);
+
   gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
   gtk_tree_view_append_column (GTK_TREE_VIEW (filesel->dir_list), column);
 
   gtk_widget_set_size_request (filesel->dir_list,
 			       DIR_LIST_WIDTH, DIR_LIST_HEIGHT);
   g_signal_connect (filesel->dir_list, "row_activated",
-		    G_CALLBACK (gtk_file_selection_dir_activate), filesel);
+		    G_CALLBACK (gtk_file_selection_activate), filesel);
+
+  g_signal_connect (gtk_tree_view_get_selection (GTK_TREE_VIEW (filesel->dir_list)), "changed",
+		    G_CALLBACK (gtk_file_selection_file_changed), filesel);
+
 
   /*  gtk_clist_column_titles_passive (GTK_CLIST (filesel->dir_list)); */
 
@@ -758,41 +812,6 @@
   gtk_widget_show (filesel->dir_list);
   gtk_widget_show (scrolled_win);
 
-  /* The files list */
-  model = gtk_list_store_new (1, G_TYPE_STRING);
-  filesel->file_list = gtk_tree_view_new_with_model (GTK_TREE_MODEL (model));
-  g_object_unref (model);
-
-  column = gtk_tree_view_column_new_with_attributes (_("Files"),
-						     gtk_cell_renderer_text_new (),
-						     "text", FILE_COLUMN,
-						     NULL);
-  label = gtk_label_new_with_mnemonic (_("_Files"));
-  gtk_label_set_mnemonic_widget (GTK_LABEL (label), filesel->file_list);
-  gtk_widget_show (label);
-  gtk_tree_view_column_set_widget (column, label);
-  gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-  gtk_tree_view_append_column (GTK_TREE_VIEW (filesel->file_list), column);
-
-  gtk_widget_set_size_request (filesel->file_list,
-			       FILE_LIST_WIDTH, FILE_LIST_HEIGHT);
-  g_signal_connect (filesel->file_list, "row_activated",
-		    G_CALLBACK (gtk_file_selection_file_activate), filesel);
-  g_signal_connect (gtk_tree_view_get_selection (GTK_TREE_VIEW (filesel->file_list)), "changed",
-		    G_CALLBACK (gtk_file_selection_file_changed), filesel);
-
-  /* gtk_clist_column_titles_passive (GTK_CLIST (filesel->file_list)); */
-
-  scrolled_win = gtk_scrolled_window_new (NULL, NULL);
-  gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_win), GTK_SHADOW_IN);
-  gtk_container_add (GTK_CONTAINER (scrolled_win), filesel->file_list);
-  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
-				  GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
-  gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 0);
-  gtk_container_add (GTK_CONTAINER (list_container), scrolled_win);
-  gtk_widget_show (filesel->file_list);
-  gtk_widget_show (scrolled_win);
-
   /* action area for packing buttons into. */
   filesel->action_area = gtk_hbox_new (TRUE, 0);
   gtk_box_pack_start (GTK_BOX (filesel->main_vbox), filesel->action_area, 
@@ -2008,6 +2027,23 @@
 }
 
 static void
+gtk_file_selection_activate (GtkTreeView       *tree_view,
+			     GtkTreePath       *path,
+			     GtkTreeViewColumn *column,
+			     gpointer           user_data)
+{
+  GtkTreeModel *model = gtk_tree_view_get_model (tree_view);
+  GtkTreeIter iter;  
+  gboolean is_file;
+
+  gtk_tree_model_get_iter (model, &iter, path);
+  gtk_tree_model_get (model, &iter, ISFILE_COLUMN, &is_file, -1);
+
+  if (! is_file)
+    gtk_file_selection_dir_activate (tree_view, path, column, user_data);
+}
+
+static void
 gtk_file_selection_file_activate (GtkTreeView       *tree_view,
 				  GtkTreePath       *path,
 				  GtkTreeViewColumn *column,
@@ -2103,7 +2139,6 @@
   PossibleCompletion* poss;
   GtkTreeIter iter;
   GtkListStore *dir_model;
-  GtkListStore *file_model;
   gchar* filename;
   gchar* rem_path = rel_path;
   gchar* sel_text;
@@ -2125,10 +2160,8 @@
   g_assert (cmpl_state->reference_dir);
 
   dir_model = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (fs->dir_list)));
-  file_model = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (fs->file_list)));
 
   gtk_list_store_clear (dir_model);
-  gtk_list_store_clear (file_model);
 
   /* Set the dir list to include ./ and ../ */
   gtk_list_store_append (dir_model, &iter);
@@ -2150,13 +2183,17 @@
                   strcmp (filename, ".." G_DIR_SEPARATOR_S) != 0)
 		{
 		  gtk_list_store_append (dir_model, &iter);
-		  gtk_list_store_set (dir_model, &iter, DIR_COLUMN, filename, -1);
+		  gtk_list_store_set (dir_model, &iter, 
+				      DIR_COLUMN, filename, 
+				      ISFILE_COLUMN, FALSE, -1);
 		}
 	    }
           else
 	    {
-	      gtk_list_store_append (file_model, &iter);
-	      gtk_list_store_set (file_model, &iter, DIR_COLUMN, filename, -1);
+	      gtk_list_store_append (dir_model, &iter);
+	      gtk_list_store_set (dir_model, &iter, 
+				  DIR_COLUMN, filename, 
+				  ISFILE_COLUMN, TRUE, -1);
             }
 	}