Debian #405296; GNOME #148828; permit single click in filechooser instead of
requiring double-click.

Index: gtk+-2.12.1/gtk/gtkfilechooserdefault.c
===================================================================
--- gtk+-2.12.1.orig/gtk/gtkfilechooserdefault.c	2007-11-04 15:14:51.503352071 +0100
+++ gtk+-2.12.1/gtk/gtkfilechooserdefault.c	2007-11-04 15:47:23.358581961 +0100
@@ -390,10 +390,6 @@ static void check_preview_change (GtkFil
 
 static void filter_combo_changed       (GtkComboBox           *combo_box,
 					GtkFileChooserDefault *impl);
-static void     shortcuts_row_activated_cb (GtkTreeView           *tree_view,
-					    GtkTreePath           *path,
-					    GtkTreeViewColumn     *column,
-					    GtkFileChooserDefault *impl);
 
 static gboolean shortcuts_key_press_event_cb (GtkWidget             *widget,
 					      GdkEventKey           *event,
@@ -2004,7 +2000,7 @@ shortcuts_append_paths (GtkFileChooserDe
 
   /* As there is no separator now, we want to start there.
    */
-  start_row = shortcuts_get_index (impl, SHORTCUTS_BOOKMARKS_SEPARATOR);
+  start_row = shortcuts_get_index (impl, SHORTCUTS_BOOKMARKS_SEPARATOR) + 1;
   num_inserted = 0;
 
   for (; paths; paths = paths->next)
@@ -2016,6 +2012,8 @@ shortcuts_append_paths (GtkFileChooserDe
       if (impl->local_only &&
 	  !gtk_file_system_path_is_local (impl->file_system, path))
 	continue;
+      if (shortcut_find_position (impl, path) != -1)
+        continue;
 
       label = gtk_file_system_get_bookmark_label (impl->file_system, path);
 
@@ -2245,13 +2243,14 @@ shortcuts_add_bookmarks (GtkFileChooserD
 			   impl->num_bookmarks + 1);
 
   impl->num_bookmarks = 0;
+  shortcuts_insert_separator (impl, SHORTCUTS_BOOKMARKS_SEPARATOR);
 
   bookmarks = gtk_file_system_list_bookmarks (impl->file_system);
   shortcuts_append_paths (impl, bookmarks);
   gtk_file_paths_free (bookmarks);
 
-  if (impl->num_bookmarks > 0)
-    shortcuts_insert_separator (impl, SHORTCUTS_BOOKMARKS_SEPARATOR);
+  if (impl->num_bookmarks == 0)
+    shortcuts_remove_rows (impl, shortcuts_get_index (impl, SHORTCUTS_BOOKMARKS_SEPARATOR), 1);
 
   if (impl->shortcuts_pane_filter_model)
     gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (impl->shortcuts_pane_filter_model));
@@ -3657,8 +3656,22 @@ static void
 shortcuts_selection_changed_cb (GtkTreeSelection      *selection,
 				GtkFileChooserDefault *impl)
 {
+  GtkTreeIter iter;
+  GtkTreeIter child_iter;
+
   bookmarks_check_remove_sensitivity (impl);
   shortcuts_check_popup_sensitivity (impl);
+
+  if (impl->changing_folder)
+    return;
+
+  if (gtk_tree_selection_get_selected(selection, NULL, &iter))
+    {
+      gtk_tree_model_filter_convert_iter_to_child_iter (GTK_TREE_MODEL_FILTER (impl->shortcuts_pane_filter_model),
+							&child_iter,
+							&iter);
+      shortcuts_activate_iter (impl, &child_iter);
+    }
 }
 
 static gboolean
@@ -3930,7 +3943,7 @@ shortcuts_list_create (GtkFileChooserDef
 		     GDK_ACTION_COPY | GDK_ACTION_MOVE);
 
   selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->browse_shortcuts_tree_view));
-  gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE);
+  gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
   gtk_tree_selection_set_select_function (selection,
 					  shortcuts_select_func,
 					  impl, NULL);
@@ -3938,9 +3951,6 @@ shortcuts_list_create (GtkFileChooserDef
   g_signal_connect (selection, "changed",
 		    G_CALLBACK (shortcuts_selection_changed_cb), impl);
 
-  g_signal_connect (impl->browse_shortcuts_tree_view, "row_activated",
-		    G_CALLBACK (shortcuts_row_activated_cb), impl);
-
   g_signal_connect (impl->browse_shortcuts_tree_view, "key_press_event",
 		    G_CALLBACK (shortcuts_key_press_event_cb), impl);
 
@@ -8604,25 +8614,6 @@ gtk_file_chooser_default_should_respond 
       gtk_file_path_free (path);
       return retval;
     }
-  else if (impl->toplevel_last_focus_widget == impl->browse_shortcuts_tree_view)
-    {
-      /* The focus is on a dialog's action area button, *and* the widget that
-       * was focused immediately before it is the shortcuts list.  Switch to the
-       * selected shortcut and tell the caller not to respond.
-       */
-      GtkTreeIter iter;
-
-      if (shortcuts_get_selected (impl, &iter))
-	{
-	  shortcuts_activate_iter (impl, &iter);
-	  
-	  focus_browse_tree_view_if_possible (impl);
-	}
-      else
-	goto file_list;
-
-      return FALSE;
-    }
   else if (impl->toplevel_last_focus_widget == impl->browse_files_tree_view)
     {
       /* The focus is on a dialog's action area button, *and* the widget that
@@ -10482,25 +10473,6 @@ shortcuts_activate_iter (GtkFileChooserD
     }
 }
 
-/* Callback used when a row in the shortcuts list is activated */
-static void
-shortcuts_row_activated_cb (GtkTreeView           *tree_view,
-			    GtkTreePath           *path,
-			    GtkTreeViewColumn     *column,
-			    GtkFileChooserDefault *impl)
-{
-  GtkTreeIter iter;
-  GtkTreeIter child_iter;
-
-  if (!gtk_tree_model_get_iter (impl->shortcuts_pane_filter_model, &iter, path))
-    return;
-
-  gtk_tree_model_filter_convert_iter_to_child_iter (GTK_TREE_MODEL_FILTER (impl->shortcuts_pane_filter_model),
-						    &child_iter,
-						    &iter);
-  shortcuts_activate_iter (impl, &child_iter);
-}
-
 /* Handler for GtkWidget::key-press-event on the shortcuts list */
 static gboolean
 shortcuts_key_press_event_cb (GtkWidget             *widget,
