diff --git a/src/Dialogs.c b/src/Dialogs.c index 89f55d010..f81c3af47 100644 --- a/src/Dialogs.c +++ b/src/Dialogs.c @@ -4709,7 +4709,8 @@ void SetWindowTitle(HWND hwnd, LPCWSTR lpszFile, int iFormat, GetLngString(IDS_MUI_FILELOCKED, wchModeEx, COUNTOF(wchModeEx)); StringCchCat(szTitle, COUNTOF(szTitle), L" "); StringCchCat(szTitle, COUNTOF(szTitle), wchModeEx); - } else if (bReadOnly) { + } + if (bReadOnly) { GetLngString(IDS_MUI_READONLY, wchModeEx, COUNTOF(wchModeEx)); StringCchCat(szTitle, COUNTOF(szTitle), L" "); StringCchCat(szTitle, COUNTOF(szTitle), wchModeEx); diff --git a/src/Notepad3.c b/src/Notepad3.c index 38b78bc04..bc2668fe7 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -11421,22 +11421,34 @@ void InstallFileWatching(const bool bInstall) { assert(!IS_VALID_HANDLE(_hCurrFileHandle) && "CurrFileHandle not properly closed!"); - _hCurrFileHandle = CreateFile(Paths.CurrentFile, - GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ, // 0 => NO FILE_SHARE_RW - NULL, - OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL, - NULL); - Globals.dwLastError = GetLastError(); - - if (!IS_VALID_HANDLE(_hCurrFileHandle)) { - InfoBoxLng(MB_ICONERROR, NULL, IDS_MUI_FILELOCK_ERROR, PathFindFileName(Paths.CurrentFile)); - // need to chose another mode - FILE_WATCHING_MODE const fwm = Settings.FileWatchingMode; - FileWatching.FileWatchingMode = (fwm != FWM_EXCLUSIVELOCK) ? fwm : FWM_MSGBOX; - InstallFileWatching(bInstall); + bool const bPrevReadOnlyAttrib = s_bFileReadOnly; + if (s_bFileReadOnly) { + SendWMCommand(Globals.hwndMain, IDM_FILE_READONLY); // try to gain access } + + if (!s_bFileReadOnly) { + _hCurrFileHandle = CreateFile(Paths.CurrentFile, + GENERIC_READ | GENERIC_WRITE, + FILE_SHARE_READ, // 0 => NO FILE_SHARE_RW + NULL, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, + NULL); + Globals.dwLastError = GetLastError(); + + if (!IS_VALID_HANDLE(_hCurrFileHandle)) { + InfoBoxLng(MB_ICONERROR, NULL, IDS_MUI_FILELOCK_ERROR, PathFindFileName(Paths.CurrentFile)); + // need to chose another mode + FILE_WATCHING_MODE const fwm = Settings.FileWatchingMode; + FileWatching.FileWatchingMode = (fwm != FWM_EXCLUSIVELOCK) ? fwm : FWM_MSGBOX; + InstallFileWatching(bInstall); + } + } + + if (bPrevReadOnlyAttrib && !s_bFileReadOnly) { + SendWMCommand(Globals.hwndMain, IDM_FILE_READONLY); // try to reset + } + } } UpdateTitleBar(Globals.hwndMain);