Merge pull request #1791 from RaiKoHoff/DevNewFeatures

Exit on ESC can skip selection
This commit is contained in:
Rainer Kottenhoff 2019-11-19 14:24:21 +01:00 committed by GitHub
commit 1815651e04
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 214 additions and 166 deletions

View File

@ -21,6 +21,9 @@ indent_style = space
indent_size = 2
tab_width = 2
[**.{ini}]
charset = utf-8-sig
[language/**.{h,rc}]
charset = utf-8
# space (w=4) indentation

View File

@ -51,6 +51,7 @@ SettingsVersion=4
;DevDebugMode=0
;AnalyzeReliableConfidenceLevel=50
;LexerSQLNumberSignAsComment=1
;ExitOnESCSkipLevel=2
[Statusbar Settings]
;VisibleSections=0 1 12 14 2 4 5 6 7 8 9 10 11
;SectionPrefixes=Ln ,Col ,Sel ,Sb ,SLn ,Occ ,,,,,,,Ch ,Repl ,Eval ,

View File

@ -1 +1 @@
2678
2679

View File

@ -3,7 +3,7 @@
<assemblyIdentity
name="Notepad3"
processorArchitecture="*"
version="5.19.1118.2678"
version="5.19.1119.2679"
type="win32"
/>
<description>Notepad3 BETA</description>

View File

@ -638,10 +638,11 @@ void LoadSettings()
Defaults.SaveSettings = StrIsNotEmpty(Globals.IniFile);
Settings.SaveSettings = IniSectionGetBool(L"Settings", L"SaveSettings", Defaults.SaveSettings);
// --------------------------------------------------------------------------
// first set "hard coded" .ini-Settings
// --------------------------------------------------------------------------
const WCHAR* const Settings2_Section = L"Settings2";
// --------------------------------------------------------------------------
// --- first set "hard coded" .ini-Settings ---
Flags.bDevDebugMode = IniSectionGetBool(Settings2_Section, L"DevDebugMode", DefaultFlags.bDevDebugMode);
Flags.bStickyWindowPosition = IniSectionGetBool(Settings2_Section, L"StickyWindowPosition", DefaultFlags.bStickyWindowPosition);
@ -855,6 +856,8 @@ void LoadSettings()
Defaults2.LexerSQLNumberSignAsComment = true;
Settings2.LexerSQLNumberSignAsComment = IniSectionGetBool(Settings2_Section, L"LexerSQLNumberSignAsComment", Defaults2.LexerSQLNumberSignAsComment);
Defaults2.ExitOnESCSkipLevel = 2;
Settings2.ExitOnESCSkipLevel = clampi(IniSectionGetInt(Settings2_Section, L"ExitOnESCSkipLevel", Defaults2.ExitOnESCSkipLevel), 0, 2);
// --------------------------------------------------------------------------
const WCHAR* const Settings_Section = L"Settings";
@ -1005,7 +1008,7 @@ void LoadSettings()
Settings.PrintMargin.bottom = clampi(IniSectionGetInt(Settings_Section, L"PrintMarginBottom", Defaults.PrintMargin.bottom), 0, 40000);
GET_BOOL_VALUE_FROM_INISECTION(SaveBeforeRunningTools, false);
GET_CAST_INT_VALUE_FROM_INISECTION(FILE_WATCHING_MODE, FileWatchingMode, FWM_NONE, FWM_NONE, FWM_AUTORELOAD); FileWatching.FileWatchingMode = Settings.FileWatchingMode;
GET_CAST_INT_VALUE_FROM_INISECTION(FILE_WATCHING_MODE, FileWatchingMode, FWM_DONT_CARE, FWM_DONT_CARE, FWM_AUTORELOAD); FileWatching.FileWatchingMode = Settings.FileWatchingMode;
GET_BOOL_VALUE_FROM_INISECTION(ResetFileWatching, true); FileWatching.ResetFileWatching = Settings.ResetFileWatching;
GET_INT_VALUE_FROM_INISECTION(EscFunction, 0, 0, 2);
GET_BOOL_VALUE_FROM_INISECTION(AlwaysOnTop, false);

View File

@ -2062,7 +2062,7 @@ static INT_PTR CALLBACK ChangeNotifyDlgProc(HWND hwnd, UINT umsg, WPARAM wParam,
switch (LOWORD(wParam)) {
case IDOK:
if (IsButtonChecked(hwnd, 100)) {
Settings.FileWatchingMode = FWM_NONE;
Settings.FileWatchingMode = FWM_DONT_CARE;
}
else if (IsButtonChecked(hwnd, 101)) {
Settings.FileWatchingMode = FWM_MSGBOX;

View File

@ -731,10 +731,6 @@ cpi_enc_t AnalyzeText_UCHARDET(
// ============================================================================
// ============================================================================
inline float max_f(float x, float y) { return (x > y) ? x : y; }
// --------------------------------------------------------------------------
//extern "C" cpi_enc_t Encoding_AnalyzeText
cpi_enc_t Encoding_AnalyzeText
(

View File

@ -87,23 +87,29 @@ void DbgLog(const char *fmt, ...);
// ============================================================================
// min/max
#define _min_(x,y) (((x) < (y)) ? (x) : (y))
inline int min_i(const int x, const int y) { return (x < y) ? x : y; }
inline unsigned int min_u(const unsigned int x, const unsigned int y) { return (x < y) ? x : y; }
inline long min_l(const long x, const long y) { return (x < y) ? x : y; }
inline size_t min_s(const size_t x, const size_t y) { return (x < y) ? x : y; }
inline DocPos min_p(const DocPos x, const DocPos y) { return (x < y) ? x : y; }
inline DocLn min_ln(const DocLn x, const DocLn y) { return (x < y) ? x : y; }
inline DocPosCR min_cr(const DocPosCR x, const DocPosCR y) { return (x < y) ? x : y; }
#define _min_(x,y) (((x) > (y)) ? (y) : (x))
#define _RETCMPMIN_ { return (x > y) ? y : x; }
inline int min_i(const int x, const int y) _RETCMPMIN_
inline unsigned int min_u(const unsigned int x, const unsigned int y) _RETCMPMIN_
inline long min_l(const long x, const long y) _RETCMPMIN_
inline long min_dw(const DWORD x, const DWORD y) _RETCMPMIN_
inline size_t min_s(const size_t x, const size_t y) _RETCMPMIN_
inline DocPos min_p(const DocPos x, const DocPos y) _RETCMPMIN_
inline DocLn min_ln(const DocLn x, const DocLn y) _RETCMPMIN_
inline DocPosCR min_cr(const DocPosCR x, const DocPosCR y) _RETCMPMIN_
inline float min_f(float x, float y) _RETCMPMIN_
#define _max_(x,y) (((x) > (y)) ? (x) : (y))
inline int max_i(int x, int y) { return (x > y) ? x : y; }
inline unsigned int max_u(unsigned int x, unsigned int y) { return (x > y) ? x : y; }
inline long max_l(const long x, const long y) { return (x > y) ? x : y; }
inline size_t max_s(const size_t x, const size_t y) { return (x > y) ? x : y; }
inline DocPos max_p(const DocPos x, const DocPos y) { return (x > y) ? x : y; }
inline DocLn max_ln(const DocLn x, const DocLn y) { return (x > y) ? x : y; }
inline DocPosCR max_cr(const DocPosCR x, const DocPosCR y) { return (x > y) ? x : y; }
#define _max_(x,y) (((x) < (y)) ? (y) : (x))
#define _RETCMPMAX_ { return (x < y) ? y : x; }
inline int max_i(int x, int y) _RETCMPMAX_
inline unsigned int max_u(unsigned int x, unsigned int y) _RETCMPMAX_
inline long max_l(const long x, const long y) _RETCMPMAX_
inline long max_dw(const DWORD x, const DWORD y) _RETCMPMAX_
inline size_t max_s(const size_t x, const size_t y) _RETCMPMAX_
inline DocPos max_p(const DocPos x, const DocPos y) _RETCMPMAX_
inline DocLn max_ln(const DocLn x, const DocLn y) _RETCMPMAX_
inline DocPosCR max_cr(const DocPosCR x, const DocPosCR y) _RETCMPMAX_
inline float max_f(float x, float y) _RETCMPMAX_
inline DocPos abs_p(const DocPos x) { return (x >= 0LL) ? x : (0LL - x); }

View File

@ -535,27 +535,27 @@ static void CALLBACK MQ_ExecuteNext(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWOR
//
// CommandLine Parsing Flags
//
static LPWSTR s_lpSchemeArg = NULL;
static LPWSTR s_lpOrigFileArg = NULL;
static LPWSTR s_lpMatchArg = NULL;
static WCHAR s_lpFileArg[MAX_PATH+1];
static LPWSTR s_lpSchemeArg = NULL;
static LPWSTR s_lpOrigFileArg = NULL;
static LPWSTR s_lpMatchArg = NULL;
static WCHAR s_lpFileArg[MAX_PATH+1];
static cpi_enc_t s_flagSetEncoding = CPI_NONE;
static int s_flagSetEOLMode = 0;
static bool s_IsThisAnElevatedRelaunch = false;
static bool s_flagStartAsTrayIcon = false;
static int s_flagAlwaysOnTop = 0;
static bool s_flagKeepTitleExcerpt = false;
static bool s_flagNewFromClipboard = false;
static bool s_flagPasteBoard = false;
static bool s_flagJumpTo = false;
static int s_flagMatchText = 0;
static int s_flagChangeNotify = 0;
static bool s_flagQuietCreate = false;
static bool s_flagLexerSpecified = false;
static bool s_flagAppIsClosing = false;
static bool s_flagSearchPathIfRelative = false;
static bool s_flagDisplayHelp = false;
static cpi_enc_t s_flagSetEncoding = CPI_NONE;
static int s_flagSetEOLMode = 0;
static bool s_IsThisAnElevatedRelaunch = false;
static bool s_flagStartAsTrayIcon = false;
static int s_flagAlwaysOnTop = 0;
static bool s_flagKeepTitleExcerpt = false;
static bool s_flagNewFromClipboard = false;
static bool s_flagPasteBoard = false;
static bool s_flagJumpTo = false;
static int s_flagMatchText = 0;
static FILE_WATCHING_MODE s_flagChangeNotify = FWM_DONT_CARE;
static bool s_flagQuietCreate = false;
static bool s_flagLexerSpecified = false;
static bool s_flagAppIsClosing = false;
static bool s_flagSearchPathIfRelative = false;
static bool s_flagDisplayHelp = false;
//==============================================================================
@ -672,8 +672,8 @@ static void _InitGlobals()
FocusedView.CodeFoldingAvailable = false;
FocusedView.ShowCodeFolding = true;
FileWatching.flagChangeNotify = FWM_NONE;
FileWatching.FileWatchingMode = FWM_NONE;
FileWatching.flagChangeNotify = FWM_DONT_CARE;
FileWatching.FileWatchingMode = FWM_DONT_CARE;
FileWatching.ResetFileWatching = true;
FileWatching.MonitoringLog = false;
@ -1234,8 +1234,7 @@ HWND InitInstance(HINSTANCE hInstance,LPCWSTR pszCmdLine,int nCmdShow)
if (bOpened) {
if (s_IsThisAnElevatedRelaunch) {
if (StrIsNotEmpty(s_lpFileArg)) {
InstallFileWatching(NULL); // Terminate file watching
StringCchCopy(Globals.CurrentFile,COUNTOF(Globals.CurrentFile),s_lpFileArg);
StringCchCopy(Globals.CurrentFile, COUNTOF(Globals.CurrentFile), s_lpFileArg);
InstallFileWatching(Globals.CurrentFile);
}
else {
@ -1275,27 +1274,33 @@ HWND InitInstance(HINSTANCE hInstance,LPCWSTR pszCmdLine,int nCmdShow)
s_lpFileArg[0] = L'\0';
if (bOpened) {
if (s_flagChangeNotify == 1) {
FileWatching.FileWatchingMode = FWM_NONE;
FileWatching.ResetFileWatching = true;
InstallFileWatching(Globals.CurrentFile);
}
else if (s_flagChangeNotify == 2) {
if (!FileWatching.MonitoringLog) {
SendWMCommand(Globals.hwndMain, IDM_VIEW_CHASING_DOCTAIL);
}
else {
FileWatching.FileWatchingMode = FWM_AUTORELOAD;
switch (s_flagChangeNotify) {
case FWM_MSGBOX:
FileWatching.FileWatchingMode = FWM_DONT_CARE;
FileWatching.ResetFileWatching = true;
InstallFileWatching(Globals.CurrentFile);
}
break;
case FWM_AUTORELOAD:
if (!FileWatching.MonitoringLog) {
SendWMCommand(Globals.hwndMain, IDM_VIEW_CHASING_DOCTAIL);
}
else {
FileWatching.FileWatchingMode = FWM_AUTORELOAD;
FileWatching.ResetFileWatching = true;
InstallFileWatching(Globals.CurrentFile);
}
break;
case FWM_DONT_CARE:
default:
break;
}
}
}
else {
if (Encoding_IsValid(Encoding_Forced(CPI_GET))) {
Encoding_Current(Encoding_Forced(CPI_GET));
Encoding_HasChanged(Encoding_Forced(CPI_GET));
cpi_enc_t const forcedEncoding = Encoding_Forced(CPI_GET);
if (Encoding_IsValid(forcedEncoding)) {
Encoding_Current(forcedEncoding);
Encoding_HasChanged(forcedEncoding);
}
}
@ -2830,7 +2835,7 @@ LRESULT MsgCopyData(HWND hwnd, WPARAM wParam, LPARAM lParam)
if (bOpened) {
if (params->flagChangeNotify == FWM_MSGBOX)
{
FileWatching.FileWatchingMode = FWM_NONE;
FileWatching.FileWatchingMode = FWM_DONT_CARE;
FileWatching.ResetFileWatching = true;
InstallFileWatching(Globals.CurrentFile);
}
@ -5602,8 +5607,9 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
break;
case IDM_VIEW_CHANGENOTIFY:
if (ChangeNotifyDlg(hwnd))
if (ChangeNotifyDlg(hwnd)) {
InstallFileWatching(Globals.CurrentFile);
}
break;
@ -5688,12 +5694,16 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
{
DocPos const iCurPos = SciCall_GetCurrentPos();
int skipLevel = Settings2.ExitOnESCSkipLevel;
if (SciCall_AutoCActive()) {
SciCall_AutoCCancel();
--skipLevel;
}
else if (SciCall_CallTipActive()) {
CancelCallTip();
s_bCallTipEscDisabled = true;
--skipLevel;
}
else if (s_bIndicMultiEdit) {
_BEGIN_UNDO_ACTION_
@ -5702,22 +5712,31 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
SciCall_ClearSelections();
_END_UNDO_ACTION_
s_bIndicMultiEdit = false;
--skipLevel;
}
else if (!SciCall_IsSelectionEmpty()) {
if (!SciCall_IsSelectionEmpty() && (skipLevel == Settings2.ExitOnESCSkipLevel)) {
_BEGIN_UNDO_ACTION_
EditSetSelectionEx(Globals.hwndEdit, iCurPos, iCurPos, -1, -1);
_END_UNDO_ACTION_
skipLevel -= Defaults2.ExitOnESCSkipLevel;
}
else if (Settings.EscFunction == 1) {
SendMessage(hwnd, WM_SYSCOMMAND, SC_MINIMIZE, 0);
break;
}
else if (Settings.EscFunction == 2) {
CloseApplication(true);
break;
}
else {
EditSetSelectionEx(Globals.hwndEdit, iCurPos, iCurPos, -1, -1);
if ((skipLevel < 0) || (skipLevel == Settings2.ExitOnESCSkipLevel))
{
switch (Settings.EscFunction) {
case 1:
SendMessage(hwnd, WM_SYSCOMMAND, SC_MINIMIZE, 0);
break;
case 2:
CloseApplication(true);
break;
default:
EditSetSelectionEx(Globals.hwndEdit, iCurPos, iCurPos, -1, -1);
break;
}
}
SciCall_Cancel();
}
@ -7915,9 +7934,9 @@ void ParseCommandLine()
case L'L':
if (*(lp1 + 1) == L'0' || *(lp1 + 1) == L'-' || *CharUpper(lp1 + 1) == L'O')
s_flagChangeNotify = 1;
s_flagChangeNotify = FWM_MSGBOX;
else
s_flagChangeNotify = 2;
s_flagChangeNotify = FWM_AUTORELOAD;
break;
case L'Q':
@ -10279,9 +10298,9 @@ bool ActivatePrevInst()
// Make sure the previous window won't pop up a change notification message
//SendMessage(hwnd,WM_CHANGENOTIFYCLEAR,0,0);
if (IsIconic(hwnd))
ShowWindowAsync(hwnd,SW_RESTORE);
if (IsIconic(hwnd)) {
ShowWindowAsync(hwnd, SW_RESTORE);
}
if (!IsWindowVisible(hwnd)) {
SendMessage(hwnd,WM_TRAYMESSAGE,0,WM_LBUTTONDBLCLK);
SendMessage(hwnd,WM_TRAYMESSAGE,0,WM_LBUTTONUP);
@ -10295,7 +10314,7 @@ bool ActivatePrevInst()
}
LPnp3params params = AllocMem(cb, HEAP_ZERO_MEMORY);
params->flagFileSpecified = false;
params->flagChangeNotify = FWM_NONE;
params->flagChangeNotify = FWM_DONT_CARE;
params->flagQuietCreate = false;
params->flagLexerSpecified = s_flagLexerSpecified ? 1 : 0;
if (s_flagLexerSpecified && s_lpSchemeArg) {
@ -10346,9 +10365,9 @@ bool ActivatePrevInst()
// Make sure the previous window won't pop up a change notification message
//SendMessage(hwnd,WM_CHANGENOTIFYCLEAR,0,0);
if (IsIconic(hwnd))
ShowWindowAsync(hwnd,SW_RESTORE);
if (IsIconic(hwnd)) {
ShowWindowAsync(hwnd, SW_RESTORE);
}
if (!IsWindowVisible(hwnd)) {
SendMessage(hwnd,WM_TRAYMESSAGE,0,WM_LBUTTONDBLCLK);
SendMessage(hwnd,WM_TRAYMESSAGE,0,WM_LBUTTONUP);
@ -10708,48 +10727,52 @@ void CancelCallTip()
//=============================================================================
//
// InstallFileWatching()
// TerminateFileWatching()
//
//
static void _TerminateFileWatching()
static void TerminateFileWatching()
{
if (s_bRunningWatch)
{
KillTimer(NULL, ID_WATCHTIMER);
if (s_hChangeHandle) {
FindCloseChangeNotification(s_hChangeHandle);
s_hChangeHandle = NULL;
}
KillTimer(NULL, ID_WATCHTIMER);
s_bRunningWatch = false;
s_dwChangeNotifyTime = 0;
s_dwChangeNotifyTime = 0UL; // reset
}
}
//=============================================================================
//
// InstallFileWatching()
//
void InstallFileWatching(LPCWSTR lpszFile)
{
// Terminate
if ((FileWatching.FileWatchingMode == FWM_NONE) || StrIsEmpty(lpszFile))
if (StrIsEmpty(lpszFile) || (FileWatching.FileWatchingMode == FWM_DONT_CARE))
{
_TerminateFileWatching();
TerminateFileWatching();
}
else // Install
{
// Terminate previous watching
_TerminateFileWatching();
TerminateFileWatching();
WCHAR tchDirectory[MAX_PATH] = { L'\0' };
StringCchCopy(tchDirectory,COUNTOF(tchDirectory),lpszFile);
PathCchRemoveFileSpec(tchDirectory, COUNTOF(tchDirectory));
// Save data of current file
HANDLE hFind = FindFirstFile(Globals.CurrentFile,&s_fdCurFile);
if (hFind != INVALID_HANDLE_VALUE)
HANDLE hFind = FindFirstFile(Globals.CurrentFile, &s_fdCurFile);
if (hFind != INVALID_HANDLE_VALUE) {
FindClose(hFind);
else
ZeroMemory(&s_fdCurFile,sizeof(WIN32_FIND_DATA));
s_hChangeHandle = FindFirstChangeNotification(tchDirectory,false,
}
else {
ZeroMemory(&s_fdCurFile, sizeof(WIN32_FIND_DATA));
}
s_hChangeHandle = FindFirstChangeNotification(
tchDirectory,false,
FILE_NOTIFY_CHANGE_FILE_NAME | \
FILE_NOTIFY_CHANGE_DIR_NAME | \
FILE_NOTIFY_CHANGE_ATTRIBUTES | \
@ -10758,16 +10781,44 @@ void InstallFileWatching(LPCWSTR lpszFile)
// No previous watching installed, so launch the timer first
if (!s_bRunningWatch) {
SetTimer(NULL, ID_WATCHTIMER, FileWatching.FileCheckInverval, WatchTimerProc);
SetTimer(NULL, ID_WATCHTIMER,
min_dw(FileWatching.FileCheckInverval, FileWatching.AutoReloadTimeout),
WatchTimerProc);
s_bRunningWatch = true;
}
s_bRunningWatch = true;
s_dwChangeNotifyTime = 0;
s_dwChangeNotifyTime = GetTickCount(); // init
}
UpdateToolbar();
}
static inline bool CurrentFileChanged()
{
if (StrIsEmpty(Globals.CurrentFile)) { return false; }
// Check if the file has been changed
WIN32_FIND_DATA fdUpdated;
ZeroMemory(&fdUpdated, sizeof(WIN32_FIND_DATA));
//~HANDLE const hFind = FindFirstFile(Globals.CurrentFile, &fdUpdated);
//~if (hFind != INVALID_HANDLE_VALUE)
//~ FindClose(hFind);
//~else
//~ return true;
if (!GetFileAttributesEx(Globals.CurrentFile, GetFileExInfoStandard, &fdUpdated)) {
return true; // The current file has been removed
}
bool const changed = (s_fdCurFile.nFileSizeLow != fdUpdated.nFileSizeLow)
|| (s_fdCurFile.nFileSizeHigh != fdUpdated.nFileSizeHigh)
//|| (CompareFileTime(&s_fdCurFile.ftLastWriteTime, &fdUpdated.ftLastWriteTime) != 0)
|| (s_fdCurFile.ftLastWriteTime.dwLowDateTime != fdUpdated.ftLastWriteTime.dwLowDateTime)
|| (s_fdCurFile.ftLastWriteTime.dwHighDateTime != fdUpdated.ftLastWriteTime.dwHighDateTime);
return changed;
}
//=============================================================================
//
// WatchTimerProc()
@ -10782,48 +10833,39 @@ void CALLBACK WatchTimerProc(HWND hwnd,UINT uMsg,UINT_PTR idEvent,DWORD dwTime)
if (s_bRunningWatch)
{
if (FileWatching.MonitoringLog) {
if ((s_dwChangeNotifyTime > 0) && ((GetTickCount() - s_dwChangeNotifyTime) > FileWatching.AutoReloadTimeout))
{
_TerminateFileWatching();
//SendMessage(Globals.hwndMain, WM_CHANGENOTIFY, 0, 0);
MsgChangeNotify(Globals.hwndMain, (WPARAM)NULL, (LPARAM)NULL);
}
}
// Check Change Notification Handle
else if (WAIT_OBJECT_0 == WaitForSingleObject(s_hChangeHandle,0))
switch (FileWatching.FileWatchingMode)
{
bool const bHasFileName = StrIsNotEmpty(Globals.CurrentFile);
// Check if the changes affect the current file
WIN32_FIND_DATA fdUpdated;
ZeroMemory(&fdUpdated, sizeof(WIN32_FIND_DATA));
HANDLE const hFind = bHasFileName ? FindFirstFile(Globals.CurrentFile, &fdUpdated) : INVALID_HANDLE_VALUE;
if (INVALID_HANDLE_VALUE != hFind) {
FindClose(hFind);
}
else {
// The current file has been removed
ZeroMemory(&fdUpdated, sizeof(WIN32_FIND_DATA));
}
// Check if the file has been changed
if (bHasFileName) {
if (CompareFileTime(&s_fdCurFile.ftLastWriteTime, &fdUpdated.ftLastWriteTime) != 0 ||
s_fdCurFile.nFileSizeLow != fdUpdated.nFileSizeLow ||
s_fdCurFile.nFileSizeHigh != fdUpdated.nFileSizeHigh ||
FileWatching.MonitoringLog /* force */)
case FWM_AUTORELOAD:
if (((GetTickCount() - s_dwChangeNotifyTime) > FileWatching.AutoReloadTimeout)
&& //|| // TODO: OR for read only auto reload without save requester
CurrentFileChanged())
{
// Shutdown current watching and give control to main window
_TerminateFileWatching();
//SendMessage(Globals.hwndMain,WM_CHANGENOTIFY,0,0);
MsgChangeNotify(Globals.hwndMain, (WPARAM)NULL, (LPARAM)NULL);
TerminateFileWatching();
PostMessage(Globals.hwndMain, WM_CHANGENOTIFY, 0, 0);
}
else {
FindNextChangeNotification(s_hChangeHandle);
break;
case FWM_MSGBOX:
{
if (s_hChangeHandle)
{
while (WaitForSingleObject(s_hChangeHandle, 0) == WAIT_OBJECT_0) {
// Check if the changes affect the current file
if (CurrentFileChanged()) {
// Shutdown current watching and give control to main window
TerminateFileWatching();
PostMessage(Globals.hwndMain, WM_CHANGENOTIFY, 0, 0);
break; // while
}
FindNextChangeNotification(s_hChangeHandle);
}
}
}
}
break;
case FWM_DONT_CARE:
default:
break;
}
}
}

