From 39b7549e38f15f15ed4ffe5261d489279565ebf0 Mon Sep 17 00:00:00 2001 From: "METANEOCORTEX\\Kotti" Date: Thu, 30 Sep 2021 10:42:23 +0200 Subject: [PATCH] +fix: disabled menu items if settings file itself is locked by file change notification --- src/Notepad3.c | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/src/Notepad3.c b/src/Notepad3.c index 52ea70be4..2df0be19f 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -3612,7 +3612,6 @@ LRESULT MsgExitMenuLoop(HWND hwnd, WPARAM wParam) // // MsgInitMenu() - Handles WM_INITMENU // -// LRESULT MsgInitMenu(HWND hwnd, WPARAM wParam, LPARAM lParam) { UNREFERENCED_PARAMETER(lParam); @@ -3625,7 +3624,6 @@ LRESULT MsgInitMenu(HWND hwnd, WPARAM wParam, LPARAM lParam) //bool const dm = UseDarkMode(); bool const si = Flags.bSingleFileInstance; bool const cf = StrIsNotEmpty(Paths.CurrentFile); - bool const sav = Globals.bCanSaveIniFile; bool const ro = SciCall_GetReadOnly(); // scintilla mode read-only bool const lck = (FileWatching.FileWatchingMode == FWM_EXCLUSIVELOCK); // file write lock bool const faro = s_bFileReadOnly; // file attrib read-only @@ -3636,6 +3634,8 @@ LRESULT MsgInitMenu(HWND hwnd, WPARAM wParam, LPARAM lParam) bool const mls = Sci_IsSelectionMultiLine(); //bool const lfl = Flags.bHugeFileLoadState; + //~bool const sav = Globals.bCanSaveIniFile; ~ done by UpdateSaveSettingsCmds() + DocPos const iCurPos = SciCall_GetCurrentPos(); DocLn const iCurLine = SciCall_LineFromPosition(iCurPos); bool const bPosInSel = Sci_IsPosInSelection(iCurPos); @@ -3962,12 +3962,8 @@ LRESULT MsgInitMenu(HWND hwnd, WPARAM wParam, LPARAM lParam) CheckCmd(hmenu, IDM_VIEW_SCROLLPASTEOF, Settings.ScrollPastEOF); CheckCmd(hmenu, IDM_VIEW_REUSEWINDOW, Flags.bReuseWindow); - EnableCmd(hmenu, IDM_VIEW_REUSEWINDOW, sav); CheckCmd(hmenu, IDM_VIEW_SINGLEFILEINSTANCE, Flags.bSingleFileInstance); - EnableCmd(hmenu, IDM_VIEW_SINGLEFILEINSTANCE, sav); CheckCmd(hmenu, IDM_VIEW_STICKYWINPOS, Flags.bStickyWindowPosition); - EnableCmd(hmenu, IDM_VIEW_STICKYWINPOS, sav); - EnableCmd(hmenu, CMD_SAVEASDEFWINPOS, sav); CheckCmd(hmenu, IDM_VIEW_ALWAYSONTOP, Settings.AlwaysOnTop); CheckCmd(hmenu, IDM_VIEW_MINTOTRAY, Settings.MinimizeToTray); @@ -4001,11 +3997,8 @@ LRESULT MsgInitMenu(HWND hwnd, WPARAM wParam, LPARAM lParam) //~EnableCmd(hmenu, IDM_VIEW_SAVEBEFORERUNNINGTOOLS, !faro); CheckCmd(hmenu, IDM_VIEW_NOSAVERECENT, Settings.SaveRecentFiles); - EnableCmd(hmenu, IDM_VIEW_NOSAVERECENT, sav); CheckCmd(hmenu, IDM_VIEW_NOPRESERVECARET, Settings.PreserveCaretPos); - EnableCmd(hmenu, IDM_VIEW_NOPRESERVECARET, Settings.SaveRecentFiles && sav); CheckCmd(hmenu, IDM_VIEW_NOSAVEFINDREPL, Settings.SaveFindReplace); - EnableCmd(hmenu, IDM_VIEW_NOSAVEFINDREPL, sav); CheckCmd(hmenu, IDM_VIEW_EVALTINYEXPRONSEL, Settings.EvalTinyExprOnSelection); @@ -9663,12 +9656,28 @@ void UpdateMarginWidth(const bool bForce) void UpdateSaveSettingsCmds() { bool const bSoftLocked = Flags.bSettingsFileSoftLocked; + bool const bCurrFileLocked = (FileWatching.FileWatchingMode == FWM_EXCLUSIVELOCK); bool const bHaveIniFile = StrIsNotEmpty(Paths.IniFile); bool const bHaveFallbackIniFile = StrIsNotEmpty(Paths.IniFileDefault); - CheckCmd(Globals.hMainMenu, IDM_VIEW_SAVESETTINGS, Settings.SaveSettings && !bSoftLocked); - EnableCmd(Globals.hMainMenu, IDM_VIEW_SAVESETTINGS, Globals.bCanSaveIniFile && !bSoftLocked); - EnableCmd(Globals.hMainMenu, IDM_VIEW_SAVESETTINGSNOW, (bHaveIniFile || bHaveFallbackIniFile) && !bSoftLocked); - EnableCmd(Globals.hMainMenu, CMD_OPENINIFILE, bHaveIniFile && !bSoftLocked); + + bool const bCanSav = Globals.bCanSaveIniFile = !(bSoftLocked && bCurrFileLocked) && CanAccessPath(Paths.IniFile, GENERIC_WRITE); + + HMENU const hmenu = Globals.hMainMenu; + + CheckCmd(hmenu, IDM_VIEW_SAVESETTINGS, Settings.SaveSettings && !bSoftLocked); + + EnableCmd(hmenu, IDM_VIEW_SAVESETTINGS, bCanSav && !bSoftLocked); + EnableCmd(hmenu, IDM_VIEW_SAVESETTINGSNOW, (bHaveIniFile || bHaveFallbackIniFile) && !bSoftLocked); + EnableCmd(hmenu, CMD_OPENINIFILE, bHaveIniFile && !bSoftLocked); + + EnableCmd(hmenu, IDM_VIEW_REUSEWINDOW, bCanSav); + EnableCmd(hmenu, IDM_VIEW_SINGLEFILEINSTANCE, bCanSav); + EnableCmd(hmenu, IDM_VIEW_STICKYWINPOS, bCanSav); + EnableCmd(hmenu, CMD_SAVEASDEFWINPOS, bCanSav); + EnableCmd(hmenu, IDM_VIEW_NOSAVERECENT, bCanSav); + EnableCmd(hmenu, IDM_VIEW_NOPRESERVECARET, Settings.SaveRecentFiles && bCanSav); + EnableCmd(hmenu, IDM_VIEW_NOSAVEFINDREPL, bCanSav); + DrawMenuBar(Globals.hwndMain); } @@ -11841,6 +11850,8 @@ void InstallFileWatching(const bool bInstall) { } } } + + UpdateSaveSettingsCmds(); // (!) reflection UpdateTitleBar(Globals.hwndMain); UpdateToolbar(); }