diff options
author | William Jon McCann <jmccann@redhat.com> | 2012-08-07 12:45:44 -0400 |
---|---|---|
committer | William Jon McCann <jmccann@redhat.com> | 2012-08-07 15:53:37 -0400 |
commit | 50711e28ba4d4c971a812a0bdef0c30516141f4e (patch) | |
tree | efde2d8357b6f31bc1f3ca4fec1892324941c676 | |
parent | fbc739e05e759b292a8dcaa8bc675ceda7b573f9 (diff) | |
download | nautilus-50711e28ba4d4c971a812a0bdef0c30516141f4e.tar.gz |
Select first item in search results by default
-rw-r--r-- | libnautilus-private/nautilus-canvas-container.c | 25 | ||||
-rw-r--r-- | libnautilus-private/nautilus-canvas-container.h | 3 | ||||
-rw-r--r-- | src/nautilus-canvas-view.c | 12 | ||||
-rw-r--r-- | src/nautilus-list-view.c | 14 | ||||
-rw-r--r-- | src/nautilus-query-editor.c | 17 | ||||
-rw-r--r-- | src/nautilus-query-editor.h | 9 | ||||
-rw-r--r-- | src/nautilus-view.c | 43 | ||||
-rw-r--r-- | src/nautilus-view.h | 5 | ||||
-rw-r--r-- | src/nautilus-window-slot.c | 14 | ||||
-rw-r--r-- | src/nautilus-window-slot.h | 1 |
10 files changed, 123 insertions, 20 deletions
diff --git a/libnautilus-private/nautilus-canvas-container.c b/libnautilus-private/nautilus-canvas-container.c index 57918c3ba..1718379fb 100644 --- a/libnautilus-private/nautilus-canvas-container.c +++ b/libnautilus-private/nautilus-canvas-container.c @@ -6779,6 +6779,31 @@ nautilus_canvas_container_select_all (NautilusCanvasContainer *container) } /** + * nautilus_canvas_container_select_first: + * @container: An canvas container widget. + * + * Select the first icon in @container. + **/ +void +nautilus_canvas_container_select_first (NautilusCanvasContainer *container) +{ + gboolean selection_changed; + NautilusCanvasIcon *icon; + + g_return_if_fail (NAUTILUS_IS_CANVAS_CONTAINER (container)); + + selection_changed = FALSE; + + icon = g_list_nth_data (container->details->icons, 0); + selection_changed |= icon_set_selected (container, icon, TRUE); + + if (selection_changed) { + g_signal_emit (container, + signals[SELECTION_CHANGED], 0); + } +} + +/** * nautilus_canvas_container_set_selection: * @container: An canvas container widget. * @selection: A list of NautilusCanvasIconData *. diff --git a/libnautilus-private/nautilus-canvas-container.h b/libnautilus-private/nautilus-canvas-container.h index 5e553eaea..ba2fe8005 100644 --- a/libnautilus-private/nautilus-canvas-container.h +++ b/libnautilus-private/nautilus-canvas-container.h @@ -291,6 +291,9 @@ void nautilus_canvas_container_unselect_all (Nauti void nautilus_canvas_container_select_all (NautilusCanvasContainer *view); +void nautilus_canvas_container_select_first (NautilusCanvasContainer *view); + + /* operations on the selection */ GList * nautilus_canvas_container_get_selection (NautilusCanvasContainer *view); void nautilus_canvas_container_invert_selection (NautilusCanvasContainer *view); diff --git a/src/nautilus-canvas-view.c b/src/nautilus-canvas-view.c index 6698ba1d6..5da58a7c6 100644 --- a/src/nautilus-canvas-view.c +++ b/src/nautilus-canvas-view.c @@ -1443,6 +1443,17 @@ nautilus_canvas_view_select_all (NautilusView *view) } static void +nautilus_canvas_view_select_first (NautilusView *view) +{ + NautilusCanvasContainer *canvas_container; + + g_return_if_fail (NAUTILUS_IS_CANVAS_VIEW (view)); + + canvas_container = get_canvas_container (NAUTILUS_CANVAS_VIEW (view)); + nautilus_canvas_container_select_first (canvas_container); +} + +static void nautilus_canvas_view_reveal_selection (NautilusView *view) { GList *selection; @@ -2314,6 +2325,7 @@ nautilus_canvas_view_class_init (NautilusCanvasViewClass *klass) nautilus_view_class->restore_default_zoom_level = nautilus_canvas_view_restore_default_zoom_level; nautilus_view_class->reveal_selection = nautilus_canvas_view_reveal_selection; nautilus_view_class->select_all = nautilus_canvas_view_select_all; + nautilus_view_class->select_first = nautilus_canvas_view_select_first; nautilus_view_class->set_selection = nautilus_canvas_view_set_selection; nautilus_view_class->invert_selection = nautilus_canvas_view_invert_selection; nautilus_view_class->compare_files = compare_files; diff --git a/src/nautilus-list-view.c b/src/nautilus-list-view.c index a0be4f916..cc4426afd 100644 --- a/src/nautilus-list-view.c +++ b/src/nautilus-list-view.c @@ -2410,6 +2410,19 @@ nautilus_list_view_select_all (NautilusView *view) } static void +nautilus_list_view_select_first (NautilusView *view) +{ + GtkTreeSelection *selection; + GtkTreeIter iter; + + if (!gtk_tree_model_get_iter_first (GTK_TREE_MODEL (NAUTILUS_LIST_VIEW (view)->details->model), &iter)) { + return; + } + selection = gtk_tree_view_get_selection (NAUTILUS_LIST_VIEW (view)->details->tree_view); + gtk_tree_selection_select_iter (selection, &iter); +} + +static void column_editor_response_callback (GtkWidget *dialog, int response_id, gpointer user_data) @@ -3223,6 +3236,7 @@ nautilus_list_view_class_init (NautilusListViewClass *class) nautilus_view_class->restore_default_zoom_level = nautilus_list_view_restore_default_zoom_level; nautilus_view_class->reveal_selection = nautilus_list_view_reveal_selection; nautilus_view_class->select_all = nautilus_list_view_select_all; + nautilus_view_class->select_first = nautilus_list_view_select_first; nautilus_view_class->set_selection = nautilus_list_view_set_selection; nautilus_view_class->invert_selection = nautilus_list_view_invert_selection; nautilus_view_class->compare_files = nautilus_list_view_compare_files; diff --git a/src/nautilus-query-editor.c b/src/nautilus-query-editor.c index 157027984..60ce74964 100644 --- a/src/nautilus-query-editor.c +++ b/src/nautilus-query-editor.c @@ -78,6 +78,7 @@ struct NautilusQueryEditorDetails { }; enum { + ACTIVATED, CHANGED, CANCEL, LAST_SIGNAL @@ -297,6 +298,15 @@ nautilus_query_editor_class_init (NautilusQueryEditorClass *class) g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); + signals[ACTIVATED] = + g_signal_new ("activated", + G_TYPE_FROM_CLASS (class), + G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, + G_STRUCT_OFFSET (NautilusQueryEditorClass, activated), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + binding_set = gtk_binding_set_by_class (class); gtk_binding_entry_add_signal (binding_set, GDK_KEY_Escape, 0, "cancel", 0); @@ -315,12 +325,7 @@ nautilus_query_editor_get_location (NautilusQueryEditor *editor) static void entry_activate_cb (GtkWidget *entry, NautilusQueryEditor *editor) { - if (editor->details->typing_timeout_id > 0) { - g_source_remove (editor->details->typing_timeout_id); - editor->details->typing_timeout_id = 0; - } - - nautilus_query_editor_changed_force (editor, TRUE); + g_signal_emit (editor, signals[ACTIVATED], 0); } static gboolean diff --git a/src/nautilus-query-editor.h b/src/nautilus-query-editor.h index d2e30f363..f3941436e 100644 --- a/src/nautilus-query-editor.h +++ b/src/nautilus-query-editor.h @@ -50,10 +50,11 @@ typedef struct NautilusQueryEditor { typedef struct { GtkBoxClass parent_class; - void (* changed) (NautilusQueryEditor *editor, - NautilusQuery *query, - gboolean reload); - void (* cancel) (NautilusQueryEditor *editor); + void (* changed) (NautilusQueryEditor *editor, + NautilusQuery *query, + gboolean reload); + void (* cancel) (NautilusQueryEditor *editor); + void (* activated) (NautilusQueryEditor *editor); } NautilusQueryEditorClass; #include "nautilus-window-slot.h" diff --git a/src/nautilus-view.c b/src/nautilus-view.c index 47c6a7aa5..1a7f091e3 100644 --- a/src/nautilus-view.c +++ b/src/nautilus-view.c @@ -399,6 +399,14 @@ nautilus_view_select_all (NautilusView *view) } static void +nautilus_view_select_first (NautilusView *view) +{ + g_return_if_fail (NAUTILUS_IS_VIEW (view)); + + NAUTILUS_VIEW_CLASS (G_OBJECT_GET_CLASS (view))->select_first (view); +} + +static void nautilus_view_call_set_selection (NautilusView *view, GList *selection) { g_return_if_fail (NAUTILUS_IS_VIEW (view)); @@ -1044,6 +1052,19 @@ nautilus_view_preview_files (NautilusView *view, } void +nautilus_view_activate_selection (NautilusView *view) +{ + GList *selection; + + selection = nautilus_view_get_selection (view); + nautilus_view_activate_files (view, + selection, + 0, + TRUE); + nautilus_file_list_free (selection); +} + +void nautilus_view_activate_files (NautilusView *view, GList *files, NautilusWindowOpenFlags flags, @@ -1083,17 +1104,10 @@ static void action_open_callback (GtkAction *action, gpointer callback_data) { - GList *selection; NautilusView *view; view = NAUTILUS_VIEW (callback_data); - - selection = nautilus_view_get_selection (view); - nautilus_view_activate_files (view, - selection, - 0, - TRUE); - nautilus_file_list_free (selection); + nautilus_view_activate_selection (view); } static void @@ -3114,6 +3128,7 @@ done_loading (NautilusView *view, gboolean all_files_seen) { GList *selection; + gboolean do_reveal = FALSE; if (!view->details->loading) { return; @@ -3132,13 +3147,22 @@ done_loading (NautilusView *view, reset_update_interval (view); selection = view->details->pending_selection; - if (selection != NULL && all_files_seen) { + + if (NAUTILUS_IS_SEARCH_DIRECTORY (view->details->model) + && all_files_seen) { + nautilus_view_select_first (view); + do_reveal = TRUE; + } else if (selection != NULL && all_files_seen) { view->details->pending_selection = NULL; view->details->selection_change_is_due_to_shell = TRUE; nautilus_view_call_set_selection (view, selection); view->details->selection_change_is_due_to_shell = FALSE; + g_list_free_full (selection, g_object_unref); + do_reveal = TRUE; + } + if (do_reveal) { if (NAUTILUS_IS_LIST_VIEW (view)) { /* HACK: We should be able to directly call reveal_selection here, * but at this point the GtkTreeView hasn't allocated the new nodes @@ -3156,7 +3180,6 @@ done_loading (NautilusView *view, nautilus_view_reveal_selection (view); } } - g_list_free_full (selection, g_object_unref); nautilus_view_display_selection_info (view); } diff --git a/src/nautilus-view.h b/src/nautilus-view.h index 9ba3f96d1..ccb98216a 100644 --- a/src/nautilus-view.h +++ b/src/nautilus-view.h @@ -169,6 +169,10 @@ struct NautilusViewClass { * select all of the items in the view */ void (* select_all) (NautilusView *view); + /* select_first is a function pointer that subclasses must override to + * select the first item in the view */ + void (* select_first) (NautilusView *view); + /* set_selection is a function pointer that subclasses must * override to select the specified items (and unselect all * others). The argument is a list of NautilusFiles. */ @@ -379,6 +383,7 @@ void nautilus_view_new_file_with_initial_contents (NautilusView *vi GdkPoint *pos); /* selection handling */ +void nautilus_view_activate_selection (NautilusView *view); int nautilus_view_get_selection_count (NautilusView *view); GList * nautilus_view_get_selection (NautilusView *view); void nautilus_view_set_selection (NautilusView *view, diff --git a/src/nautilus-window-slot.c b/src/nautilus-window-slot.c index f054e3e89..8cd1495ca 100644 --- a/src/nautilus-window-slot.c +++ b/src/nautilus-window-slot.c @@ -141,6 +141,15 @@ query_editor_cancel_callback (NautilusQueryEditor *editor, } static void +query_editor_activated_callback (NautilusQueryEditor *editor, + NautilusWindowSlot *slot) +{ + if (slot->content_view != NULL) { + nautilus_view_activate_selection (slot->content_view); + } +} + +static void query_editor_changed_callback (NautilusQueryEditor *editor, NautilusQuery *query, gboolean reload, @@ -212,6 +221,9 @@ nautilus_window_slot_set_query_editor_visible (NautilusWindowSlot *slot, if (slot->qe_cancel_id == 0) slot->qe_cancel_id = g_signal_connect (slot->query_editor, "cancel", G_CALLBACK (query_editor_cancel_callback), slot); + if (slot->qe_activated_id == 0) + slot->qe_activated_id = g_signal_connect (slot->query_editor, "activated", + G_CALLBACK (query_editor_activated_callback), slot); } else { gtk_widget_hide (GTK_WIDGET (slot->query_editor)); @@ -219,6 +231,8 @@ nautilus_window_slot_set_query_editor_visible (NautilusWindowSlot *slot, slot->qe_changed_id = 0; g_signal_handler_disconnect (slot->query_editor, slot->qe_cancel_id); slot->qe_cancel_id = 0; + g_signal_handler_disconnect (slot->query_editor, slot->qe_activated_id); + slot->qe_activated_id = 0; nautilus_query_editor_set_query (slot->query_editor, NULL); } } diff --git a/src/nautilus-window-slot.h b/src/nautilus-window-slot.h index b72f812e5..8be2f8cdc 100644 --- a/src/nautilus-window-slot.h +++ b/src/nautilus-window-slot.h @@ -92,6 +92,7 @@ struct NautilusWindowSlot { NautilusQueryEditor *query_editor; gulong qe_changed_id; gulong qe_cancel_id; + gulong qe_activated_id; /* New location. */ NautilusLocationChangeType location_change_type; |