View File

@ -86,32 +86,28 @@ typedef enum {
//==== Ids ====================================================================
#define IDC_STATUSBAR 0xFB00
#define IDC_TOOLBAR 0xFB01
#define IDC_REBAR 0xFB02
#define IDC_EDIT 0xFB03
#define IDC_EDITFRAME 0xFB04
#define IDC_FILENAME 0xFB05
#define IDC_REUSELOCK 0xFB06
#define IDC_STATUSBAR (0xFB00)
#define IDC_TOOLBAR (0xFB01)
#define IDC_REBAR (0xFB02)
#define IDC_EDIT (0xFB03)
#define IDC_EDITFRAME (0xFB04)
#define IDC_FILENAME (0xFB05)
#define IDC_REUSELOCK (0xFB06)
//==== Change Notifications ===================================================
#define ID_WATCHTIMER 0xA000
#define WM_CHANGENOTIFY WM_USER+1
//#define WM_CHANGENOTIFYCLEAR WM_USER+2
//==== Notifications ==========================================================
#define WM_TRAYMESSAGE WM_USER // Callback Message from System Tray
#define WM_CHANGENOTIFY (WM_USER+1) // Change Notifications
//#define WM_CHANGENOTIFYCLEAR (WM_USER+2)
//==== Callback Message from System Tray ======================================
#define WM_TRAYMESSAGE WM_USER
//==== Paste Board Timer ======================================================
#define ID_PASTEBOARDTIMER 0xA001
//==== Timer ==================================================================
#define ID_WATCHTIMER (0xA000) // File Watching
#define ID_PASTEBOARDTIMER (0xA001) // Paste Board
//==== Reuse Window Lock Timeout ==============================================
#define REUSEWINDOWLOCKTIMEOUT 1000
#define REUSEWINDOWLOCKTIMEOUT (1000)
//==== Function Declarations ==================================================

View File

@ -94,7 +94,7 @@ inline RECT RectFromWinInfo(const WININFO* const pWinInfo) {
typedef enum { BACKGROUND_LAYER = 0, FOREGROUND_LAYER = 1 } COLOR_LAYER; // Style_GetColor()
typedef enum { OPEN_WITH_BROWSER = 1, OPEN_WITH_NOTEPAD3 = 2, COPY_HYPERLINK = 4 } HYPERLINK_OPS; // Hyperlink Operations
typedef enum { FWM_NONE = 0, FWM_MSGBOX = 1, FWM_AUTORELOAD = 2 } FILE_WATCHING_MODE;
typedef enum { FWM_DONT_CARE = 0, FWM_MSGBOX = 1, FWM_AUTORELOAD = 2 } FILE_WATCHING_MODE;
// ----------------------------------------------------------------------------
@ -510,6 +510,7 @@ typedef struct _settings2_t
bool NoCopyLineOnEmptySelection;
bool NoCutLineOnEmptySelection;
bool LexerSQLNumberSignAsComment;
int ExitOnESCSkipLevel;
float AnalyzeReliableConfidenceLevel;
//~float ReliableCEDConfidenceMapping; // = 0.85f;

View File

@ -8,8 +8,8 @@
#define SAPPNAME "Notepad3"
#define VERSION_MAJOR 5
#define VERSION_MINOR 19
#define VERSION_REV 1118
#define VERSION_BUILD 2678
#define VERSION_REV 1119
#define VERSION_BUILD 2679
#define SCINTILLA_VER 421
#define ONIGURUMA_REGEX_VER 6.9.4
#define UCHARDET_VER 2018.09.27