diff --git a/gtk/gtkfilechooserprivate.h b/gtk/gtkfilechooserprivate.h
index 0094beb..21ac462 100644
--- a/gtk/gtkfilechooserprivate.h
+++ b/gtk/gtkfilechooserprivate.h
@@ -45,6 +45,7 @@ G_BEGIN_DECLS
 #define SETTINGS_KEY_SIDEBAR_WIDTH          "sidebar-width"
 #define SETTINGS_KEY_STARTUP_MODE           "startup-mode"
 #define SETTINGS_KEY_SORT_DIRECTORIES_FIRST "sort-directories-first"
+#define SETTINGS_KEY_TYPE_TO_SEARCH         "type-to-search"
 #define SETTINGS_KEY_CLOCK_FORMAT           "clock-format"
 #define SETTINGS_KEY_DATE_FORMAT            "date-format"
 
diff --git a/gtk/gtkfilechooserwidget.c b/gtk/gtkfilechooserwidget.c
index d1dd2f0..dae14a5 100644
--- a/gtk/gtkfilechooserwidget.c
+++ b/gtk/gtkfilechooserwidget.c
@@ -236,6 +236,7 @@ struct _GtkFileChooserWidgetPrivate {
   GtkWidget *delete_file_item;
   GtkWidget *sort_directories_item;
   GtkWidget *show_time_item;
+  GtkWidget *type_to_search_item;
 
   GtkWidget *browse_new_folder_button;
   GtkSizeGroup *browse_path_bar_size_group;
@@ -362,6 +363,7 @@ struct _GtkFileChooserWidgetPrivate {
   guint show_size_column : 1;
   guint create_folders : 1;
   guint auto_selecting_first_row : 1;
+  guint type_to_search : 1;
 };
 
 #define MAX_LOADING_TIME 500
@@ -1399,7 +1401,7 @@ gtk_file_chooser_widget_key_press_event (GtkWidget   *widget,
           return TRUE;
         }
     }
-  else if (gtk_search_entry_handle_event (GTK_SEARCH_ENTRY (priv->search_entry), (GdkEvent *)event))
+  else if (priv->type_to_search && gtk_search_entry_handle_event (GTK_SEARCH_ENTRY (priv->search_entry), (GdkEvent *)event))
     {
       if (priv->operation_mode != OPERATION_MODE_SEARCH)
         operation_mode_set (impl, OPERATION_MODE_SEARCH);
@@ -1854,6 +1856,33 @@ change_sort_directories_first_state (GSimpleAction *action,
                                         priv->sort_order);
 }
 
+static void
+update_type_to_search_state (GtkFileChooserWidget *impl)
+{
+  GtkTreeView *tree_view = GTK_TREE_VIEW (impl->priv->browse_files_tree_view);
+
+  gtk_tree_view_set_enable_search (tree_view, !impl->priv->type_to_search);
+  gtk_tree_view_set_search_column (tree_view, impl->priv->type_to_search ? -1 : MODEL_COL_NAME);
+}
+
+static void
+change_type_to_search_state (GSimpleAction *action,
+                             GVariant      *state,
+                             gpointer       data)
+{
+  GtkFileChooserWidget *impl = data;
+  GtkFileChooserWidgetPrivate *priv = impl->priv;
+
+  g_simple_action_set_state (action, state);
+
+  if ((priv->type_to_search ? 1 : 0) == (g_variant_get_boolean (state) ? 1 : 0))
+    return;
+
+  priv->type_to_search = g_variant_get_boolean (state);
+
+  update_type_to_search_state (impl);
+}
+
 static void
 clear_model_cache (GtkFileChooserWidget *impl,
                    gint                  column)
@@ -2201,7 +2230,8 @@ static GActionEntry entries[] = {
   { "toggle-show-hidden", NULL, NULL, "false", change_show_hidden_state },
   { "toggle-show-size", NULL, NULL, "false", change_show_size_state },
   { "toggle-show-time", NULL, NULL, "false", change_show_time_state },
-  { "toggle-sort-dirs-first", NULL, NULL, "false", change_sort_directories_first_state }
+  { "toggle-sort-dirs-first", NULL, NULL, "false", change_sort_directories_first_state },
+  { "toggle-type-to-search", NULL, NULL, "true", change_type_to_search_state }
 };
 
 static void
@@ -2282,6 +2312,7 @@ file_list_build_popover (GtkFileChooserWidget *impl)
   priv->size_column_item = add_button (box, _("Show _Size Column"), "item.toggle-show-size");
   priv->show_time_item = add_button (box, _("Show _Time"), "item.toggle-show-time");
   priv->sort_directories_item = add_button (box, _("Sort _Folders before Files"), "item.toggle-sort-dirs-first");
+  priv->type_to_search_item = add_button (box, _("Type to S_earch in Folders"), "item.toggle-type-to-search");
 }
 
 /* Updates the popover for the file list, creating it if necessary */
@@ -2322,6 +2353,9 @@ file_list_update_popover (GtkFileChooserWidget *impl)
 
   action = g_action_map_lookup_action (G_ACTION_MAP (actions), "toggle-sort-dirs-first");
   g_simple_action_set_state (G_SIMPLE_ACTION (action), g_variant_new_boolean (priv->sort_directories_first));
+
+  action = g_action_map_lookup_action (G_ACTION_MAP (actions), "toggle-type-to-search");
+  g_simple_action_set_state (G_SIMPLE_ACTION (action), g_variant_new_boolean (priv->type_to_search));
 }
 
 static void
