static void sync_search_directory (NautilusWindowSlot *slot) { NautilusDirectory *directory; NautilusQuery *query; gchar *text; GFile *location; g_assert (NAUTILUS_IS_FILE (slot->viewed_file)); directory = nautilus_directory_get_for_file (slot->viewed_file); g_assert (NAUTILUS_IS_SEARCH_DIRECTORY (directory)); query = nautilus_query_editor_get_query (slot->query_editor); text = nautilus_query_get_text (query); if (!strlen (text)) { location = nautilus_query_editor_get_location (slot->query_editor); slot->load_with_search = TRUE; nautilus_window_slot_open_location (slot, location, 0); g_object_unref (location); } else { nautilus_search_directory_set_query (NAUTILUS_SEARCH_DIRECTORY (directory), query); nautilus_window_slot_reload (slot); } g_free (text); g_object_unref (query); nautilus_directory_unref (directory); }
static void real_update_query_editor (NautilusWindowSlot *slot) { GtkWidget *query_editor; NautilusQuery *query; NautilusDirectory *directory; NautilusSearchDirectory *search_directory; directory = nautilus_directory_get (slot->location); if (NAUTILUS_IS_SEARCH_DIRECTORY (directory)) { search_directory = NAUTILUS_SEARCH_DIRECTORY (directory); query_editor = nautilus_query_editor_new (nautilus_search_directory_is_saved_search (search_directory), nautilus_search_directory_is_indexed (search_directory)); slot->query_editor = NAUTILUS_QUERY_EDITOR (query_editor); nautilus_window_slot_add_extra_location_widget (slot, query_editor); gtk_widget_show (query_editor); g_signal_connect_object (query_editor, "changed", G_CALLBACK (query_editor_changed_callback), slot, 0); query = nautilus_search_directory_get_query (search_directory); if (query != NULL) { nautilus_query_editor_set_query (NAUTILUS_QUERY_EDITOR (query_editor), query); g_object_unref (query); } else { nautilus_query_editor_set_default_query (NAUTILUS_QUERY_EDITOR (query_editor)); } } nautilus_directory_unref (directory); }
static void real_update_query_editor (NautilusWindowSlot *slot) { NautilusDirectory *directory; NautilusSearchDirectory *search_directory; NautilusQuery *query; GtkWidget *query_editor; g_assert (slot->pane->window != NULL); query_editor = NULL; directory = nautilus_directory_get (slot->location); if (NAUTILUS_IS_SEARCH_DIRECTORY (directory)) { search_directory = NAUTILUS_SEARCH_DIRECTORY (directory); if (nautilus_search_directory_is_saved_search (search_directory)) { query_editor = nautilus_query_editor_new (TRUE, nautilus_search_directory_is_indexed (search_directory)); } else { query_editor = nautilus_query_editor_new_with_bar (FALSE, nautilus_search_directory_is_indexed (search_directory), slot->pane->window->details->active_pane->active_slot == slot, NAUTILUS_SEARCH_BAR (slot->pane->search_bar), slot); } } slot->query_editor = NAUTILUS_QUERY_EDITOR (query_editor); if (query_editor != NULL) { g_signal_connect_object (query_editor, "changed", G_CALLBACK (query_editor_changed_callback), slot, 0); query = nautilus_search_directory_get_query (search_directory); if (query != NULL) { nautilus_query_editor_set_query (NAUTILUS_QUERY_EDITOR (query_editor), query); g_object_unref (query); } else { nautilus_query_editor_set_default_query (NAUTILUS_QUERY_EDITOR (query_editor)); } nautilus_window_slot_add_extra_location_widget (slot, query_editor); gtk_widget_show (query_editor); nautilus_query_editor_grab_focus (NAUTILUS_QUERY_EDITOR (query_editor)); } nautilus_directory_unref (directory); }
static void create_new_search (NautilusWindowSlot *slot) { char *uri; NautilusDirectory *directory; GFile *location; uri = nautilus_search_directory_generate_new_uri (); location = g_file_new_for_uri (uri); directory = nautilus_directory_get (location); g_assert (NAUTILUS_IS_SEARCH_DIRECTORY (directory)); nautilus_window_slot_open_location_full (slot, location, 0, NULL, sync_search_location_cb, slot); nautilus_directory_unref (directory); g_object_unref (location); g_free (uri); }
static void query_editor_changed_callback (NautilusSearchBar *bar, NautilusQuery *query, gboolean reload, NautilusWindowSlot *slot) { NautilusDirectory *directory; directory = nautilus_directory_get_for_file (slot->viewed_file); g_assert (NAUTILUS_IS_SEARCH_DIRECTORY (directory)); nautilus_search_directory_set_query (NAUTILUS_SEARCH_DIRECTORY (directory), query); if (reload) { nautilus_window_slot_reload (slot); } nautilus_directory_unref (directory); }
static void update_query_editor (NautilusWindowSlot *slot) { NautilusDirectory *directory; NautilusSearchDirectory *search_directory; directory = nautilus_directory_get (slot->location); if (NAUTILUS_IS_SEARCH_DIRECTORY (directory)) { NautilusQuery *query; search_directory = NAUTILUS_SEARCH_DIRECTORY (directory); query = nautilus_search_directory_get_query (search_directory); if (query != NULL) { nautilus_query_editor_set_query (slot->query_editor, query); g_object_unref (query); } } else { nautilus_query_editor_set_location (slot->query_editor, slot->location); } nautilus_directory_unref (directory); }
static void query_editor_changed_callback (NautilusQueryEditor *editor, NautilusQuery *query, gboolean reload, NautilusWindowSlot *slot) { NautilusDirectory *directory; g_assert (NAUTILUS_IS_FILE (slot->viewed_file)); directory = nautilus_directory_get_for_file (slot->viewed_file); if (!NAUTILUS_IS_SEARCH_DIRECTORY (directory)) { /* this is the first change from the query editor. we ask for a location change to the search directory, indicate the directory needs to be sync'd with the current query. */ create_new_search (slot); } else { sync_search_directory (slot); } nautilus_directory_unref (directory); }