summaryrefslogtreecommitdiff
path: root/gtk/gtkfilechooserwidget.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2015-10-01 23:32:30 -0400
committerMatthias Clasen <mclasen@redhat.com>2015-10-01 23:32:30 -0400
commit7d4ed3692ed84986dcb02847b083c361454b5267 (patch)
tree2140375385253515f6b078ecbcbc64d85d7f775b /gtk/gtkfilechooserwidget.c
parent134c2ea799de69a2c81a9c8f4abf139fa28cc6f4 (diff)
downloadgtk+-7d4ed3692ed84986dcb02847b083c361454b5267.tar.gz
file chooser: Improve search focus handling
Move focus to list when search results appear to make it possible to select the first search result by just hitting Enter. To keep this from interfering with keynav, we need to make sure that we still handle Escape to search. And when search comes up empty, we need to move the focus back to the entry. https://bugzilla.gnome.org/show_bug.cgi?id=755926
Diffstat (limited to 'gtk/gtkfilechooserwidget.c')
-rw-r--r--gtk/gtkfilechooserwidget.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/gtk/gtkfilechooserwidget.c b/gtk/gtkfilechooserwidget.c
index 1ea94b29bd..1c9e642950 100644
--- a/gtk/gtkfilechooserwidget.c
+++ b/gtk/gtkfilechooserwidget.c
@@ -1353,6 +1353,13 @@ browse_files_key_press_event_cb (GtkWidget *widget,
}
}
+ if (event->keyval == GDK_KEY_Escape &&
+ priv->operation_mode == OPERATION_MODE_SEARCH)
+ {
+ gtk_search_entry_handle_event (GTK_SEARCH_ENTRY (priv->search_entry), (GdkEvent *)event);
+ return TRUE;
+ }
+
return FALSE;
}
@@ -7074,6 +7081,10 @@ search_engine_hits_added_cb (GtkSearchEngine *engine,
{
GList *l, *files, *files_with_info, *infos;
GFile *file;
+ gboolean select = FALSE;
+
+ if (gtk_tree_model_iter_n_children (GTK_TREE_MODEL (impl->priv->search_model), NULL) == 0)
+ select = TRUE;
files = NULL;
files_with_info = NULL;
@@ -7101,6 +7112,8 @@ search_engine_hits_added_cb (GtkSearchEngine *engine,
g_list_free_full (infos, g_object_unref);
gtk_stack_set_visible_child_name (GTK_STACK (impl->priv->browse_files_stack), "list");
+ if (select)
+ gtk_widget_grab_focus (impl->priv->browse_files_tree_view);
}
/* Callback used from GtkSearchEngine when the query is done running */
@@ -7121,7 +7134,10 @@ search_engine_finished_cb (GtkSearchEngine *engine,
}
if (gtk_tree_model_iter_n_children (GTK_TREE_MODEL (priv->search_model), NULL) == 0)
- gtk_stack_set_visible_child_name (GTK_STACK (priv->browse_files_stack), "empty");
+ {
+ gtk_stack_set_visible_child_name (GTK_STACK (priv->browse_files_stack), "empty");
+ gtk_entry_grab_focus_without_selecting (GTK_ENTRY (priv->search_entry));
+ }
}
/* Displays a generic error when we cannot create a GtkSearchEngine.