@@ -3812,6 +3846,7 @@ settings_load (GtkFileChooserWidget *impl)
   gboolean show_hidden;
   gboolean show_size_column;
   gboolean sort_directories_first;
+  gboolean type_to_search;
   DateFormat date_format;
   gint sort_column;
   GtkSortType sort_order;
@@ -3828,6 +3863,7 @@ settings_load (GtkFileChooserWidget *impl)
   sidebar_width = g_settings_get_int (settings, SETTINGS_KEY_SIDEBAR_WIDTH);
   startup_mode = g_settings_get_enum (settings, SETTINGS_KEY_STARTUP_MODE);
   sort_directories_first = g_settings_get_boolean (settings, SETTINGS_KEY_SORT_DIRECTORIES_FIRST);
+  type_to_search = g_settings_get_boolean (settings, SETTINGS_KEY_TYPE_TO_SEARCH);
   date_format = g_settings_get_enum (settings, SETTINGS_KEY_DATE_FORMAT);
 
   if (!priv->show_hidden_set)
@@ -3839,6 +3875,7 @@ settings_load (GtkFileChooserWidget *impl)
   priv->sort_order = sort_order;
   priv->startup_mode = startup_mode;
   priv->sort_directories_first = sort_directories_first;
+  priv->type_to_search = type_to_search;
   priv->show_time = date_format == DATE_FORMAT_WITH_TIME;
 
   /* We don't call set_sort_column() here as the models may not have been
@@ -3847,6 +3884,7 @@ settings_load (GtkFileChooserWidget *impl)
    */
 
   update_time_renderer_visible (impl);
+  update_type_to_search_state (impl);
   gtk_paned_set_position (GTK_PANED (priv->browse_widgets_hpaned), sidebar_width);
 }
 
@@ -3865,6 +3903,7 @@ settings_save (GtkFileChooserWidget *impl)
                           gtk_file_chooser_get_show_hidden (GTK_FILE_CHOOSER (impl)));
   g_settings_set_boolean (settings, SETTINGS_KEY_SHOW_SIZE_COLUMN, priv->show_size_column);
   g_settings_set_boolean (settings, SETTINGS_KEY_SORT_DIRECTORIES_FIRST, priv->sort_directories_first);
+  g_settings_set_boolean (settings, SETTINGS_KEY_TYPE_TO_SEARCH, priv->type_to_search);
   g_settings_set_enum (settings, SETTINGS_KEY_SORT_COLUMN, priv->sort_column);
   g_settings_set_enum (settings, SETTINGS_KEY_SORT_ORDER, priv->sort_order);
   g_settings_set_int (settings, SETTINGS_KEY_SIDEBAR_WIDTH,
@@ -4340,6 +4379,7 @@ load_set_model (GtkFileChooserWidget *impl)
   update_columns (impl, FALSE, _("Modified"));
   file_list_set_sort_column_ids (impl);
   set_sort_column (impl);
+  update_type_to_search_state (impl);
   profile_msg ("    gtk_tree_view_set_model end", NULL);
   priv->list_sort_ascending = TRUE;
 
@@ -5103,6 +5143,7 @@ set_list_model (GtkFileChooserWidget  *impl,
   gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (priv->browse_files_model), MODEL_COL_TIME, time_sort_func, impl, NULL);
   gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (priv->browse_files_model), NULL, NULL, NULL);
   set_sort_column (impl);
+  update_type_to_search_state (impl);
   priv->list_sort_ascending = TRUE;
   g_signal_connect (priv->browse_files_model, "sort-column-changed",
                     G_CALLBACK (list_sort_column_changed_cb), impl);
@@ -7242,6 +7283,7 @@ search_setup_model (GtkFileChooserWidget *impl)
   gtk_tree_view_column_set_sort_column_id (priv->list_location_column, -1);
 
   update_columns (impl, TRUE, _("Modified"));
+  update_type_to_search_state (impl);
 }
 
 static gboolean
@@ -7452,6 +7494,7 @@ recent_idle_cleanup (gpointer data)
   gtk_tree_view_column_set_sort_column_id (priv->list_location_column, -1);
 
   update_columns (impl, TRUE, _("Accessed"));
+  update_type_to_search_state (impl);
 
   set_busy_cursor (impl, FALSE);
 
@@ -8514,6 +8557,8 @@ post_process_ui (GtkFileChooserWidget *impl)
   file_list_set_sort_column_ids (impl);
   update_cell_renderer_attributes (impl);
 
+  update_type_to_search_state (impl);
+
   /* Get the combo's text renderer and set ellipsize parameters,
    * perhaps GtkComboBoxText should declare the cell renderer
    * as an 'internal-child', then we could configure it in GtkBuilder
diff --git a/gtk/org.gtk.Settings.FileChooser.gschema.xml b/gtk/org.gtk.Settings.FileChooser.gschema.xml
index c3753f2..7ff4321 100644
--- a/gtk/org.gtk.Settings.FileChooser.gschema.xml
+++ b/gtk/org.gtk.Settings.FileChooser.gschema.xml
@@ -75,6 +75,13 @@
         If set to true, then folders are shown before files in the list.
       </description>
     </key>
+    <key type="b" name="type-to-search">
+      <default>true</default>
+      <summary>Type to Search in Folders</summary>
+      <description>
+        If set to true, then typing text will search in folders, instead of look up in the current folder listing.
+      </description>
+    </key>
     <key name='expand-folders' type='b'>
       <default>false</default>
       <summary>Expand folders</summary>
