diff options
Diffstat (limited to 'trashapplet/src')
-rw-r--r-- | trashapplet/src/trash-empty.c | 47 |
1 files changed, 22 insertions, 25 deletions
diff --git a/trashapplet/src/trash-empty.c b/trashapplet/src/trash-empty.c index 9ad61e5a..3a3bb6fa 100644 --- a/trashapplet/src/trash-empty.c +++ b/trashapplet/src/trash-empty.c @@ -114,20 +114,19 @@ trash_empty_update_dialog (gpointer user_data) return FALSE; } -static gboolean -trash_empty_done (gpointer user_data) +static void +trash_empty_done (GObject *source_object, + GAsyncResult *res, + gpointer user_data) { gtk_widget_destroy (GTK_WIDGET (trash_empty_dialog)); g_assert (trash_empty_dialog == NULL); - - return FALSE; } /* =============== worker thread code begins here =============== */ static void -trash_empty_maybe_schedule_update (GIOSchedulerJob *job, - GFile *file, +trash_empty_maybe_schedule_update (GFile *file, gsize deleted) { if (!trash_empty_update_pending) @@ -138,15 +137,12 @@ trash_empty_maybe_schedule_update (GIOSchedulerJob *job, trash_empty_deleted_files = deleted; trash_empty_update_pending = TRUE; - g_io_scheduler_job_send_to_mainloop_async (job, - trash_empty_update_dialog, - NULL, NULL); + g_main_context_invoke (NULL, trash_empty_update_dialog, NULL); } } static void -trash_empty_delete_contents (GIOSchedulerJob *job, - GCancellable *cancellable, +trash_empty_delete_contents (GCancellable *cancellable, GFile *file, gboolean actually_delete, gsize *deleted) @@ -171,12 +167,12 @@ trash_empty_delete_contents (GIOSchedulerJob *job, child = g_file_get_child (file, g_file_info_get_name (info)); if (g_file_info_get_file_type (info) == G_FILE_TYPE_DIRECTORY) - trash_empty_delete_contents (job, cancellable, child, + trash_empty_delete_contents (cancellable, child, actually_delete, deleted); if (actually_delete) { - trash_empty_maybe_schedule_update (job, child, *deleted); + trash_empty_maybe_schedule_update (child, *deleted); g_file_delete (child, cancellable, NULL); } @@ -193,10 +189,11 @@ trash_empty_delete_contents (GIOSchedulerJob *job, } } -static gboolean -trash_empty_job (GIOSchedulerJob *job, - GCancellable *cancellable, - gpointer user_data) +static void +trash_empty_job (GTask *task, + gpointer source_object, + gpointer user_data, + GCancellable *cancellable) { gsize deleted; GFile *trash; @@ -205,20 +202,16 @@ trash_empty_job (GIOSchedulerJob *job, /* first do a dry run to count the number of files */ deleted = 0; - trash_empty_delete_contents (job, cancellable, trash, FALSE, &deleted); + trash_empty_delete_contents (cancellable, trash, FALSE, &deleted); trash_empty_total_files = deleted; /* now do the real thing */ deleted = 0; - trash_empty_delete_contents (job, cancellable, trash, TRUE, &deleted); + trash_empty_delete_contents (cancellable, trash, TRUE, &deleted); /* done */ g_object_unref (trash); - g_io_scheduler_job_send_to_mainloop_async (job, - trash_empty_done, - NULL, NULL); - - return FALSE; + g_task_return_boolean (task, TRUE); } /* ================ worker thread code ends here ================ */ @@ -234,6 +227,7 @@ trash_empty_start (GtkWidget *parent) }; GCancellable *cancellable; GtkBuilder *builder; + GTask *task; gint i; builder = gtk_builder_new_from_resource (GRESOURCE "trashapplet-empty-progress.ui"); @@ -264,7 +258,10 @@ trash_empty_start (GtkWidget *parent) g_signal_connect_object (trash_empty_dialog, "response", G_CALLBACK (g_cancellable_cancel), cancellable, G_CONNECT_SWAPPED); - g_io_scheduler_push_job (trash_empty_job, NULL, NULL, 0, cancellable); + + task = g_task_new (parent, cancellable, trash_empty_done, NULL); + g_task_run_in_thread (task, trash_empty_job); + g_object_unref (task); g_object_unref (cancellable); gtk_window_set_screen (GTK_WINDOW (trash_empty_dialog), |