Пример #1
0
void
nemo_window_pane_sync_search_widgets (NemoWindowPane *pane)
{
	NemoWindowSlot *slot;
	NemoDirectory *directory;
	NemoSearchDirectory *search_directory;

	slot = pane->active_slot;
	search_directory = NULL;

	directory = nemo_directory_get (slot->location);
	if (NEMO_IS_SEARCH_DIRECTORY (directory)) {
		search_directory = NEMO_SEARCH_DIRECTORY (directory);
	}

	if (search_directory != NULL) {
		if (!nemo_search_directory_is_saved_search (search_directory)) {
			nemo_toolbar_set_show_search_bar (NEMO_TOOLBAR (pane->tool_bar), TRUE);
			pane->temporary_search_bar = FALSE;
		} else {
			toggle_toolbar_search_button (pane);
		}
	} else {
		search_bar_cancel_callback (pane->search_bar, pane);
	}

	nemo_directory_unref (directory);
}
Пример #2
0
static void
search_bar_activate_callback (NemoSearchBar *bar,
			      NemoWindowPane *pane)
{
	char *uri, *current_uri;
	NemoDirectory *directory;
	NemoSearchDirectory *search_directory;
	NemoQuery *query;
	GFile *location;

	uri = nemo_search_directory_generate_new_uri ();
	location = g_file_new_for_uri (uri);

	directory = nemo_directory_get (location);
	g_assert (NEMO_IS_SEARCH_DIRECTORY (directory));
	search_directory = NEMO_SEARCH_DIRECTORY (directory);
	query = nemo_search_bar_get_query (NEMO_SEARCH_BAR (pane->search_bar));

	if (query != NULL) {
		current_uri = nemo_window_slot_get_location_uri (pane->active_slot);

		nemo_query_set_location (query, current_uri);
		nemo_search_directory_set_query (search_directory, query);

		g_free (current_uri);
		g_object_unref (query);
	}

	nemo_window_slot_go_to (pane->active_slot, location, FALSE);

	nemo_directory_unref (directory);
	g_object_unref (location);	
	g_free (uri);
}
Пример #3
0
static void
search_force_reload (NemoDirectory *directory)
{
	NemoSearchDirectory *search;

	search = NEMO_SEARCH_DIRECTORY (directory);

	if (!search->details->query) {
		return;
	}
	
	search->details->search_finished = FALSE;

	if (!search->details->engine) {
		return;
	}

	/* Remove file monitors */
	reset_file_list (search);
	
	if (search->details->search_running) {
		nemo_search_engine_stop (search->details->engine);
		nemo_search_engine_set_query (search->details->engine, search->details->query);
		nemo_search_engine_start (search->details->engine);
	}
}
Пример #4
0
static void
search_cancel_callback (NemoDirectory *directory,
			NemoDirectoryCallback callback,
			gpointer callback_data)
{
	NemoSearchDirectory *search;
	SearchCallback *search_callback;

	search = NEMO_SEARCH_DIRECTORY (directory);
	search_callback = search_callback_find (search, callback, callback_data);
	
	if (search_callback) {
		search->details->callback_list = g_list_remove (search->details->callback_list, search_callback);
		
		search_callback_destroy (search_callback);
		
		return;
	} 

	/* Check for a pending callback */
	search_callback = search_callback_find_pending (search, callback, callback_data);

	if (search_callback) {
		search->details->pending_callback_list = g_list_remove (search->details->pending_callback_list, search_callback);

		search_callback_destroy (search_callback);

		/* We might need to stop the search engine now */
		start_or_stop_search_engine (search, FALSE);
	}
}
Пример #5
0
static void
search_monitor_add (NemoDirectory *directory,
		    gconstpointer client,
		    gboolean monitor_hidden_files,
		    NemoFileAttributes file_attributes,
		    NemoDirectoryCallback callback,
		    gpointer callback_data)
{
	GList *list;
	SearchMonitor *monitor;
	NemoSearchDirectory *search;
	NemoFile *file;

	search = NEMO_SEARCH_DIRECTORY (directory);

	monitor = g_new0 (SearchMonitor, 1);
	monitor->monitor_hidden_files = monitor_hidden_files;
	monitor->monitor_attributes = file_attributes;
	monitor->client = client;

	search->details->monitor_list = g_list_prepend (search->details->monitor_list, monitor);
	
	if (callback != NULL) {
		(* callback) (directory, search->details->files, callback_data);
	}
	
	for (list = search->details->files; list != NULL; list = list->next) {
		file = list->data;

		/* Add monitors */
		nemo_file_monitor_add (file, monitor, file_attributes);
	}

	start_or_stop_search_engine (search, TRUE);
}
Пример #6
0
static GList *
search_get_file_list (NemoDirectory *directory)
{
	NemoSearchDirectory *search;

	search = NEMO_SEARCH_DIRECTORY (directory);

	return nemo_file_list_copy (search->details->files);
}
Пример #7
0
static gboolean
search_is_not_empty (NemoDirectory *directory)
{
	NemoSearchDirectory *search;

	search = NEMO_SEARCH_DIRECTORY (directory);

	return search->details->files != NULL;
}
Пример #8
0
static gboolean
search_are_all_files_seen (NemoDirectory *directory)
{
	NemoSearchDirectory *search;

	search = NEMO_SEARCH_DIRECTORY (directory);

	return (!search->details->query ||
		search->details->search_finished);
}
Пример #9
0
static gboolean
search_contains_file (NemoDirectory *directory,
		      NemoFile *file)
{
	NemoSearchDirectory *search;

	search = NEMO_SEARCH_DIRECTORY (directory);

	/* FIXME: Maybe put the files in a hash */
	return (g_list_find (search->details->files, file) != NULL);
}
Пример #10
0
static void
search_call_when_ready (NemoDirectory *directory,
			NemoFileAttributes file_attributes,
			gboolean wait_for_file_list,
			NemoDirectoryCallback callback,
			gpointer callback_data)
{
	NemoSearchDirectory *search;
	SearchCallback *search_callback;

	search = NEMO_SEARCH_DIRECTORY (directory);

	search_callback = search_callback_find (search, callback, callback_data);
	if (search_callback == NULL) {
		search_callback = search_callback_find_pending (search, callback, callback_data);
	}
	
	if (search_callback) {
		g_warning ("tried to add a new callback while an old one was pending");
		return;
	}

	search_callback = g_new0 (SearchCallback, 1);
	search_callback->search_directory = search;
	search_callback->callback = callback;
	search_callback->callback_data = callback_data;
	search_callback->wait_for_attributes = file_attributes;
	search_callback->wait_for_file_list = wait_for_file_list;

	if (wait_for_file_list && !search->details->search_finished) {
		/* Add it to the pending callback list, which will be
		 * processed when the directory has finished loading
		 */
		search->details->pending_callback_list = 
			g_list_prepend (search->details->pending_callback_list, search_callback);

		/* We might need to start the search engine */
		start_or_stop_search_engine (search, TRUE);
	} else {
		search_callback->file_list = nemo_file_list_copy (search->details->files);
		search_callback->non_ready_hash = file_list_to_hash_table (search->details->files);

		if (!search_callback->non_ready_hash) {
			/* If there are no ready files, we invoke the callback
			   with an empty list.
			*/
			search_callback_invoke_and_destroy (search_callback);
		} else {
			search->details->callback_list = g_list_prepend (search->details->callback_list, search_callback);
			search_callback_add_file_callbacks (search_callback);
		}
	}
}
Пример #11
0
static void
search_finalize (GObject *object)
{
	NemoSearchDirectory *search;

	search = NEMO_SEARCH_DIRECTORY (object);

	g_free (search->details->saved_search_uri);
	
	g_free (search->details);

	G_OBJECT_CLASS (nemo_search_directory_parent_class)->finalize (object);
}
Пример #12
0
static void
search_dispose (GObject *object)
{
	NemoSearchDirectory *search;
	GList *list;

	search = NEMO_SEARCH_DIRECTORY (object);
	
	/* Remove search monitors */
	if (search->details->monitor_list) {
		for (list = search->details->monitor_list; list != NULL; list = list->next) {
			search_monitor_destroy ((SearchMonitor *)list->data, search);
		}

		g_list_free (search->details->monitor_list);
		search->details->monitor_list = NULL;
	}

	reset_file_list (search);
	
	if (search->details->callback_list) {
		/* Remove callbacks */
		g_list_foreach (search->details->callback_list,
				(GFunc)search_callback_destroy, NULL);
		g_list_free (search->details->callback_list);
		search->details->callback_list = NULL;
	}

	if (search->details->pending_callback_list) {
		g_list_foreach (search->details->pending_callback_list,
				(GFunc)search_callback_destroy, NULL);
		g_list_free (search->details->pending_callback_list);
		search->details->pending_callback_list = NULL;
	}

	if (search->details->query) {
		g_object_unref (search->details->query);
		search->details->query = NULL;
	}

	if (search->details->engine) {
		if (search->details->search_running) {
			nemo_search_engine_stop (search->details->engine);
		}
		
		g_object_unref (search->details->engine);
		search->details->engine = NULL;
	}
	
	G_OBJECT_CLASS (nemo_search_directory_parent_class)->dispose (object);
}
Пример #13
0
static void
sync_search_directory (NemoWindowSlot *slot)
{
	NemoDirectory *directory;
	NemoQuery *query;

	g_assert (NEMO_IS_FILE (slot->viewed_file));

	directory = nemo_directory_get_for_file (slot->viewed_file);
	g_assert (NEMO_IS_SEARCH_DIRECTORY (directory));

	query = nemo_query_editor_get_query (slot->query_editor);
	nemo_search_directory_set_query (NEMO_SEARCH_DIRECTORY (directory),
					     query);
	g_object_unref (query);
	nemo_window_slot_reload (slot);

	nemo_directory_unref (directory);
}
Пример #14
0
static void
update_query_editor (NemoWindowSlot *slot)
{
	NemoDirectory *directory;
	NemoSearchDirectory *search_directory;

	directory = nemo_directory_get (slot->location);

	if (NEMO_IS_SEARCH_DIRECTORY (directory)) {
		NemoQuery *query;
		search_directory = NEMO_SEARCH_DIRECTORY (directory);
		query = nemo_search_directory_get_query (search_directory);
		if (query != NULL) {
			nemo_query_editor_set_query (slot->query_editor,
							 query);
			g_object_unref (query);
		}
	} else {
		nemo_query_editor_set_location (slot->query_editor, slot->location);
	}

	nemo_directory_unref (directory);
}
Пример #15
0
static void
search_monitor_remove (NemoDirectory *directory,
		       gconstpointer client)
{
	NemoSearchDirectory *search;
	SearchMonitor *monitor;
	GList *list;

	search = NEMO_SEARCH_DIRECTORY (directory);

	for (list = search->details->monitor_list; list != NULL; list = list->next) {
		monitor = list->data;

		if (monitor->client == client) {
			search->details->monitor_list = g_list_delete_link (search->details->monitor_list, list);

			search_monitor_destroy (monitor, search);

			break;
		}
	}

	start_or_stop_search_engine (search, FALSE);
}