diff --git a/src/modules/NewPlus/NewShellExtensionContextMenu/new_utilities.h b/src/modules/NewPlus/NewShellExtensionContextMenu/new_utilities.h index 66ac6deccc..5df9dda1fe 100644 --- a/src/modules/NewPlus/NewShellExtensionContextMenu/new_utilities.h +++ b/src/modules/NewPlus/NewShellExtensionContextMenu/new_utilities.h @@ -343,6 +343,21 @@ namespace newplus::utilities } } + inline void update_last_write_time(const std::filesystem::path path) + { + const std::filesystem::file_time_type now = std::filesystem::file_time_type::clock::now(); + + std::filesystem::last_write_time(path, now); + + if (std::filesystem::is_directory(path)) + { + for (const auto& entry : std::filesystem::recursive_directory_iterator(path)) + { + std::filesystem::last_write_time(entry.path(), now); + } + } + } + inline HRESULT copy_template(const template_item* template_entry, const ComPtr site_of_folder) { HRESULT hr = S_OK; @@ -376,6 +391,9 @@ namespace newplus::utilities // Copy file and determine final filename std::filesystem::path target_final_fullpath = template_entry->copy_object_to(GetActiveWindow(), target_fullpath); + // Touch all files and set last modified to "now" + update_last_write_time(target_final_fullpath); + // Consider copy completed. If we do tracing after enter_rename_mode, then rename mode won't consistently work trace.UpdateState(true); Trace::EventCopyTemplate(target_final_fullpath.extension().c_str());