예제 #1
0
int
main (int argc, char **argv)
{
	CajaDirectory *directory;
	CajaQuery *query;
	client1 = g_new0 (int, 1);
	client2 = g_new0 (int, 1);

	gtk_init (&argc, &argv);

	query = caja_query_new ();
	caja_query_set_text (query, "richard hult");
	directory = caja_directory_get_by_uri ("x-caja-search://0/");
	caja_search_directory_set_query (CAJA_SEARCH_DIRECTORY (directory), query);
	g_object_unref (query);

	g_signal_connect (directory, "files-added", G_CALLBACK (files_added), NULL);
	g_signal_connect (directory, "files-changed", G_CALLBACK (files_changed), NULL);
	g_signal_connect (directory, "done-loading", G_CALLBACK (done_loading), NULL);
	caja_directory_file_monitor_add (directory, client1, TRUE,
					     CAJA_FILE_ATTRIBUTE_INFO, 
					     NULL, NULL);


	gtk_main ();
	return 0;
}
static void
desktop_monitor_add (CajaDirectory *directory,
                     gconstpointer client,
                     gboolean monitor_hidden_files,
                     gboolean monitor_backup_files,
                     CajaFileAttributes file_attributes,
                     CajaDirectoryCallback callback,
                     gpointer callback_data)
{
    CajaDesktopDirectory *desktop;
    MergedMonitor *monitor;
    GList *merged_callback_list;

    desktop = CAJA_DESKTOP_DIRECTORY (directory);

    /* Map the client to a unique value so this doesn't interfere
     * with direct monitoring of the directory by the same client.
     */
    monitor = g_hash_table_lookup (desktop->details->monitors, client);
    if (monitor != NULL)
    {
        g_assert (monitor->desktop_dir == desktop);
    }
    else
    {
        monitor = g_new0 (MergedMonitor, 1);
        monitor->desktop_dir = desktop;
        g_hash_table_insert (desktop->details->monitors,
                             (gpointer) client, monitor);
    }
    monitor->monitor_hidden_files = monitor_hidden_files;
    monitor->monitor_backup_files = monitor_backup_files;
    monitor->monitor_attributes = file_attributes;

    /* Call through to the real directory add calls. */
    merged_callback_list = NULL;

    /* Call up to real dir */
    caja_directory_file_monitor_add
    (desktop->details->real_directory, monitor,
     monitor_hidden_files, monitor_backup_files,
     file_attributes,
     build_merged_callback_list, &merged_callback_list);

    /* Handle the desktop part */
    merged_callback_list = g_list_concat (merged_callback_list,
                                          caja_file_list_copy (directory->details->file_list));


    if (callback != NULL)
    {
        (* callback) (directory, merged_callback_list, callback_data);
    }
    caja_file_list_free (merged_callback_list);
}