summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCosimo Cecchi <cosimoc@gnome.org>2008-04-27 19:28:57 +0000
committerCosimo Cecchi <cosimoc@src.gnome.org>2008-04-27 19:28:57 +0000
commit95c4973f81dd9d27121a1f3b9e3679fa00ae640f (patch)
treea31f007d6ae67b9bfda4deb3d5e0a14d71414558
parentefaaf7d00554a38a83c4b0adb5add153bd9eb144 (diff)
downloadnautilus-95c4973f81dd9d27121a1f3b9e3679fa00ae640f.tar.gz
Report user cancel when all the files we're about to trash or delete are
2008-04-27 Cosimo Cecchi <cosimoc@gnome.org> * libnautilus-private/nautilus-file-operations.c: (delete_files), (trash_files), (delete_job): Report user cancel when all the files we're about to trash or delete are skipped in the operation. This allows to use the same selection for requesting another deletion from the view. (#519746). svn path=/branches/gnome-2-22/; revision=14107
-rw-r--r--ChangeLog8
-rw-r--r--libnautilus-private/nautilus-file-operations.c25
2 files changed, 27 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 72702bb18..24e1c2b33 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
2008-04-27 Cosimo Cecchi <cosimoc@gnome.org>
+ * libnautilus-private/nautilus-file-operations.c: (delete_files),
+ (trash_files), (delete_job):
+ Report user cancel when all the files we're about to trash or delete
+ are skipped in the operation. This allows to use the same selection for
+ requesting another deletion from the view. (#519746).
+
+2008-04-27 Cosimo Cecchi <cosimoc@gnome.org>
+
* src/nautilus-places-sidebar.c: (nautilus_places_sidebar_init):
Always use single click policy in the Places sidebar. (#355760).
diff --git a/libnautilus-private/nautilus-file-operations.c b/libnautilus-private/nautilus-file-operations.c
index 15dd6015e..7d3a87a80 100644
--- a/libnautilus-private/nautilus-file-operations.c
+++ b/libnautilus-private/nautilus-file-operations.c
@@ -1461,7 +1461,7 @@ delete_file (CommonJob *job, GFile *file,
}
static void
-delete_files (CommonJob *job, GList *files)
+delete_files (CommonJob *job, GList *files, int *files_skipped)
{
GList *l;
GFile *file;
@@ -1496,6 +1496,9 @@ delete_files (CommonJob *job, GList *files)
&skipped_file,
&source_info, &transfer_info,
TRUE);
+ if (skipped_file) {
+ (*files_skipped)++;
+ }
}
}
@@ -1525,7 +1528,7 @@ report_trash_progress (CommonJob *job,
static void
-trash_files (CommonJob *job, GList *files)
+trash_files (CommonJob *job, GList *files, int *files_skipped)
{
GList *l;
GFile *file;
@@ -1553,6 +1556,7 @@ trash_files (CommonJob *job, GList *files)
error = NULL;
if (!g_file_trash (file, job->cancellable, &error)) {
if (job->skip_all_error) {
+ (*files_skipped)++;
goto skip;
}
@@ -1576,11 +1580,13 @@ trash_files (CommonJob *job, GList *files)
NULL);
if (response == 0 || response == GTK_RESPONSE_DELETE_EVENT) {
+ ((DeleteJob *) job)->user_cancel = TRUE;
abort_job (job);
} else if (response == 1) { /* skip all */
+ (*files_skipped)++;
job->skip_all_error = TRUE;
} else if (response == 2) { /* skip */
- /* nothing */
+ (*files_skipped)++;
} else if (response == 3) { /* delete all */
to_delete = g_list_prepend (to_delete, file);
job->delete_all = TRUE;
@@ -1602,7 +1608,7 @@ trash_files (CommonJob *job, GList *files)
if (to_delete) {
to_delete = g_list_reverse (to_delete);
- delete_files (job, to_delete);
+ delete_files (job, to_delete, files_skipped);
g_list_free (to_delete);
}
}
@@ -1644,6 +1650,7 @@ delete_job (GIOSchedulerJob *io_job,
CommonJob *common;
gboolean must_confirm_delete_in_trash;
gboolean must_confirm_delete;
+ int files_skipped;
common = (CommonJob *)job;
common->io_job = io_job;
@@ -1655,6 +1662,7 @@ delete_job (GIOSchedulerJob *io_job,
must_confirm_delete_in_trash = FALSE;
must_confirm_delete = FALSE;
+ files_skipped = 0;
for (l = job->files; l != NULL; l = l->next) {
file = l->data;
@@ -1684,7 +1692,7 @@ delete_job (GIOSchedulerJob *io_job,
confirmed = confirm_delete_directly (common, to_delete_files);
}
if (confirmed) {
- delete_files (common, to_delete_files);
+ delete_files (common, to_delete_files, &files_skipped);
} else {
job->user_cancel = TRUE;
}
@@ -1693,11 +1701,16 @@ delete_job (GIOSchedulerJob *io_job,
if (to_trash_files != NULL) {
to_trash_files = g_list_reverse (to_trash_files);
- trash_files (common, to_trash_files);
+ trash_files (common, to_trash_files, &files_skipped);
}
g_list_free (to_trash_files);
g_list_free (to_delete_files);
+
+ if (files_skipped == g_list_length (job->files)) {
+ /* 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,