summaryrefslogtreecommitdiff
path: root/libnautilus-private
diff options
context:
space:
mode:
Diffstat (limited to 'libnautilus-private')
-rw-r--r--libnautilus-private/nautilus-file-operations.c357
1 files changed, 157 insertions, 200 deletions
diff --git a/libnautilus-private/nautilus-file-operations.c b/libnautilus-private/nautilus-file-operations.c
index 87c185d52..74ae1941a 100644
--- a/libnautilus-private/nautilus-file-operations.c
+++ b/libnautilus-private/nautilus-file-operations.c
@@ -67,7 +67,6 @@
/* TODO: TESTING!!! */
typedef struct {
- GIOSchedulerJob *io_job;
GTimer *time;
GtkWindow *parent_window;
int screen_num;
@@ -215,9 +214,14 @@ static void scan_sources (GList *files,
OpKind kind);
-static gboolean empty_trash_job (GIOSchedulerJob *io_job,
- GCancellable *cancellable,
- gpointer user_data);
+static void empty_trash_thread_func (GTask *task,
+ gpointer source_object,
+ gpointer task_data,
+ GCancellable *cancellable);
+
+static void empty_trash_task_done (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data);
static char * query_fs_type (GFile *file,
GCancellable *cancellable);
@@ -2125,8 +2129,10 @@ trash_files (CommonJob *job,
}
}
-static gboolean
-delete_job_done (gpointer user_data)
+static void
+delete_task_done (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
{
DeleteJob *job;
GHashTable *debuting_uris;
@@ -2144,16 +2150,15 @@ delete_job_done (gpointer user_data)
finalize_common ((CommonJob *)job);
nautilus_file_changes_consume_changes (TRUE);
-
- return FALSE;
}
-static gboolean
-delete_job (GIOSchedulerJob *io_job,
- GCancellable *cancellable,
- gpointer user_data)
+static void
+delete_task_thread_func (GTask *task,
+ gpointer source_object,
+ gpointer task_data,
+ GCancellable *cancellable)
{
- DeleteJob *job = user_data;
+ DeleteJob *job = task_data;
GList *to_trash_files;
GList *to_delete_files;
GList *l;
@@ -2165,7 +2170,6 @@ delete_job (GIOSchedulerJob *io_job,
int files_skipped;
common = (CommonJob *)job;
- common->io_job = io_job;
nautilus_progress_info_start (job->common.progress);
@@ -2223,13 +2227,6 @@ delete_job (GIOSchedulerJob *io_job,
/* User has skipped all files, report user cancel */
job->user_cancel = TRUE;
}
-
- g_io_scheduler_job_send_to_mainloop_async (io_job,
- delete_job_done,
- job,
- NULL);
-
- return FALSE;
}
static void
@@ -2239,6 +2236,7 @@ trash_or_delete_internal (GList *files,
NautilusDeleteCallback done_callback,
gpointer done_callback_data)
{
+ GTask *task;
DeleteJob *job;
/* TODO: special case desktop icon link files ... */
@@ -2260,11 +2258,10 @@ trash_or_delete_internal (GList *files,
job->common.undo_info = nautilus_file_undo_info_trash_new (g_list_length (files));
}
- g_io_scheduler_push_job (delete_job,
- job,
- NULL,
- 0,
- NULL);
+ task = g_task_new (NULL, NULL, delete_task_done, job);
+ g_task_set_task_data (task, job, NULL);
+ g_task_run_in_thread (task, delete_task_thread_func);
+ g_object_unref (task);
}
void
@@ -2566,6 +2563,7 @@ nautilus_file_operations_unmount_mount_full (GtkWindow *par
response = prompt_empty_trash (parent_window);
if (response == GTK_RESPONSE_ACCEPT) {
+ GTask *task;
EmptyTrashJob *job;
job = op_job_new (EmptyTrashJob, parent_window);
@@ -2573,11 +2571,11 @@ nautilus_file_operations_unmount_mount_full (GtkWindow *par
job->trash_dirs = get_trash_dirs_for_mount (mount);
job->done_callback = empty_trash_for_unmount_done;
job->done_callback_data = data;
- g_io_scheduler_push_job (empty_trash_job,
- job,
- NULL,
- 0,
- NULL);
+
+ task = g_task_new (NULL, NULL, empty_trash_task_done, job);
+ g_task_set_task_data (task, job, NULL);
+ g_task_run_in_thread (task, empty_trash_thread_func);
+ g_object_unref (task);
return;
} else if (response == GTK_RESPONSE_CANCEL) {
if (callback) {
@@ -5012,8 +5010,10 @@ copy_files (CopyMoveJob *job,
g_free (dest_fs_type);
}
-static gboolean
-copy_job_done (gpointer user_data)
+static void
+copy_task_done (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
{
CopyMoveJob *job;
@@ -5040,13 +5040,13 @@ copy_job_done (gpointer user_data)
finalize_common ((CommonJob *)job);
nautilus_file_changes_consume_changes (TRUE);
- return FALSE;
}
-static gboolean
-copy_job (GIOSchedulerJob *io_job,
- GCancellable *cancellable,
- gpointer user_data)
+static void
+copy_task_thread_func (GTask *task,
+ gpointer source_object,
+ gpointer task_data,
+ GCancellable *cancellable)
{
CopyMoveJob *job;
CommonJob *common;
@@ -5055,9 +5055,8 @@ copy_job (GIOSchedulerJob *io_job,
char *dest_fs_id;
GFile *dest;
- job = user_data;
+ job = task_data;
common = &job->common;
- common->io_job = io_job;
dest_fs_id = NULL;
@@ -5099,13 +5098,6 @@ copy_job (GIOSchedulerJob *io_job,
aborted:
g_free (dest_fs_id);
-
- g_io_scheduler_job_send_to_mainloop_async (io_job,
- copy_job_done,
- job,
- NULL);
-
- return FALSE;
}
void
@@ -5117,6 +5109,7 @@ nautilus_file_operations_copy_file (GFile *source_file,
NautilusCopyCallback done_callback,
gpointer done_callback_data)
{
+ GTask *task;
CopyMoveJob *job;
job = op_job_new (CopyMoveJob, parent_window);
@@ -5141,11 +5134,10 @@ nautilus_file_operations_copy_file (GFile *source_file,
inhibit_power_manager ((CommonJob *)job, _("Copying Files"));
- g_io_scheduler_push_job (copy_job,
- job,
- NULL, /* destroy notify */
- 0,
- job->common.cancellable);
+ task = g_task_new (NULL, job->common.cancellable, copy_task_done, job);
+ g_task_set_task_data (task, job, NULL);
+ g_task_run_in_thread (task, copy_task_thread_func);
+ g_object_unref (task);
}
void
@@ -5156,6 +5148,7 @@ nautilus_file_operations_copy (GList *files,
NautilusCopyCallback done_callback,
gpointer done_callback_data)
{
+ GTask *task;
CopyMoveJob *job;
job = op_job_new (CopyMoveJob, parent_window);
@@ -5189,11 +5182,10 @@ nautilus_file_operations_copy (GList *files,
g_object_unref (src_dir);
}
- g_io_scheduler_push_job (copy_job,
- job,
- NULL, /* destroy notify */
- 0,
- job->common.cancellable);
+ task = g_task_new (NULL, job->common.cancellable, copy_task_done, job);
+ g_task_set_task_data (task, job, NULL);
+ g_task_run_in_thread (task, copy_task_thread_func);
+ g_object_unref (task);
}
static void
@@ -5584,8 +5576,10 @@ common = &job->common;
}
-static gboolean
-move_job_done (gpointer user_data)
+static void
+move_task_done (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
{
CopyMoveJob *job;
@@ -5604,13 +5598,13 @@ move_job_done (gpointer user_data)
finalize_common ((CommonJob *)job);
nautilus_file_changes_consume_changes (TRUE);
- return FALSE;
}
-static gboolean
-move_job (GIOSchedulerJob *io_job,
- GCancellable *cancellable,
- gpointer user_data)
+static void
+move_task_thread_func (GTask *task,
+ gpointer source_object,
+ gpointer task_data,
+ GCancellable *cancellable)
{
CopyMoveJob *job;
CommonJob *common;
@@ -5621,9 +5615,8 @@ move_job (GIOSchedulerJob *io_job,
char *dest_fs_type;
GList *fallback_files;
- job = user_data;
+ job = task_data;
common = &job->common;
- common->io_job = io_job;
dest_fs_id = NULL;
dest_fs_type = NULL;
@@ -5680,13 +5673,6 @@ move_job (GIOSchedulerJob *io_job,
g_free (dest_fs_id);
g_free (dest_fs_type);
-
- g_io_scheduler_job_send_to_mainloop (io_job,
- move_job_done,
- job,
- NULL);
-
- return FALSE;
}
void
@@ -5697,6 +5683,7 @@ nautilus_file_operations_move (GList *files,
NautilusCopyCallback done_callback,
gpointer done_callback_data)
{
+ GTask *task;
CopyMoveJob *job;
job = op_job_new (CopyMoveJob, parent_window);
@@ -5737,11 +5724,10 @@ nautilus_file_operations_move (GList *files,
g_object_unref (src_dir);
}
- g_io_scheduler_push_job (move_job,
- job,
- NULL, /* destroy notify */
- 0,
- job->common.cancellable);
+ task = g_task_new (NULL, job->common.cancellable, move_task_done, job);
+ g_task_set_task_data (task, job, NULL);
+ g_task_run_in_thread (task, move_task_thread_func);
+ g_object_unref (task);
}
static void
@@ -5930,8 +5916,10 @@ link_file (CopyMoveJob *job,
g_object_unref (dest);
}
-static gboolean
-link_job_done (gpointer user_data)
+static void
+link_task_done (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
{
CopyMoveJob *job;
@@ -5950,13 +5938,13 @@ link_job_done (gpointer user_data)
finalize_common ((CommonJob *)job);
nautilus_file_changes_consume_changes (TRUE);
- return FALSE;
}
-static gboolean
-link_job (GIOSchedulerJob *io_job,
- GCancellable *cancellable,
- gpointer user_data)
+static void
+link_task_thread_func (GTask *task,
+ gpointer source_object,
+ gpointer task_data,
+ GCancellable *cancellable)
{
CopyMoveJob *job;
CommonJob *common;
@@ -5967,9 +5955,8 @@ link_job (GIOSchedulerJob *io_job,
int i;
GList *l;
- job = user_data;
+ job = task_data;
common = &job->common;
- common->io_job = io_job;
dest_fs_type = NULL;
@@ -6010,13 +5997,6 @@ link_job (GIOSchedulerJob *io_job,
aborted:
g_free (dest_fs_type);
-
- g_io_scheduler_job_send_to_mainloop (io_job,
- link_job_done,
- job,
- NULL);
-
- return FALSE;
}
void
@@ -6027,6 +6007,7 @@ nautilus_file_operations_link (GList *files,
NautilusCopyCallback done_callback,
gpointer done_callback_data)
{
+ GTask *task;
CopyMoveJob *job;
job = op_job_new (CopyMoveJob, parent_window);
@@ -6056,11 +6037,10 @@ nautilus_file_operations_link (GList *files,
g_object_unref (src_dir);
}
- g_io_scheduler_push_job (link_job,
- job,
- NULL, /* destroy notify */
- 0,
- job->common.cancellable);
+ task = g_task_new (NULL, job->common.cancellable, link_task_done, job);
+ g_task_set_task_data (task, job, NULL);
+ g_task_run_in_thread (task, link_task_thread_func);
+ g_object_unref (task);
}
@@ -6071,6 +6051,7 @@ nautilus_file_operations_duplicate (GList *files,
NautilusCopyCallback done_callback,
gpointer done_callback_data)
{
+ GTask *task;
CopyMoveJob *job;
GFile *parent;
@@ -6105,17 +6086,18 @@ nautilus_file_operations_duplicate (GList *files,
g_object_unref (src_dir);
}
- g_io_scheduler_push_job (copy_job,
- job,
- NULL, /* destroy notify */
- 0,
- job->common.cancellable);
+ task = g_task_new (NULL, job->common.cancellable, copy_task_done, job);
+ g_task_set_task_data (task, job, NULL);
+ g_task_run_in_thread (task, copy_task_thread_func);
+ g_object_unref (task);
- g_object_unref (parent);
+ g_object_unref (parent);
}
-static gboolean
-set_permissions_job_done (gpointer user_data)
+static void
+set_permissions_task_done (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
{
SetPermissionsJob *job;
@@ -6129,7 +6111,6 @@ set_permissions_job_done (gpointer user_data)
}
finalize_common ((CommonJob *)job);
- return FALSE;
}
static void
@@ -6218,16 +6199,16 @@ set_permissions_file (SetPermissionsJob *job,
}
-static gboolean
-set_permissions_job (GIOSchedulerJob *io_job,
- GCancellable *cancellable,
- gpointer user_data)
+static void
+set_permissions_thread_func (GTask *task,
+ gpointer source_object,
+ gpointer task_data,
+ GCancellable *cancellable)
{
- SetPermissionsJob *job = user_data;
+ SetPermissionsJob *job = task_data;
CommonJob *common;
common = (CommonJob *)job;
- common->io_job = io_job;
nautilus_progress_info_set_status (common->progress,
_("Setting permissions"));
@@ -6235,13 +6216,6 @@ set_permissions_job (GIOSchedulerJob *io_job,
nautilus_progress_info_start (job->common.progress);
set_permissions_file (job, job->file, NULL);
-
- g_io_scheduler_job_send_to_mainloop_async (io_job,
- set_permissions_job_done,
- job,
- NULL);
-
- return FALSE;
}
@@ -6255,6 +6229,7 @@ nautilus_file_set_permissions_recursive (const char *directory,
NautilusOpCallback callback,
gpointer callback_data)
{
+ GTask *task;
SetPermissionsJob *job;
job = op_job_new (SetPermissionsJob, NULL);
@@ -6273,11 +6248,10 @@ nautilus_file_set_permissions_recursive (const char *directory,
dir_permissions, dir_mask);
}
- g_io_scheduler_push_job (set_permissions_job,
- job,
- NULL,
- 0,
- NULL);
+ task = g_task_new (NULL, NULL, set_permissions_task_done, job);
+ g_task_set_task_data (task, job, NULL);
+ g_task_run_in_thread (task, set_permissions_thread_func);
+ g_object_unref (task);
}
static GList *
@@ -6414,8 +6388,10 @@ nautilus_file_operations_copy_move (const GList *item_uris,
}
}
-static gboolean
-create_job_done (gpointer user_data)
+static void
+create_task_done (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
{
CreateJob *job;
@@ -6439,13 +6415,13 @@ create_job_done (gpointer user_data)
finalize_common ((CommonJob *)job);
nautilus_file_changes_consume_changes (TRUE);
- return FALSE;
}
-static gboolean
-create_job (GIOSchedulerJob *io_job,
- GCancellable *cancellable,
- gpointer user_data)
+static void
+create_task_thread_func (GTask *task,
+ gpointer source_object,
+ gpointer task_data,
+ GCancellable *cancellable)
{
CreateJob *job;
CommonJob *common;
@@ -6466,9 +6442,8 @@ create_job (GIOSchedulerJob *io_job,
gboolean handled_invalid_filename;
int max_length, offset;
- job = user_data;
+ job = task_data;
common = &job->common;
- common->io_job = io_job;
nautilus_progress_info_start (job->common.progress);
@@ -6756,12 +6731,6 @@ create_job (GIOSchedulerJob *io_job,
}
g_free (filename);
g_free (dest_fs_type);
- g_io_scheduler_job_send_to_mainloop_async (io_job,
- create_job_done,
- job,
- NULL);
-
- return FALSE;
}
void
@@ -6772,6 +6741,7 @@ nautilus_file_operations_new_folder (GtkWidget *parent_view,
NautilusCreateCallback done_callback,
gpointer done_callback_data)
{
+ GTask *task;
CreateJob *job;
GtkWindow *parent_window;
@@ -6795,11 +6765,10 @@ nautilus_file_operations_new_folder (GtkWidget *parent_view,
job->common.undo_info = nautilus_file_undo_info_create_new (NAUTILUS_FILE_UNDO_OP_CREATE_FOLDER);
}
- g_io_scheduler_push_job (create_job,
- job,
- NULL, /* destroy notify */
- 0,
- job->common.cancellable);
+ task = g_task_new (NULL, job->common.cancellable, create_task_done, job);
+ g_task_set_task_data (task, job, NULL);
+ g_task_run_in_thread (task, create_task_thread_func);
+ g_object_unref (task);
}
void
@@ -6811,6 +6780,7 @@ nautilus_file_operations_new_file_from_template (GtkWidget *parent_view,
NautilusCreateCallback done_callback,
gpointer done_callback_data)
{
+ GTask *task;
CreateJob *job;
GtkWindow *parent_window;
@@ -6837,11 +6807,10 @@ nautilus_file_operations_new_file_from_template (GtkWidget *parent_view,
job->common.undo_info = nautilus_file_undo_info_create_new (NAUTILUS_FILE_UNDO_OP_CREATE_FILE_FROM_TEMPLATE);
}
- g_io_scheduler_push_job (create_job,
- job,
- NULL, /* destroy notify */
- 0,
- job->common.cancellable);
+ task = g_task_new (NULL, job->common.cancellable, create_task_done, job);
+ g_task_set_task_data (task, job, NULL);
+ g_task_run_in_thread (task, create_task_thread_func);
+ g_object_unref (task);
}
void
@@ -6854,6 +6823,7 @@ nautilus_file_operations_new_file (GtkWidget *parent_view,
NautilusCreateCallback done_callback,
gpointer done_callback_data)
{
+ GTask *task;
CreateJob *job;
GtkWindow *parent_window;
@@ -6878,11 +6848,10 @@ nautilus_file_operations_new_file (GtkWidget *parent_view,
job->common.undo_info = nautilus_file_undo_info_create_new (NAUTILUS_FILE_UNDO_OP_CREATE_EMPTY_FILE);
}
- g_io_scheduler_push_job (create_job,
- job,
- NULL, /* destroy notify */
- 0,
- job->common.cancellable);
+ task = g_task_new (NULL, job->common.cancellable, create_task_done, job);
+ g_task_set_task_data (task, job, NULL);
+ g_task_run_in_thread (task, create_task_thread_func);
+ g_object_unref (task);
}
@@ -6928,8 +6897,10 @@ delete_trash_file (CommonJob *job,
}
}
-static gboolean
-empty_trash_job_done (gpointer user_data)
+static void
+empty_trash_task_done (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
{
EmptyTrashJob *job;
@@ -6943,21 +6914,20 @@ empty_trash_job_done (gpointer user_data)
}
finalize_common ((CommonJob *)job);
- return FALSE;
}
-static gboolean
-empty_trash_job (GIOSchedulerJob *io_job,
- GCancellable *cancellable,
- gpointer user_data)
+static void
+empty_trash_thread_func (GTask *task,
+ gpointer source_object,
+ gpointer task_data,
+ GCancellable *cancellable)
{
- EmptyTrashJob *job = user_data;
+ EmptyTrashJob *job = task_data;
CommonJob *common;
GList *l;
gboolean confirmed;
common = (CommonJob *)job;
- common->io_job = io_job;
nautilus_progress_info_start (job->common.progress);
@@ -6973,18 +6943,12 @@ empty_trash_job (GIOSchedulerJob *io_job,
delete_trash_file (common, l->data, FALSE, TRUE);
}
}
-
- g_io_scheduler_job_send_to_mainloop_async (io_job,
- empty_trash_job_done,
- job,
- NULL);
-
- return FALSE;
}
void
nautilus_file_operations_empty_trash (GtkWidget *parent_view)
{
+ GTask *task;
EmptyTrashJob *job;
GtkWindow *parent_window;
@@ -6999,16 +6963,17 @@ nautilus_file_operations_empty_trash (GtkWidget *parent_view)
job->should_confirm = TRUE;
inhibit_power_manager ((CommonJob *)job, _("Emptying Trash"));
-
- g_io_scheduler_push_job (empty_trash_job,
- job,
- NULL,
- 0,
- NULL);
+
+ task = g_task_new (NULL, NULL, empty_trash_task_done, job);
+ g_task_set_task_data (task, job, NULL);
+ g_task_run_in_thread (task, empty_trash_thread_func);
+ g_object_unref (task);
}
-static gboolean
-mark_trusted_job_done (gpointer user_data)
+static void
+mark_trusted_task_done (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
{
MarkTrustedJob *job = user_data;
@@ -7020,7 +6985,6 @@ mark_trusted_job_done (gpointer user_data)
}
finalize_common ((CommonJob *)job);
- return FALSE;
}
#define TRUSTED_SHEBANG "#!/usr/bin/env xdg-open\n"
@@ -7183,16 +7147,16 @@ mark_desktop_file_trusted (CommonJob *common,
;
}
-static gboolean
-mark_trusted_job (GIOSchedulerJob *io_job,
- GCancellable *cancellable,
- gpointer user_data)
+static void
+mark_trusted_task_thread_func (GTask *task,
+ gpointer source_object,
+ gpointer task_data,
+ GCancellable *cancellable)
{
- MarkTrustedJob *job = user_data;
+ MarkTrustedJob *job = task_data;
CommonJob *common;
common = (CommonJob *)job;
- common->io_job = io_job;
nautilus_progress_info_start (job->common.progress);
@@ -7200,13 +7164,6 @@ mark_trusted_job (GIOSchedulerJob *io_job,
cancellable,
job->file,
job->interactive);
-
- g_io_scheduler_job_send_to_mainloop_async (io_job,
- mark_trusted_job_done,
- job,
- NULL);
-
- return FALSE;
}
void
@@ -7216,6 +7173,7 @@ nautilus_file_mark_desktop_file_trusted (GFile *file,
NautilusOpCallback done_callback,
gpointer done_callback_data)
{
+ GTask *task;
MarkTrustedJob *job;
job = op_job_new (MarkTrustedJob, parent_window);
@@ -7223,12 +7181,11 @@ nautilus_file_mark_desktop_file_trusted (GFile *file,
job->interactive = interactive;
job->done_callback = done_callback;
job->done_callback_data = done_callback_data;
-
- g_io_scheduler_push_job (mark_trusted_job,
- job,
- NULL,
- 0,
- NULL);
+
+ task = g_task_new (NULL, NULL, mark_trusted_task_done, job);
+ g_task_set_task_data (task, job, NULL);
+ g_task_run_in_thread (task, mark_trusted_task_thread_func);
+ g_object_unref (task);
}
#if !defined (NAUTILUS_OMIT_SELF_CHECK)