예제 #1
0
static void
_delete_trash_file (GFile *file,
                    gboolean del_file,
                    gboolean del_children)
{
    GFileInfo *info;
    GFile *child;
    GFileEnumerator *enumerator;

    if (del_children)
    {
        enumerator = g_file_enumerate_children (file,
                                                G_FILE_ATTRIBUTE_STANDARD_NAME ","
                                                G_FILE_ATTRIBUTE_STANDARD_TYPE,
                                                G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
                                                NULL, NULL);
        if (enumerator)
        {
            while ((info = g_file_enumerator_next_file (enumerator, NULL, NULL)) != NULL)
            {
                child = g_file_get_child (file, g_file_info_get_name (info));
                _delete_trash_file (child, TRUE,
                                    g_file_info_get_file_type (info) == G_FILE_TYPE_DIRECTORY);
                g_object_unref (child);
                g_object_unref (info);
            }
            g_file_enumerator_close (enumerator, NULL, NULL);
            g_object_unref (enumerator);
        }
    }
    if (del_file)
    {
        g_file_delete (file, NULL, NULL);
    }
}
예제 #2
0
static
void _empty_trash_job(gpointer data, gpointer user_data)
{
    (void)user_data;
    GList* trash_list = (GList*)data;

    GList* l;
    for (l = trash_list; l != NULL; l = l->next)
        _delete_trash_file (l->data, FALSE, TRUE);

    g_list_free_full(trash_list, g_object_unref);
}
예제 #3
0
static gboolean
_empty_trash_job (GIOSchedulerJob *io_job,
	          GCancellable* cancellable,
		  gpointer user_data)
{
    GList* trash_list = (GList*) user_data;

    GList* l;
    for (l = trash_list; l != NULL; l = l->next)
	    _delete_trash_file (l->data, FALSE, TRUE);

    g_io_scheduler_job_send_to_mainloop_async (io_job,
	                                       _empty_trash_job_done,
					       user_data,
					       NULL);
    return FALSE;
}