Index: gtk/gtkfilechooserdefault.c
===================================================================
--- gtk/gtkfilechooserdefault.c	(revisión: 22499)
+++ gtk/gtkfilechooserdefault.c	(copia de trabajo)
@@ -3882,6 +3882,7 @@ shortcuts_list_create (GtkFileChooserDef
   /* Tree */
 
   impl->browse_shortcuts_tree_view = gtk_tree_view_new ();
+  gtk_tree_view_set_focus_on_button_press (impl->browse_shortcuts_tree_view, FALSE);
 #ifdef PROFILE_FILE_CHOOSER
   g_object_set_data (G_OBJECT (impl->browse_shortcuts_tree_view), "fmq-name", "shortcuts");
 #endif
Index: gtk/gtktreeview.c
===================================================================
--- gtk/gtktreeview.c	(revisión: 22499)
+++ gtk/gtktreeview.c	(copia de trabajo)
@@ -140,6 +140,7 @@ enum {
   PROP_HOVER_SELECTION,
   PROP_HOVER_EXPAND,
   PROP_SHOW_EXPANDERS,
+  PROP_FOCUS_ON_BUTTON_PRESS,
   PROP_LEVEL_INDENTATION,
   PROP_RUBBER_BANDING,
   PROP_ENABLE_GRID_LINES,
@@ -722,6 +723,21 @@ gtk_tree_view_class_init (GtkTreeViewCla
 							   GTK_PARAM_READWRITE));
 
     /**
+     * GtkTreeView:focus-on-button-press:
+     *
+     * %TRUE for the treeview to get focus when it is single clicked.
+     *
+     * Since: 2.15.6
+     */
+    g_object_class_install_property (o_class,
+				     PROP_FOCUS_ON_BUTTON_PRESS,
+				     g_param_spec_boolean ("focus-on-button-press",
+							   P_("Focus treeview when clicking on it"),
+							   P_("Focus treeview when clicking on it"),
+							   TRUE,
+							   GTK_PARAM_READWRITE));
+
+    /**
      * GtkTreeView:level-indentation:
      *
      * Extra indentation for each level.
@@ -1338,7 +1354,8 @@ gtk_tree_view_init (GtkTreeView *tree_vi
 
   tree_view->priv->flags =  GTK_TREE_VIEW_SHOW_EXPANDERS
                             | GTK_TREE_VIEW_DRAW_KEYFOCUS
-                            | GTK_TREE_VIEW_HEADERS_VISIBLE;
+                            | GTK_TREE_VIEW_HEADERS_VISIBLE
+                            | GTK_TREE_VIEW_FOCUS_ON_BUTTON_PRESS;
 
   /* We need some padding */
   tree_view->priv->dy = 0;
@@ -1442,6 +1459,9 @@ gtk_tree_view_set_property (GObject     
     case PROP_SHOW_EXPANDERS:
       gtk_tree_view_set_show_expanders (tree_view, g_value_get_boolean (value));
       break;
+    case PROP_FOCUS_ON_BUTTON_PRESS:
+      gtk_tree_view_set_focus_on_button_press (tree_view, g_value_get_boolean (value));
+      break;
     case PROP_LEVEL_INDENTATION:
       tree_view->priv->level_indentation = g_value_get_int (value);
       break;
@@ -1517,6 +1537,9 @@ gtk_tree_view_get_property (GObject    *
     case PROP_SHOW_EXPANDERS:
       g_value_set_boolean (value, GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_SHOW_EXPANDERS));
       break;
+    case PROP_FOCUS_ON_BUTTON_PRESS:
+      g_value_set_boolean (value, GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_FOCUS_ON_BUTTON_PRESS));
+      break;
     case PROP_LEVEL_INDENTATION:
       g_value_set_int (value, tree_view->priv->level_indentation);
       break;
@@ -2844,7 +2867,7 @@ gtk_tree_view_button_press (GtkWidget   
       /* If we activated the row through a double click we don't want to grab
        * focus back, as moving focus to another widget is pretty common.
        */
-      if (!row_double_click)
+      if (!row_double_click && gtk_tree_view_get_focus_on_button_press (tree_view))
 	grab_focus_and_unset_draw_keyfocus (tree_view);
 
       return TRUE;
@@ -15341,6 +15364,50 @@ gtk_tree_view_get_show_expanders (GtkTre
 }
 
 /**
+ * gtk_tree_view_set_focus_on_button_press:
+ * @tree_view: a #GtkTreeView
+ * @enabled: %TRUE to enable @tree_view to get focused after been clicked 
+ * with the mouse, %FALSE otherwise.
+ *
+ * Sets whether @tree_view takes focus when been single clicked with the mouse,
+ * which is the default, but some applications may require this to be %FALSE 
+ * to not loose focus from other widgets when the user interacts with the @tree_view
+ * (e.g. Places pane of GtkFileChooser Save As dialog).
+ *
+ * Since: 2.15.6
+ */
+void
+gtk_tree_view_set_focus_on_button_press (GtkTreeView *tree_view,
+					  gboolean     enabled)
+{
+  g_return_if_fail (GTK_IS_TREE_VIEW (tree_view));
+
+  if (enabled)
+    GTK_TREE_VIEW_SET_FLAG (tree_view, GTK_TREE_VIEW_FOCUS_ON_BUTTON_PRESS);
+  else
+    GTK_TREE_VIEW_UNSET_FLAG (tree_view, GTK_TREE_VIEW_FOCUS_ON_BUTTON_PRESS);
+}
+
+/**
+ * gtk_tree_view_get_focus_on_button_press:
+ * @tree_view: a #GtkTreeView.
+ *
+ * Returns whether or not the @tree_view gets focused when it is single clicked.
+ *
+ * Return value: %TRUE if the @tree_view gets focused when doing a mouse single click, %FALSE
+ * otherwise.
+ *
+ * Since: 2.15.6
+ */
+gboolean
+gtk_tree_view_get_focus_on_button_press (GtkTreeView *tree_view)
+{
+  g_return_val_if_fail (GTK_IS_TREE_VIEW (tree_view), FALSE);
+
+  return GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_FOCUS_ON_BUTTON_PRESS);
+}
+
+/**
  * gtk_tree_view_set_level_indentation:
  * @tree_view: a #GtkTreeView
  * @indentation: the amount, in pixels, of extra indentation in @tree_view.
Index: gtk/gtktreeview.h
===================================================================
--- gtk/gtktreeview.h	(revisión: 22499)
+++ gtk/gtktreeview.h	(copia de trabajo)
@@ -401,6 +401,9 @@ void                        gtk_tree_vie
 void                        gtk_tree_view_set_show_expanders     (GtkTreeView                *tree_view,
 								  gboolean                    enabled);
 gboolean                    gtk_tree_view_get_show_expanders     (GtkTreeView                *tree_view);
+void                        gtk_tree_view_set_focus_on_button_press    (GtkTreeView                *tree_view,
+									  gboolean                    enabled);
+gboolean                    gtk_tree_view_get_focus_on_button_press     (GtkTreeView                *tree_view);
 void                        gtk_tree_view_set_level_indentation  (GtkTreeView                *tree_view,
 								  gint                        indentation);
 gint                        gtk_tree_view_get_level_indentation  (GtkTreeView                *tree_view);
Index: gtk/gtktreeprivate.h
===================================================================
--- gtk/gtktreeprivate.h	(revisión: 22499)
+++ gtk/gtktreeprivate.h	(copia de trabajo)
@@ -39,7 +39,8 @@ typedef enum
   GTK_TREE_VIEW_HEADERS_VISIBLE = 1 << 4,
   GTK_TREE_VIEW_DRAW_KEYFOCUS = 1 << 5,
   GTK_TREE_VIEW_MODEL_SETUP = 1 << 6,
-  GTK_TREE_VIEW_IN_COLUMN_DRAG = 1 << 7
+  GTK_TREE_VIEW_IN_COLUMN_DRAG = 1 << 7,
+  GTK_TREE_VIEW_FOCUS_ON_BUTTON_PRESS = 1 << 8
 } GtkTreeViewFlags;
 
 typedef enum
