summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilliam Jon McCann <jmccann@redhat.com>2012-08-07 12:45:44 -0400
committerWilliam Jon McCann <jmccann@redhat.com>2012-08-07 15:53:37 -0400
commit50711e28ba4d4c971a812a0bdef0c30516141f4e (patch)
treeefde2d8357b6f31bc1f3ca4fec1892324941c676
parentfbc739e05e759b292a8dcaa8bc675ceda7b573f9 (diff)
downloadnautilus-50711e28ba4d4c971a812a0bdef0c30516141f4e.tar.gz
Select first item in search results by default
-rw-r--r--libnautilus-private/nautilus-canvas-container.c25
-rw-r--r--libnautilus-private/nautilus-canvas-container.h3
-rw-r--r--src/nautilus-canvas-view.c12
-rw-r--r--src/nautilus-list-view.c14
-rw-r--r--src/nautilus-query-editor.c17
-rw-r--r--src/nautilus-query-editor.h9
-rw-r--r--src/nautilus-view.c43
-rw-r--r--src/nautilus-view.h5
-rw-r--r--src/nautilus-window-slot.c14
-rw-r--r--src/nautilus-window-slot.h1
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;