From d20c1517401f2f61a9d09ec8081ad488c6734189 Mon Sep 17 00:00:00 2001 From: Alexander Schwinn Date: Thu, 18 Jul 2019 10:30:03 +0200 Subject: [PATCH 1/2] Ghost files remain after moving files on a sftp remote (Bug #15704) There is no folder monitor for some gvfs remote locations, so we need to update the source folder "by hand" after moving files. --- thunar/thunar-folder.c | 17 +++++++++++++++++ thunar/thunar-folder.h | 1 + thunar/thunar-transfer-job.c | 22 ++++++++++++++++++++++ 3 files changed, 40 insertions(+) diff --git a/thunar/thunar-folder.c b/thunar/thunar-folder.c index 203a1b99..5d5e2f8f 100644 --- a/thunar/thunar-folder.c +++ b/thunar/thunar-folder.c @@ -967,6 +967,23 @@ thunar_folder_get_loading (const ThunarFolder *folder) /** + * thunar_folder_has_folder_monitor: + * @folder : a #ThunarFolder instance. + * + * Tells whether the @folder has a folder monitor running + * + * Return value: %TRUE if @folder has a folder monitor, else %FALSE. + **/ +gboolean +thunar_folder_has_folder_monitor (const ThunarFolder *folder) +{ + _thunar_return_val_if_fail (THUNAR_IS_FOLDER (folder), FALSE); + return (folder->monitor != NULL); +} + + + +/** * thunar_folder_reload: * @folder : a #ThunarFolder instance. * @reload_info : reload all information for the files too diff --git a/thunar/thunar-folder.h b/thunar/thunar-folder.h index 1701b453..d5c202b6 100644 --- a/thunar/thunar-folder.h +++ b/thunar/thunar-folder.h @@ -41,6 +41,7 @@ ThunarFolder *thunar_folder_get_for_file (ThunarFile *file); ThunarFile *thunar_folder_get_corresponding_file (const ThunarFolder *folder); GList *thunar_folder_get_files (const ThunarFolder *folder); gboolean thunar_folder_get_loading (const ThunarFolder *folder); +gboolean thunar_folder_has_folder_monitor (const ThunarFolder *folder); void thunar_folder_reload (ThunarFolder *folder, gboolean reload_info); diff --git a/thunar/thunar-transfer-job.c b/thunar/thunar-transfer-job.c index cfa932ad..cfc4104a 100644 --- a/thunar/thunar-transfer-job.c +++ b/thunar/thunar-transfer-job.c @@ -860,6 +860,9 @@ thunar_transfer_job_execute (ExoJob *job, GList *sp; GList *tnext; GList *tp; + GFile *source_parent; + ThunarFile *source_parent_thunar_file = NULL; + ThunarFolder *source_parent_thunar_folder = NULL; GFile *target_parent; gchar *base_name; gchar *parent_display_name; @@ -983,6 +986,18 @@ thunar_transfer_job_execute (ExoJob *job, exo_job_info_message (job, _("Trying to move \"%s\""), g_file_info_get_display_name (info)); + source_parent = g_file_get_parent (node->source_file); + if (source_parent != NULL) + { + source_parent_thunar_file = thunar_file_get (source_parent, NULL); + g_object_unref (source_parent); + if (source_parent_thunar_file != NULL) + { + source_parent_thunar_folder = thunar_folder_get_for_file (source_parent_thunar_file); + g_object_unref (source_parent_thunar_file); + } + } + if (g_file_move (node->source_file, tp->data, flags, exo_job_get_cancellable (job), @@ -993,6 +1008,9 @@ thunar_transfer_job_execute (ExoJob *job, node->source_file, tp->data); + if (source_parent_thunar_folder != NULL && thunar_folder_has_folder_monitor (source_parent_thunar_folder) == FALSE) + thunar_folder_reload (source_parent_thunar_folder, FALSE); + /* add the target file to the new files list */ new_files_list = thunar_g_file_list_prepend (new_files_list, tp->data); @@ -1017,9 +1035,13 @@ thunar_transfer_job_execute (ExoJob *job, { /* failed to collect, cannot continue */ g_object_unref (info); + if (source_parent_thunar_folder != NULL) + g_object_unref (source_parent_thunar_folder); break; } } + if (source_parent_thunar_folder != NULL) + g_object_unref (source_parent_thunar_folder); } else if (transfer_job->type == THUNAR_TRANSFER_JOB_COPY) { -- 2.11.0