From b2012f58da7ba8e8bf28aaca2b5cde45552ce0c3 Mon Sep 17 00:00:00 2001 From: Harald Judt Date: Fri, 17 Apr 2015 11:47:37 +0200 Subject: [PATCH] Implement reloading file information on manual reload --- thunar/thunar-folder.c | 25 ++++++++++++++++++++++--- thunar/thunar-folder.h | 3 ++- thunar/thunar-standard-view.c | 4 ++-- 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/thunar/thunar-folder.c b/thunar/thunar-folder.c index 2e0b95b9..9e6fc17a 100644 --- a/thunar/thunar-folder.c +++ b/thunar/thunar-folder.c @@ -109,6 +109,7 @@ struct _ThunarFolder ThunarFile *corresponding_file; GList *new_files; GList *files; + gboolean reload_info; GList *content_type_ptr; guint content_type_idle_id; @@ -248,6 +249,7 @@ thunar_folder_init (ThunarFolder *folder) g_signal_connect (G_OBJECT (folder->file_monitor), "file-destroyed", G_CALLBACK (thunar_folder_file_destroyed), folder); folder->monitor = NULL; + folder->reload_info = FALSE; } @@ -545,6 +547,18 @@ thunar_folder_finished (ExoJob *job, } } + /* schedule a reload of the file information of all files if requested */ + if (folder->reload_info) + { + for (lp = folder->files; lp != NULL; lp = lp->next) + thunar_file_reload_idle (lp->data); + + /* reload folder information too */ + thunar_file_reload_idle (folder->corresponding_file); + + folder->reload_info = FALSE; + } + /* we did it, the folder is loaded */ g_signal_handlers_disconnect_matched (folder->job, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, folder); g_object_unref (folder->job); @@ -578,7 +592,7 @@ thunar_folder_file_changed (ThunarFileMonitor *file_monitor, if (G_UNLIKELY (folder->corresponding_file == file)) { /* ...and if so, reload the folder */ - thunar_folder_reload (folder); + thunar_folder_reload (folder, FALSE); } } @@ -855,7 +869,7 @@ thunar_folder_get_for_file (ThunarFile *file) g_object_set_qdata (G_OBJECT (file), thunar_folder_quark, folder); /* schedule the loading of the folder */ - thunar_folder_reload (folder); + thunar_folder_reload (folder, FALSE); } return folder; @@ -923,15 +937,20 @@ thunar_folder_get_loading (const ThunarFolder *folder) /** * thunar_folder_reload: * @folder : a #ThunarFolder instance. + * @reload_info : reload all information for the files too * * Tells the @folder object to reread the directory * contents from the underlying media. **/ void -thunar_folder_reload (ThunarFolder *folder) +thunar_folder_reload (ThunarFolder *folder, + gboolean reload_info) { _thunar_return_if_fail (THUNAR_IS_FOLDER (folder)); + /* reload file info too? */ + folder->reload_info = reload_info; + /* stop metadata collector */ if (folder->content_type_idle_id != 0) g_source_remove (folder->content_type_idle_id); diff --git a/thunar/thunar-folder.h b/thunar/thunar-folder.h index 9c1411c5..1701b453 100644 --- a/thunar/thunar-folder.h +++ b/thunar/thunar-folder.h @@ -42,7 +42,8 @@ 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); -void thunar_folder_reload (ThunarFolder *folder); +void thunar_folder_reload (ThunarFolder *folder, + gboolean reload_info); G_END_DECLS; diff --git a/thunar/thunar-standard-view.c b/thunar/thunar-standard-view.c index 06b9376b..fa65d46a 100644 --- a/thunar/thunar-standard-view.c +++ b/thunar/thunar-standard-view.c @@ -1714,7 +1714,7 @@ thunar_standard_view_reload (ThunarView *view, /* determine the folder for the view model */ folder = thunar_list_model_get_folder (standard_view->model); if (G_LIKELY (folder != NULL)) - thunar_folder_reload (folder); + thunar_folder_reload (folder, reload_info); /* schedule thumbnail reload update */ if (!standard_view->priv->thumbnailing_scheduled) @@ -3286,7 +3286,7 @@ thunar_standard_view_drag_data_received (GtkWidget *view, { /* reload the folder corresponding to the file */ folder = thunar_folder_get_for_file (file); - thunar_folder_reload (folder); + thunar_folder_reload (folder, FALSE); g_object_unref (G_OBJECT (folder)); } -- GitLab