diff --git a/thunar/thunar-transfer-job.c b/thunar/thunar-transfer-job.c index 364bd4ec624c7bfa25901ec4a1e6e5554cb3a877..801f98eef4bbdbad250146fd6efa914ad9312b60 100644 --- a/thunar/thunar-transfer-job.c +++ b/thunar/thunar-transfer-job.c @@ -1,22 +1,22 @@ -/* vi:set sw=2 sts=2 ts=2 et ai: */ +/* vi:set et ai sw=2 sts=2 ts=2: */ /*- * Copyright (c) 2005-2007 Benedikt Meurer <benny@xfce.org> * Copyright (c) 2009-2011 Jannis Pohlmann <jannis@xfce.org> * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or (at - * your option) any later version. + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA + * You should have received a copy of the GNU General Public + * License along with this program; if not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H @@ -25,11 +25,13 @@ #include <gio/gio.h> +#include <thunar/thunar-application.h> #include <thunar/thunar-gio-extensions.h> #include <thunar/thunar-io-scan-directory.h> #include <thunar/thunar-io-jobs-util.h> #include <thunar/thunar-job.h> #include <thunar/thunar-private.h> +#include <thunar/thunar-thumbnail-cache.h> #include <thunar/thunar-transfer-job.h> @@ -481,11 +483,13 @@ thunar_transfer_job_copy_node (ThunarTransferJob *job, GList **target_file_list_return, GError **error) { - ThunarJobResponse response; - GFileInfo *info; - GError *err = NULL; - GFile *real_target_file = NULL; - gchar *base_name; + ThunarThumbnailCache *thumbnail_cache; + ThunarApplication *application; + ThunarJobResponse response; + GFileInfo *info; + GError *err = NULL; + GFile *real_target_file = NULL; + gchar *base_name; _thunar_return_if_fail (THUNAR_IS_TRANSFER_JOB (job)); _thunar_return_if_fail (node != NULL && G_IS_FILE (node->source_file)); @@ -536,6 +540,14 @@ retry_copy: /* node->source_file == real_target_file means to skip the file */ if (G_LIKELY (node->source_file != real_target_file)) { + /* notify the thumbnail cache of the copy operation */ + application = thunar_application_get (); + thumbnail_cache = thunar_application_get_thumbnail_cache (application); + thunar_thumbnail_cache_copy_file (thumbnail_cache, node->source_file, + real_target_file); + g_object_unref (thumbnail_cache); + g_object_unref (application); + /* check if we have children to copy */ if (node->children != NULL) { @@ -558,22 +570,42 @@ retry_copy: /* add the real target file to the return list */ if (G_LIKELY (target_file_list_return != NULL)) - *target_file_list_return = thunar_g_file_list_prepend (*target_file_list_return, real_target_file); + { + *target_file_list_return = + thunar_g_file_list_prepend (*target_file_list_return, + real_target_file); + } retry_remove: /* try to remove the source directory if we are on copy+remove fallback for move */ - if (job->type == THUNAR_TRANSFER_JOB_MOVE && - !g_file_delete (node->source_file, exo_job_get_cancellable (EXO_JOB (job)), &err)) + if (job->type == THUNAR_TRANSFER_JOB_MOVE) { - /* ask the user to retry */ - response = thunar_job_ask_skip (THUNAR_JOB (job), "%s", err->message); + if (g_file_delete (node->source_file, + exo_job_get_cancellable (EXO_JOB (job)), + &err)) + { + /* notify the thumbnail cache of the delete operation */ + application = thunar_application_get (); + thumbnail_cache = + thunar_application_get_thumbnail_cache (application); + thunar_thumbnail_cache_delete_file (thumbnail_cache, + node->source_file); + g_object_unref (thumbnail_cache); + g_object_unref (application); + } + else + { + /* ask the user to retry */ + response = thunar_job_ask_skip (THUNAR_JOB (job), "%s", + err->message); - /* reset the error */ - g_clear_error (&err); + /* reset the error */ + g_clear_error (&err); - /* check whether to retry */ - if (G_UNLIKELY (response == THUNAR_JOB_RESPONSE_RETRY)) - goto retry_remove; + /* check whether to retry */ + if (G_UNLIKELY (response == THUNAR_JOB_RESPONSE_RETRY)) + goto retry_remove; + } } } @@ -614,20 +646,22 @@ static gboolean thunar_transfer_job_execute (ExoJob *job, GError **error) { - ThunarTransferNode *node; - ThunarJobResponse response; - ThunarTransferJob *transfer_job = THUNAR_TRANSFER_JOB (job); - GFileInfo *info; - gboolean parent_exists; - GError *err = NULL; - GList *new_files_list = NULL; - GList *snext; - GList *sp; - GList *tnext; - GList *tp; - GFile *target_parent; - gchar *base_name; - gchar *parent_display_name; + ThunarThumbnailCache *thumbnail_cache; + ThunarTransferNode *node; + ThunarApplication *application; + ThunarJobResponse response; + ThunarTransferJob *transfer_job = THUNAR_TRANSFER_JOB (job); + GFileInfo *info; + gboolean parent_exists; + GError *err = NULL; + GList *new_files_list = NULL; + GList *snext; + GList *sp; + GList *tnext; + GList *tp; + GFile *target_parent; + gchar *base_name; + gchar *parent_display_name; _thunar_return_val_if_fail (THUNAR_IS_TRANSFER_JOB (job), FALSE); _thunar_return_val_if_fail (error == NULL || *error == NULL, FALSE); @@ -742,6 +776,14 @@ thunar_transfer_job_execute (ExoJob *job, exo_job_get_cancellable (job), NULL, NULL, &err)) { + /* notify the thumbnail cache of the move operation */ + application = thunar_application_get (); + thumbnail_cache = thunar_application_get_thumbnail_cache (application); + thunar_thumbnail_cache_move_file (thumbnail_cache, + node->source_file, tp->data); + g_object_unref (thumbnail_cache); + g_object_unref (application); + /* add the target file to the new files list */ new_files_list = thunar_g_file_list_prepend (new_files_list, tp->data);