From 72e86e6825ce398fc16c0c637e7df8f323d95b2a Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Tue, 27 Aug 2019 11:53:21 +0200 Subject: [PATCH] + add: option to preserve origin file modification time --- language/common_res.h | 1 + language/np3_de_de/menu_de_de.rc | 2 ++ language/np3_en_gb/menu_en_gb.rc | 2 ++ language/np3_en_us/menu_en_us.rc | 2 ++ src/Config/Config.cpp | 2 ++ src/Edit.c | 11 +++++++++++ src/Notepad3.c | 6 ++++++ src/TypeDefs.h | 1 + 8 files changed, 27 insertions(+) diff --git a/language/common_res.h b/language/common_res.h index 466578b87..6bee111b0 100644 --- a/language/common_res.h +++ b/language/common_res.h @@ -444,6 +444,7 @@ #define IDM_FILE_MANAGEFAV 40020 #define IDM_FILE_RECENT 40021 #define IDM_FILE_EXIT 40022 +#define IDM_FILE_PRESERVE_FILEMODTIME 40023 #define IDM_ENCODING_ANSI 40100 #define IDM_ENCODING_UNICODE 40101 diff --git a/language/np3_de_de/menu_de_de.rc b/language/np3_de_de/menu_de_de.rc index d6326f9fb..b33b11217 100644 --- a/language/np3_de_de/menu_de_de.rc +++ b/language/np3_de_de/menu_de_de.rc @@ -64,6 +64,8 @@ BEGIN MENUITEM "&Kopie speichern...\tCtrl+F6", IDM_FILE_SAVECOPY MENUITEM "&Nur lesend", IDM_FILE_READONLY MENUITEM SEPARATOR + MENUITEM "Keine Anpassung des &Zeitstempels", IDM_FILE_PRESERVE_FILEMODTIME + MENUITEM SEPARATOR MENUITEM "&Verschlüsselungs Passwort...", IDM_SETPASS MENUITEM SEPARATOR POPUP "&Starte" diff --git a/language/np3_en_gb/menu_en_gb.rc b/language/np3_en_gb/menu_en_gb.rc index 05ab94070..eab9d2843 100644 --- a/language/np3_en_gb/menu_en_gb.rc +++ b/language/np3_en_gb/menu_en_gb.rc @@ -64,6 +64,8 @@ BEGIN MENUITEM "Save &Copy...\tCtrl+F6", IDM_FILE_SAVECOPY MENUITEM "&Read Only", IDM_FILE_READONLY MENUITEM SEPARATOR + MENUITEM "&Preserve File Modification Time", IDM_FILE_PRESERVE_FILEMODTIME + MENUITEM SEPARATOR MENUITEM "Set Encr&yption Passphrase...", IDM_SETPASS MENUITEM SEPARATOR POPUP "&Launch" diff --git a/language/np3_en_us/menu_en_us.rc b/language/np3_en_us/menu_en_us.rc index 11a7cb1f6..1e113d121 100644 --- a/language/np3_en_us/menu_en_us.rc +++ b/language/np3_en_us/menu_en_us.rc @@ -64,6 +64,8 @@ BEGIN MENUITEM "Save &Copy...\tCtrl+F6", IDM_FILE_SAVECOPY MENUITEM "&Read Only", IDM_FILE_READONLY MENUITEM SEPARATOR + MENUITEM "&Preserve File Modification Time", IDM_FILE_PRESERVE_FILEMODTIME + MENUITEM SEPARATOR MENUITEM "Set Encr&yption Passphrase...", IDM_SETPASS MENUITEM SEPARATOR POPUP "&Launch" diff --git a/src/Config/Config.cpp b/src/Config/Config.cpp index 700089ff8..8c06018c3 100644 --- a/src/Config/Config.cpp +++ b/src/Config/Config.cpp @@ -913,6 +913,7 @@ void LoadSettings() GET_INT_VALUE_FROM_INISECTION(Bidirectional, Defaults.Bidirectional, 0, 2); // set before GET_BOOL_VALUE_FROM_INISECTION(MuteMessageBeep, false); GET_BOOL_VALUE_FROM_INISECTION(SplitUndoTypingSeqOnLnBreak, false); + GET_BOOL_VALUE_FROM_INISECTION(PreserveOrigFileModifyTime, false); ///~Settings2.IMEInteraction = clampi(IniSectionGetInt(Settings_Section, L"IMEInteraction", Settings2.IMEInteraction), SC_IME_WINDOWED, SC_IME_INLINE); @@ -1383,6 +1384,7 @@ bool SaveSettings(bool bSaveSettingsNow) SAVE_VALUE_IF_NOT_EQ_DEFAULT(Int, Bidirectional); SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, MuteMessageBeep); SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, SplitUndoTypingSeqOnLnBreak); + SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, PreserveOrigFileModifyTime); ///~IniSectionSetInt(Settings_Section, L"IMEInteraction", Settings2.IMEInteraction); diff --git a/src/Edit.c b/src/Edit.c index 45de0edf4..cc1394a8f 100644 --- a/src/Edit.c +++ b/src/Edit.c @@ -1356,6 +1356,14 @@ bool EditSaveFile( if (hFile == INVALID_HANDLE_VALUE) return false; + //FILETIME createTime; + //FILETIME laccessTime; + FILETIME modTime; + //if (!GetFileTime(hFile, &createTime, &laccessTime, &modTime)) { + if (!GetFileTime(hFile, NULL, NULL, &modTime)) { + return false; + } + // ensure consistent line endings if (Settings.FixLineEndings) { EditEnsureConsistentLineEndings(hwnd); @@ -1491,6 +1499,9 @@ bool EditSaveFile( } } + if (Settings.PreserveOrigFileModifyTime) { + SetFileTime(hFile, NULL, NULL, &modTime); + } CloseHandle(hFile); if (bWriteSuccess) { diff --git a/src/Notepad3.c b/src/Notepad3.c index 46b4c70eb..e049ac8b9 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -3050,6 +3050,7 @@ LRESULT MsgInitMenu(HWND hwnd, WPARAM wParam, LPARAM lParam) EnableCmd(hmenu,IDM_FILE_READONLY,i); CheckCmd(hmenu,IDM_FILE_READONLY,s_bFileReadOnly); + CheckCmd(hmenu,IDM_FILE_PRESERVE_FILEMODTIME, Settings.PreserveOrigFileModifyTime); EnableCmd(hmenu,IDM_ENCODING_UNICODEREV,!ro); EnableCmd(hmenu,IDM_ENCODING_UNICODE,!ro); @@ -5577,6 +5578,11 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) break; + case IDM_FILE_PRESERVE_FILEMODTIME: + Settings.PreserveOrigFileModifyTime = !Settings.PreserveOrigFileModifyTime; + break; + + case IDM_VIEW_CHANGENOTIFY: if (ChangeNotifyDlg(hwnd)) InstallFileWatching(Globals.CurrentFile); diff --git a/src/TypeDefs.h b/src/TypeDefs.h index e2f8cf754..252e77dc6 100644 --- a/src/TypeDefs.h +++ b/src/TypeDefs.h @@ -431,6 +431,7 @@ typedef struct _settings_t int CustomSchemesDlgPosY; bool MuteMessageBeep; bool SplitUndoTypingSeqOnLnBreak; + bool PreserveOrigFileModifyTime; RECT PrintMargin; EDITFINDREPLACE EFR_Data;