Index: gtk+-2.10.6/gtk/gtkcalendar.c
===================================================================
--- gtk+-2.10.6.orig/gtk/gtkcalendar.c
+++ gtk+-2.10.6/gtk/gtkcalendar.c
@@ -2482,9 +2482,11 @@ calendar_main_button_press (GtkCalendar	
 	}
 
       calendar_select_and_focus_day (calendar, day);
-    }
+
+    // This change causes the calendar to disappear after choosing a day
+/*    }
   else if (event->type == GDK_2BUTTON_PRESS)
-    {
+    {*/
       priv->in_drag = 0;
       if (day_month == MONTH_CURRENT)
 	g_signal_emit (calendar,
Index: gtk+-2.10.6/gtk/gtkfilesel.c
===================================================================
--- gtk+-2.10.6.orig/gtk/gtkfilesel.c
+++ gtk+-2.10.6/gtk/gtkfilesel.c
@@ -2426,6 +2426,33 @@ gtk_file_selection_file_changed (GtkTree
       if (fs->last_selected != NULL)
 	g_free (fs->last_selected);
 
+      // Single-click directory entry	
+  	  if (new_names->len == 1)
+  	    {
+  	      GtkTreeView *tree_view;
+  	      GtkTreeModel *model;
+  	      GtkTreePath *path;
+          GtkTreeIter iter;  
+          gboolean is_file;
+
+          tree_view = gtk_tree_selection_get_tree_view (selection);
+          
+          if (gtk_tree_selection_get_selected (selection, &model, &iter))
+            {
+              path = gtk_tree_model_get_path (model, &iter);              
+              gtk_tree_model_get (model, &iter, ISFILE_COLUMN, &is_file, -1);
+
+              if (!is_file)
+                {
+                  gtk_file_selection_dir_activate (tree_view, path, 
+                          gtk_tree_view_get_column (tree_view, DIR_COLUMN),
+                          user_data);
+                }
+                
+              gtk_tree_path_free (path);
+            }
+        }
+        
       fs->last_selected = g_strdup (g_ptr_array_index (new_names, index));
       filename = get_real_filename (fs->last_selected, FALSE);
 
