diff options
author | António Fernandes <antoniof@gnome.org> | 2018-02-17 14:26:53 +0000 |
---|---|---|
committer | Ernestas Kulik <ernestask@gnome.org> | 2018-03-24 20:24:38 +0200 |
commit | 6a66d84e0fd4e6c63e5a1247e2f0f1cff190f033 (patch) | |
tree | 0d2f6da0417d75e302f425e3e732992394365bbc | |
parent | c6b6c0c73d84283d773e1ac40a55bfffdb31342b (diff) | |
download | nautilus-6a66d84e0fd4e6c63e5a1247e2f0f1cff190f033.tar.gz |
list-view: Set keyboard focus when setting selection
On icon view, when setting a selection, keyboard focus is
given to the selected item.
Make list view do the same.
Fixes https://gitlab.gnome.org/GNOME/nautilus/issues/256
-rw-r--r-- | src/nautilus-list-view.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/src/nautilus-list-view.c b/src/nautilus-list-view.c index d3829a158..3a9e720e4 100644 --- a/src/nautilus-list-view.c +++ b/src/nautilus-list-view.c @@ -2757,13 +2757,18 @@ nautilus_list_view_set_selection (NautilusFilesView *view, GList *selection) { NautilusListView *list_view; + NautilusListModel *model; + GtkTreeView *tree_view; GtkTreeSelection *tree_selection; GList *node; + gboolean cursor_is_set_on_selection = FALSE; GList *iters, *l; NautilusFile *file; list_view = NAUTILUS_LIST_VIEW (view); - tree_selection = gtk_tree_view_get_selection (list_view->details->tree_view); + model = list_view->details->model; + tree_view = list_view->details->tree_view; + tree_selection = gtk_tree_view_get_selection (tree_view); g_signal_handlers_block_by_func (tree_selection, list_selection_changed_callback, view); @@ -2771,10 +2776,23 @@ nautilus_list_view_set_selection (NautilusFilesView *view, for (node = selection; node != NULL; node = node->next) { file = node->data; - iters = nautilus_list_model_get_all_iters_for_file (list_view->details->model, file); + iters = nautilus_list_model_get_all_iters_for_file (model, file); for (l = iters; l != NULL; l = l->next) { + if (!cursor_is_set_on_selection) + { + GtkTreePath *path; + + path = gtk_tree_model_get_path (GTK_TREE_MODEL (model), + (GtkTreeIter *) l->data); + gtk_tree_view_set_cursor (tree_view, path, NULL, FALSE); + gtk_tree_path_free (path); + + cursor_is_set_on_selection = TRUE; + continue; + } + gtk_tree_selection_select_iter (tree_selection, (GtkTreeIter *) l->data); } |