summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntónio Fernandes <antoniof@gnome.org>2018-02-17 14:26:53 +0000
committerErnestas Kulik <ernestask@gnome.org>2018-03-24 20:24:38 +0200
commit6a66d84e0fd4e6c63e5a1247e2f0f1cff190f033 (patch)
tree0d2f6da0417d75e302f425e3e732992394365bbc
parentc6b6c0c73d84283d773e1ac40a55bfffdb31342b (diff)
downloadnautilus-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.c22
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);
}