summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nautilus-files-view.c17
-rw-r--r--src/nautilus-window-slot.c16
2 files changed, 26 insertions, 7 deletions
diff --git a/src/nautilus-files-view.c b/src/nautilus-files-view.c
index e4371fe9f..1a7842583 100644
--- a/src/nautilus-files-view.c
+++ b/src/nautilus-files-view.c
@@ -3092,6 +3092,14 @@ nautilus_files_view_set_location (NautilusView *view,
nautilus_profile_start (NULL);
directory = nautilus_directory_get (location);
load_directory (NAUTILUS_FILES_VIEW (view), directory);
+ /* In case we want to load a previous search, sync the query */
+ if (NAUTILUS_IS_SEARCH_DIRECTORY (directory)) {
+ NautilusQuery *previous_query;
+
+ previous_query = nautilus_search_directory_get_query (NAUTILUS_SEARCH_DIRECTORY (directory));
+ nautilus_view_set_search_query (view, previous_query);
+ g_object_unref (previous_query);
+ }
nautilus_directory_unref (directory);
nautilus_profile_end (NULL);
}
@@ -7754,7 +7762,14 @@ nautilus_files_view_set_search_query (NautilusView *view,
* Reuse the search directory and reload it.
*/
nautilus_search_directory_set_query (NAUTILUS_SEARCH_DIRECTORY (files_view->details->model), query);
- nautilus_view_set_location (view, location);
+ /* It's important to use load_directory instead of set_location,
+ * since the location is already correct, however we need
+ * to reload the directory with the new query set. But
+ * set_location has a check for wheter the location is a
+ * search directory, so setting the location to a search
+ * directory when is already serching will enter a loop.
+ */
+ load_directory (files_view, nautilus_directory_ref (files_view->details->model));
} else {
NautilusDirectory *directory;
gchar *uri;
diff --git a/src/nautilus-window-slot.c b/src/nautilus-window-slot.c
index b10de0034..f775a14f3 100644
--- a/src/nautilus-window-slot.c
+++ b/src/nautilus-window-slot.c
@@ -249,14 +249,13 @@ nautilus_window_slot_content_view_matches (NautilusWindowSlot *slot,
}
static void
-check_search_visible (NautilusWindowSlot *slot)
+update_search_visible (NautilusWindowSlot *slot)
{
NautilusQuery *query;
NautilusView *view;
gchar *text;
GAction *action;
- query = nautilus_query_editor_get_query (slot->details->query_editor);
action = g_action_map_lookup_action (G_ACTION_MAP (slot->details->slot_action_group),
"search-visible");
/* Don't allow search on desktop */
@@ -265,10 +264,15 @@ check_search_visible (NautilusWindowSlot *slot)
view = nautilus_window_slot_get_current_view (slot);
/* If we changed location just to another search location, for example,
- * when changing the query, just keep the search visible */
- if (nautilus_view_is_searching (view))
+ * when changing the query, just keep the search visible.
+ * Make sure the search is visible though, since we could be returning
+ * from a previous search location when using the history */
+ if (nautilus_view_is_searching (view)) {
+ nautilus_window_slot_set_search_visible (slot, TRUE);
return;
+ }
+ query = nautilus_query_editor_get_query (slot->details->query_editor);
if (query) {
text = nautilus_query_get_text (query);
/* If the view is not searching, but search is visible, and the
@@ -295,10 +299,10 @@ nautilus_window_slot_sync_actions (NautilusWindowSlot *slot)
return;
}
- /* Check if we need to close the search or not after changing the location.
+ /* Check if we need to close the search or show search after changing the location.
* Needs to be done after the change has been done, if not, a loop happens,
* because setting the search enabled or not actually opens a location */
- check_search_visible (slot);
+ update_search_visible (slot);
/* Files view mode */
action = g_action_map_lookup_action (G_ACTION_MAP (slot->details->slot_action_group), "files-view-mode");