From 0449f0fb2eab37b78ad868115511aa5910de8e89 Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Wed, 21 Feb 2018 11:58:26 +0100 Subject: [PATCH 1/7] + adapted VS compiler version string for About dialog --- src/Version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Version.h b/src/Version.h index 07e88fecf..efe112a53 100644 --- a/src/Version.h +++ b/src/Version.h @@ -61,7 +61,7 @@ #if defined(_MSC_VER) #if (_MSC_VER >= 1912) #if(_MSC_FULL_VER >= 191225835) - #define VER_CPL "Microsoft Visual C++ 2017 Ver. 15.5.5" + #define VER_CPL "Microsoft Visual C++ 2017 Ver. 15.5.(5-7)" #elif(_MSC_FULL_VER >= 191225834) #define VER_CPL "Microsoft Visual C++ 2017 Ver. 15.5.(3-4)" #elif(_MSC_FULL_VER >= 191225831) From ea81edc33fc7fcc18e4257ffea11b23cdba41269 Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Wed, 21 Feb 2018 17:53:27 +0100 Subject: [PATCH 2/7] + chg: compiler optimization flags for release build --- minipath/minipath.vcxproj | 5 +++++ np3encrypt/np3encrypt.vcxproj | 8 ++++++-- scintilla/Scintilla.vcxproj | 6 ++++-- src/Edit.c | 6 ++++++ src/Notepad3.vcxproj | 6 ++++-- 5 files changed, 25 insertions(+), 6 deletions(-) diff --git a/minipath/minipath.vcxproj b/minipath/minipath.vcxproj index 0e67d0d4e..c826becc0 100644 --- a/minipath/minipath.vcxproj +++ b/minipath/minipath.vcxproj @@ -150,6 +150,8 @@ true true + Full + Speed /MACHINE:I386 %(AdditionalOptions) @@ -237,6 +239,9 @@ Level4 true true + Full + Speed + true false diff --git a/np3encrypt/np3encrypt.vcxproj b/np3encrypt/np3encrypt.vcxproj index 6dc2352cf..86da5c409 100644 --- a/np3encrypt/np3encrypt.vcxproj +++ b/np3encrypt/np3encrypt.vcxproj @@ -96,10 +96,12 @@ Level4 - MaxSpeed + Full true NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true + Speed + true Console @@ -142,11 +144,13 @@ Level4 - MaxSpeed + Full true WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true + Speed + true Console diff --git a/scintilla/Scintilla.vcxproj b/scintilla/Scintilla.vcxproj index 83943f36c..4120d15a7 100644 --- a/scintilla/Scintilla.vcxproj +++ b/scintilla/Scintilla.vcxproj @@ -175,9 +175,10 @@ Level3 true - true Fast stdcpplatest + Speed + true true @@ -194,9 +195,10 @@ MultiThreaded Level3 true - true Fast stdcpplatest + Speed + true MachineX64 diff --git a/src/Edit.c b/src/Edit.c index 3ccd30c17..cc6f3d863 100644 --- a/src/Edit.c +++ b/src/Edit.c @@ -4665,6 +4665,7 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA static RegExResult_t regexMatch = INVALID; + static BOOL bHasFocus = TRUE; static BOOL bFlagsChanged = TRUE; static COLORREF rgbRed = RGB(255, 170, 170); @@ -4956,6 +4957,11 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA DialogEnableWindow(hwnd, IDC_REPLACEINSEL, bEnableF && bEnableIS); DialogEnableWindow(hwnd, IDC_SWAPSTRG, bEnableF || bEnableR); + if (!bHasFocus) { + //TODO: copy selection/clipboard + } + bHasFocus = TRUE; + if (HIWORD(wParam) == CBN_CLOSEUP) { LONG lSelEnd; SendDlgItemMessage(hwnd, LOWORD(wParam), CB_GETEDITSEL, 0, (LPARAM)&lSelEnd); diff --git a/src/Notepad3.vcxproj b/src/Notepad3.vcxproj index c397ed7c7..4014f1bb7 100644 --- a/src/Notepad3.vcxproj +++ b/src/Notepad3.vcxproj @@ -210,10 +210,11 @@ Level4 None true - true StreamingSIMDExtensions2 Fast stdcpp17 + Speed + true msimg32.lib;comctl32.lib;imm32.lib;shlwapi.lib;scintilla.lib;%(AdditionalDependencies) @@ -264,9 +265,10 @@ Level4 None true - true Fast stdcpp17 + Speed + true msimg32.lib;comctl32.lib;imm32.lib;shlwapi.lib;scintilla.lib;%(AdditionalDependencies) From 0de94984013bef707209cf468f1f26c950fe2c81 Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Wed, 21 Feb 2018 20:59:46 +0100 Subject: [PATCH 3/7] + fix: fill find/replace search box with selection/clipboard on non switching Ctrl+F/H --- src/Edit.c | 151 ++++++++++++++++++++++++------------------------- src/Notepad3.c | 10 +++- 2 files changed, 82 insertions(+), 79 deletions(-) diff --git a/src/Edit.c b/src/Edit.c index cc6f3d863..90370bd4f 100644 --- a/src/Edit.c +++ b/src/Edit.c @@ -64,6 +64,7 @@ extern UINT cpLastFind; extern BOOL bReplaceInitialized; extern BOOL bUseOldStyleBraceMatching; extern BOOL bSkipUnicodeDetection; +extern BOOL bFindReplCopySelOrClip; static EDITFINDREPLACE efrSave; static BOOL bSwitchedFindReplace = FALSE; @@ -4394,7 +4395,7 @@ void EditGetExcerpt(HWND hwnd,LPWSTR lpszExcerpt,DWORD cchExcerpt) else { int iLine = SendMessage(hwnd,SCI_LINEFROMPOSITION,(WPARAM)iCurPos,0); tr.chrg.cpMin = SendMessage(hwnd,SCI_POSITIONFROMLINE,(WPARAM)iLine,0); - tr.chrg.cpMax = min(SendMessage(hwnd,SCI_GETLINEENDPOSITION,(WPARAM)iLine,0),(LONG)(tr.chrg.cpMin + COUNTOF(tch))); + tr.chrg.cpMax = min(SendMessage(hwnd,SCI_GETLINEENDPOSITION,(WPARAM)iLine,0),(LONG)(tr.chrg.cpMin + COUNTOF(tchBuf2))); }*/ tr.chrg.cpMax = min((int)SendMessage(hwnd, SCI_GETTEXTLENGTH, 0, 0), tr.chrg.cpMax); @@ -4665,7 +4666,6 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA static RegExResult_t regexMatch = INVALID; - static BOOL bHasFocus = TRUE; static BOOL bFlagsChanged = TRUE; static COLORREF rgbRed = RGB(255, 170, 170); @@ -4679,11 +4679,12 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA static BOOL bSaveOccVisible = FALSE; static BOOL bSaveTFBackSlashes = FALSE; + WCHAR tchBuf[FNDRPL_BUFFER] = { L'\0' }; + switch(umsg) { case WM_INITDIALOG: { - static BOOL bFirstTime = TRUE; iReplacedOccurrences = 0; SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR)lParam); @@ -4705,70 +4706,17 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA EditClearAllMarks(g_hwndEdit, 0, -1); } - // Get the current code page for Unicode conversion - UINT uCPEdit = Encoding_SciGetCodePage(g_hwndEdit); - //const WORD wTabSpacing = (WORD)SendMessage(lpefr->hwnd, SCI_GETTABWIDTH, 0, 0);; // dialog box units //SendDlgItemMessage(hwnd, IDC_FINDTEXT, EM_SETTABSTOPS, 1, (LPARAM)&wTabSpacing); // Load MRUs - WCHAR tch2[FNDRPL_BUFFER] = { L'\0' }; for (int i = 0; i < MRU_Enum(mruFind, 0, NULL, 0); i++) { - MRU_Enum(mruFind, i, tch2, COUNTOF(tch2)); - SendDlgItemMessage(hwnd, IDC_FINDTEXT, CB_ADDSTRING, 0, (LPARAM)tch2); + MRU_Enum(mruFind, i, tchBuf, COUNTOF(tchBuf)); + SendDlgItemMessage(hwnd, IDC_FINDTEXT, CB_ADDSTRING, 0, (LPARAM)tchBuf); } for (int i = 0; i < MRU_Enum(mruReplace, 0, NULL, 0); i++) { - MRU_Enum(mruReplace, i, tch2, COUNTOF(tch2)); - SendDlgItemMessage(hwnd, IDC_REPLACETEXT, CB_ADDSTRING, 0, (LPARAM)tch2); - } - - if (!bSwitchedFindReplace) - { - char *lpszSelection = NULL; - - int cchSelection = (int)SendMessage(lpefr->hwnd, SCI_GETSELECTIONEND, 0, 0) - - (int)SendMessage(lpefr->hwnd, SCI_GETSELECTIONSTART, 0, 0); - - if ((0 < cchSelection) && (cchSelection < FNDRPL_BUFFER)) { - cchSelection = (int)SendMessage(lpefr->hwnd, SCI_GETSELTEXT, 0, 0); - lpszSelection = GlobalAlloc(GPTR, cchSelection + 2); - SendMessage(lpefr->hwnd, SCI_GETSELTEXT, 0, (LPARAM)lpszSelection); - } - else if (cchSelection == 0) { - // nothing is selected in the editor: - // if first time you bring up find/replace dialog, copy content from clipboard to find box - if (bFirstTime) - { - char* pClip = EditGetClipboardText(hwnd, FALSE, NULL, NULL); - if (pClip) { - int len = lstrlenA(pClip); - if (len > 0 && len < FNDRPL_BUFFER) { - lpszSelection = GlobalAlloc(GPTR, len + 2); - StringCchCopyNA(lpszSelection, len + 2, pClip, len); - } - LocalFree(pClip); - } - } - bFirstTime = FALSE; - } - if (lpszSelection) { - // Check lpszSelection and truncate bad chars (CR,LF,VT) - char* lpsz = StrChrA(lpszSelection, 13); - if (lpsz) *lpsz = '\0'; - - lpsz = StrChrA(lpszSelection, 10); - if (lpsz) *lpsz = '\0'; - - lpsz = StrChrA(lpszSelection, 11); - if (lpsz) *lpsz = '\0'; - - SetDlgItemTextA2W(uCPEdit, hwnd, IDC_FINDTEXT, lpszSelection); - GlobalFree(lpszSelection); - } - else { - MRU_Enum(mruFind, 0, tch2, COUNTOF(tch2)); - SetDlgItemText(hwnd, IDC_FINDTEXT, tch2); - } + MRU_Enum(mruReplace, i, tchBuf, COUNTOF(tchBuf)); + SendDlgItemMessage(hwnd, IDC_REPLACETEXT, CB_ADDSTRING, 0, (LPARAM)tchBuf); } SendDlgItemMessage(hwnd, IDC_FINDTEXT, CB_LIMITTEXT, FNDRPL_BUFFER, 0); @@ -4868,10 +4816,10 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA HMENU hmenu = GetSystemMenu(hwnd, FALSE); - GetString(IDS_SAVEPOS, tch2, COUNTOF(tch2)); - InsertMenu(hmenu, 0, MF_BYPOSITION | MF_STRING | MF_ENABLED, IDS_SAVEPOS, tch2); - GetString(IDS_RESETPOS, tch2, COUNTOF(tch2)); - InsertMenu(hmenu, 1, MF_BYPOSITION | MF_STRING | MF_ENABLED, IDS_RESETPOS, tch2); + GetString(IDS_SAVEPOS, tchBuf, COUNTOF(tchBuf)); + InsertMenu(hmenu, 0, MF_BYPOSITION | MF_STRING | MF_ENABLED, IDS_SAVEPOS, tchBuf); + GetString(IDS_RESETPOS, tchBuf, COUNTOF(tchBuf)); + InsertMenu(hmenu, 1, MF_BYPOSITION | MF_STRING | MF_ENABLED, IDS_RESETPOS, tchBuf); InsertMenu(hmenu, 2, MF_BYPOSITION | MF_SEPARATOR, 0, NULL); hBrushRed = CreateSolidBrush(rgbRed); @@ -4902,6 +4850,7 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA iReplacedOccurrences = 0; KillTimer(hwnd, IDT_TIMER_MRKALL); + bFindReplCopySelOrClip = TRUE; } return FALSE; @@ -4929,6 +4878,9 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA bFlagsChanged = TRUE; EditSetTimerMarkAll(hwnd,50); } + //if (LOWORD(wParam) == WA_INACTIVE) { + // //bFindReplCopySelOrClip = TRUE; + //} } return FALSE; @@ -4942,6 +4894,55 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA case IDC_FINDTEXT: case IDC_REPLACETEXT: { + if (bFindReplCopySelOrClip) + { + char *lpszSelection = NULL; + + int cchSelection = (int)SendMessage(lpefr->hwnd, SCI_GETSELECTIONEND, 0, 0) - + (int)SendMessage(lpefr->hwnd, SCI_GETSELECTIONSTART, 0, 0); + + if ((0 < cchSelection) && (cchSelection < FNDRPL_BUFFER)) { + cchSelection = (int)SendMessage(lpefr->hwnd, SCI_GETSELTEXT, 0, 0); + lpszSelection = GlobalAlloc(GPTR, cchSelection + 1); + SendMessage(lpefr->hwnd, SCI_GETSELTEXT, 0, (LPARAM)lpszSelection); + } + else if (cchSelection == 0) { + // nothing is selected in the editor: + // if first time you bring up find/replace dialog, copy content from clipboard to find box + if (bFindReplCopySelOrClip) + { + char* pClip = EditGetClipboardText(hwnd, FALSE, NULL, NULL); + if (pClip) { + int len = lstrlenA(pClip); + if (len > 0 && len < FNDRPL_BUFFER) { + lpszSelection = GlobalAlloc(GPTR, len + 1); + StringCchCopyNA(lpszSelection, len + 1, pClip, len); + } + LocalFree(pClip); + } + } + } + if (lpszSelection) { + // Check lpszSelection and truncate bad chars (CR,LF,VT) + char* lpsz = StrChrA(lpszSelection, 13); + if (lpsz) *lpsz = '\0'; + + lpsz = StrChrA(lpszSelection, 10); + if (lpsz) *lpsz = '\0'; + + lpsz = StrChrA(lpszSelection, 11); + if (lpsz) *lpsz = '\0'; + + SetDlgItemTextA2W(Encoding_SciGetCodePage(g_hwndEdit), hwnd, IDC_FINDTEXT, lpszSelection); + GlobalFree(lpszSelection); + } + else { + MRU_Enum(mruFind, 0, tchBuf, COUNTOF(tchBuf)); + SetDlgItemText(hwnd, IDC_FINDTEXT, tchBuf); + } + bFindReplCopySelOrClip = FALSE; + } + BOOL bEnableF = (GetWindowTextLengthW(GetDlgItem(hwnd, IDC_FINDTEXT)) || CB_ERR != SendDlgItemMessage(hwnd, IDC_FINDTEXT, CB_GETCURSEL, 0, 0)); @@ -4957,10 +4958,6 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA DialogEnableWindow(hwnd, IDC_REPLACEINSEL, bEnableF && bEnableIS); DialogEnableWindow(hwnd, IDC_SWAPSTRG, bEnableF || bEnableR); - if (!bHasFocus) { - //TODO: copy selection/clipboard - } - bHasFocus = TRUE; if (HIWORD(wParam) == CBN_CLOSEUP) { LONG lSelEnd; @@ -5178,20 +5175,20 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA lpefr->bReplaceClose = (IsDlgButtonChecked(hwnd, IDC_FINDCLOSE) == BST_CHECKED) ? TRUE : FALSE; } - WCHAR tch[FNDRPL_BUFFER] = { L'\0' }; + WCHAR tchBuf2[FNDRPL_BUFFER] = { L'\0' }; if (!bSwitchedFindReplace) { // Save MRUs if (StringCchLenA(lpefr->szFind, COUNTOF(lpefr->szFind))) { if (GetDlgItemTextW2A(CP_UTF8, hwnd, IDC_FINDTEXT, lpefr->szFindUTF8, COUNTOF(lpefr->szFindUTF8))) { - GetDlgItemText(hwnd, IDC_FINDTEXT, tch, COUNTOF(tch)); - MRU_Add(mruFind, tch, 0, 0, NULL); + GetDlgItemText(hwnd, IDC_FINDTEXT, tchBuf2, COUNTOF(tchBuf2)); + MRU_Add(mruFind, tchBuf2, 0, 0, NULL); } } if (StringCchLenA(lpefr->szReplace, COUNTOF(lpefr->szReplace))) { if (GetDlgItemTextW2A(CP_UTF8, hwnd, IDC_REPLACETEXT, lpefr->szReplaceUTF8, COUNTOF(lpefr->szReplaceUTF8))) { - GetDlgItemText(hwnd, IDC_REPLACETEXT, tch, COUNTOF(tch)); - MRU_Add(mruReplace, tch, 0, 0, NULL); + GetDlgItemText(hwnd, IDC_REPLACETEXT, tchBuf2, COUNTOF(tchBuf2)); + MRU_Add(mruReplace, tchBuf2, 0, 0, NULL); } } else @@ -5208,12 +5205,12 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA SendDlgItemMessage(hwnd, IDC_REPLACETEXT, CB_RESETCONTENT, 0, 0); for (int i = 0; i < MRU_Enum(mruFind, 0, NULL, 0); i++) { - MRU_Enum(mruFind, i, tch, COUNTOF(tch)); - SendDlgItemMessage(hwnd, IDC_FINDTEXT, CB_ADDSTRING, 0, (LPARAM)tch); + MRU_Enum(mruFind, i, tchBuf2, COUNTOF(tchBuf2)); + SendDlgItemMessage(hwnd, IDC_FINDTEXT, CB_ADDSTRING, 0, (LPARAM)tchBuf2); } for (int i = 0; i < MRU_Enum(mruReplace, 0, NULL, 0); i++) { - MRU_Enum(mruReplace, i, tch, COUNTOF(tch)); - SendDlgItemMessage(hwnd, IDC_REPLACETEXT, CB_ADDSTRING, 0, (LPARAM)tch); + MRU_Enum(mruReplace, i, tchBuf2, COUNTOF(tchBuf2)); + SendDlgItemMessage(hwnd, IDC_REPLACETEXT, CB_ADDSTRING, 0, (LPARAM)tchBuf2); } SetDlgItemTextA2W(CP_UTF8, hwnd, IDC_FINDTEXT, lpefr->szFindUTF8); diff --git a/src/Notepad3.c b/src/Notepad3.c index 603dcf8b4..129ad0676 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -116,6 +116,7 @@ BOOL bEnableSaveSettings; BOOL bSaveRecentFiles; BOOL bPreserveCaretPos; BOOL bSaveFindReplace; +BOOL bFindReplCopySelOrClip = TRUE; WCHAR tchLastSaveCopyDir[MAX_PATH] = { L'\0' }; WCHAR tchOpenWithDir[MAX_PATH] = { L'\0' }; WCHAR tchFavoritesDir[MAX_PATH] = { L'\0' }; @@ -540,6 +541,8 @@ int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpCmdLine,int n UpdateLineNumberWidth(); ObserveNotifyChangeEvent(); + + bFindReplCopySelOrClip = TRUE; while (GetMessage(&msg,NULL,0,0)) { @@ -3664,8 +3667,10 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam) case IDM_EDIT_FIND: - if (!IsWindow(g_hwndDlgFindReplace)) - g_hwndDlgFindReplace = EditFindReplaceDlg(g_hwndEdit,&g_efrData,FALSE); + bFindReplCopySelOrClip = TRUE; + if (!IsWindow(g_hwndDlgFindReplace)) { + g_hwndDlgFindReplace = EditFindReplaceDlg(g_hwndEdit, &g_efrData, FALSE); + } else { if (GetDlgItem(g_hwndDlgFindReplace,IDC_REPLACE)) { SendMessage(g_hwndDlgFindReplace,WM_COMMAND,MAKELONG(IDMSG_SWITCHTOFIND,1),0); @@ -3682,6 +3687,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam) case IDM_EDIT_REPLACE: + bFindReplCopySelOrClip = TRUE; if (!IsWindow(g_hwndDlgFindReplace)) g_hwndDlgFindReplace = EditFindReplaceDlg(g_hwndEdit,&g_efrData,TRUE); else { From f40d06a8a0ec45aaf59c86366f381671f2ca8e9e Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Wed, 21 Feb 2018 22:29:12 +0100 Subject: [PATCH 4/7] + fix: bug detecting find/replace dialog is foreground or not --- src/Edit.c | 23 +++++++++-------------- src/Notepad3.c | 15 ++++++++------- 2 files changed, 17 insertions(+), 21 deletions(-) diff --git a/src/Edit.c b/src/Edit.c index 90370bd4f..b43424636 100644 --- a/src/Edit.c +++ b/src/Edit.c @@ -4807,7 +4807,6 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA else SetDlgPos(hwnd, xFindReplaceDlg, yFindReplaceDlg); } - else { SetDlgPos(hwnd, xFindReplaceDlgSave, yFindReplaceDlgSave); bSwitchedFindReplace = FALSE; @@ -4850,7 +4849,6 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA iReplacedOccurrences = 0; KillTimer(hwnd, IDT_TIMER_MRKALL); - bFindReplCopySelOrClip = TRUE; } return FALSE; @@ -4879,7 +4877,7 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA EditSetTimerMarkAll(hwnd,50); } //if (LOWORD(wParam) == WA_INACTIVE) { - // //bFindReplCopySelOrClip = TRUE; + // bFindReplCopySelOrClip = TRUE; //} } return FALSE; @@ -4894,7 +4892,7 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA case IDC_FINDTEXT: case IDC_REPLACETEXT: { - if (bFindReplCopySelOrClip) + if (bFindReplCopySelOrClip) { char *lpszSelection = NULL; @@ -4909,17 +4907,14 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA else if (cchSelection == 0) { // nothing is selected in the editor: // if first time you bring up find/replace dialog, copy content from clipboard to find box - if (bFindReplCopySelOrClip) - { - char* pClip = EditGetClipboardText(hwnd, FALSE, NULL, NULL); - if (pClip) { - int len = lstrlenA(pClip); - if (len > 0 && len < FNDRPL_BUFFER) { - lpszSelection = GlobalAlloc(GPTR, len + 1); - StringCchCopyNA(lpszSelection, len + 1, pClip, len); - } - LocalFree(pClip); + char* pClip = EditGetClipboardText(hwnd, FALSE, NULL, NULL); + if (pClip) { + int len = lstrlenA(pClip); + if (len > 0 && len < FNDRPL_BUFFER) { + lpszSelection = GlobalAlloc(GPTR, len + 1); + StringCchCopyNA(lpszSelection, len + 1, pClip, len); } + LocalFree(pClip); } } if (lpszSelection) { diff --git a/src/Notepad3.c b/src/Notepad3.c index 129ad0676..472b4c748 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -542,8 +542,6 @@ int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpCmdLine,int n UpdateLineNumberWidth(); ObserveNotifyChangeEvent(); - bFindReplCopySelOrClip = TRUE; - while (GetMessage(&msg,NULL,0,0)) { if (IsWindow(g_hwndDlgFindReplace) && ((msg.hwnd == g_hwndDlgFindReplace) || IsChild(g_hwndDlgFindReplace, msg.hwnd))) @@ -3667,11 +3665,12 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam) case IDM_EDIT_FIND: - bFindReplCopySelOrClip = TRUE; if (!IsWindow(g_hwndDlgFindReplace)) { + bFindReplCopySelOrClip = TRUE; g_hwndDlgFindReplace = EditFindReplaceDlg(g_hwndEdit, &g_efrData, FALSE); } else { + bFindReplCopySelOrClip = (GetForegroundWindow() != g_hwndDlgFindReplace); if (GetDlgItem(g_hwndDlgFindReplace,IDC_REPLACE)) { SendMessage(g_hwndDlgFindReplace,WM_COMMAND,MAKELONG(IDMSG_SWITCHTOFIND,1),0); DestroyWindow(g_hwndDlgFindReplace); @@ -3687,10 +3686,12 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam) case IDM_EDIT_REPLACE: - bFindReplCopySelOrClip = TRUE; - if (!IsWindow(g_hwndDlgFindReplace)) - g_hwndDlgFindReplace = EditFindReplaceDlg(g_hwndEdit,&g_efrData,TRUE); + if (!IsWindow(g_hwndDlgFindReplace)) { + bFindReplCopySelOrClip = TRUE; + g_hwndDlgFindReplace = EditFindReplaceDlg(g_hwndEdit, &g_efrData, TRUE); + } else { + bFindReplCopySelOrClip = (GetForegroundWindow() != g_hwndDlgFindReplace); if (!GetDlgItem(g_hwndDlgFindReplace,IDC_REPLACE)) { SendMessage(g_hwndDlgFindReplace,WM_COMMAND,MAKELONG(IDMSG_SWITCHTOREPLACE,1),0); DestroyWindow(g_hwndDlgFindReplace); @@ -3698,7 +3699,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam) } else { SetForegroundWindow(g_hwndDlgFindReplace); - PostMessage(g_hwndDlgFindReplace,WM_NEXTDLGCTL,(WPARAM)(GetDlgItem(g_hwndDlgFindReplace,IDC_FINDTEXT)),1); + PostMessage(g_hwndDlgFindReplace,WM_NEXTDLGCTL,(WPARAM)(GetDlgItem(g_hwndDlgFindReplace, IDC_FINDTEXT)),1); } UpdateStatusbar(); } From 8bb2b503c6645e1f2813f599e09f9cec17f0865f Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Wed, 21 Feb 2018 22:38:28 +0100 Subject: [PATCH 5/7] + fix: initial .ini file: corrections for labeling toolbar icons --- Build/Notepad3.ini | Bin 5048 -> 5062 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Build/Notepad3.ini b/Build/Notepad3.ini index ec1e76f8a1301c517534c9e8b27cdeeeddfb6ecf..15789466c9b65abae084cb0bb6cefa21250451dc 100644 GIT binary patch delta 44 ycmdm?eoTFX2@hugLlHwJLmorPWLq9>UPp!$AXH!|VaR7tnC!_Ty}60Uj2!?1j|!9k delta 30 mcmX@6zC(S32@j_;Lk>eKLn1@bWLqBX$zD8Cn$~!y9h%7 From eb1b8e350b82e206a5ce4e4b9ca03d716aaea6bd Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Wed, 21 Feb 2018 23:12:14 +0100 Subject: [PATCH 6/7] + cleanup code --- src/Edit.c | 7 +++---- src/SciCall.h | 4 +++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/Edit.c b/src/Edit.c index b43424636..360af8cc5 100644 --- a/src/Edit.c +++ b/src/Edit.c @@ -239,6 +239,9 @@ HWND EditCreate(HWND hwndParent) SendMessage(hwnd, SCI_INDICSETALPHA, INDIC_NP3_BAD_BRACE, 120); SendMessage(hwnd, SCI_INDICSETOUTLINEALPHA, INDIC_NP3_BAD_BRACE, 120); + // paste into rectangular selection + SendMessage(hwnd, SCI_SETMULTIPASTE, SC_MULTIPASTE_EACH, 0); + // No SC_AUTOMATICFOLD_CLICK, performed by SendMessage(hwnd, SCI_SETAUTOMATICFOLD, (WPARAM)(SC_AUTOMATICFOLD_SHOW | SC_AUTOMATICFOLD_CHANGE), 0); @@ -805,8 +808,6 @@ BOOL EditPasteClipboard(HWND hwnd, BOOL bSwapClipBoard) if (SciCall_IsSelectionEmpty() || (lineCount <= 1)) { - SciCall_SetMultiPaste(SC_MULTIPASTE_EACH); - if (SciCall_IsSelectionEmpty()) { SciCall_Paste(); @@ -833,8 +834,6 @@ BOOL EditPasteClipboard(HWND hwnd, BOOL bSwapClipBoard) EditSelectEx(hwnd, iCurPos, iCurPos); } } - - SciCall_SetMultiPaste(SC_MULTIPASTE_ONCE); } else { if (SciCall_IsSelectionRectangle()) diff --git a/src/SciCall.h b/src/SciCall.h index 5d9219f18..29be7f646 100644 --- a/src/SciCall.h +++ b/src/SciCall.h @@ -89,6 +89,7 @@ __forceinline LRESULT SciCall_##fn(type1 var1, type2 var2) { \ DeclareSciCallR0(IsDocModified, GETMODIFY, bool); DeclareSciCallR0(IsSelectionEmpty, GETSELECTIONEMPTY, bool); DeclareSciCallR0(IsSelectionRectangle, SELECTIONISRECTANGLE, bool); + DeclareSciCallR0(CanPaste, CANPASTE, bool); DeclareSciCallR0(GetCurrentPos, GETCURRENTPOS, DocPos); @@ -238,8 +239,9 @@ DeclareSciCallV1(SetTechnology, SETTECHNOLOGY, int, technology); // // Utilities // -#define IsSelThinRectangle() (SciCall_GetSelectionMode() == SC_SEL_THIN) +#define IsStreamSelected() (SciCall_GetSelectionMode() == SC_SEL_STREAM) #define IsFullLineSelected() (SciCall_GetSelectionMode() == SC_SEL_LINES) +#define IsThinRectangleSelected() (SciCall_GetSelectionMode() == SC_SEL_THIN) #define IsSingleLineSelection() \ (SciCall_LineFromPosition(SciCall_GetCurrentPos()) == SciCall_LineFromPosition(SciCall_GetAnchor())) From e619610b69643ca7e5f04f41463054299d3e914e Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Thu, 22 Feb 2018 08:45:37 +0100 Subject: [PATCH 7/7] + chg: revert compiler optimization settings back to "Maximize Speed (/O2)" combine with 2nd opt. "Favor Size or Speed: Favor small code (/Os)" --- minipath/minipath.vcxproj | 12 ++++++++---- np3encrypt/np3encrypt.vcxproj | 4 ++++ scintilla/Scintilla.vcxproj | 8 ++++---- src/Notepad3.vcxproj | 8 ++++---- 4 files changed, 20 insertions(+), 12 deletions(-) diff --git a/minipath/minipath.vcxproj b/minipath/minipath.vcxproj index c826becc0..8af5a5022 100644 --- a/minipath/minipath.vcxproj +++ b/minipath/minipath.vcxproj @@ -95,6 +95,7 @@ true + Fast /MACHINE:I386 %(AdditionalOptions) @@ -150,8 +151,9 @@ true true - Full - Speed + MaxSpeed + Size + Fast /MACHINE:I386 %(AdditionalOptions) @@ -207,6 +209,7 @@ WIN32;_WINDOWS;_DEBUG;DEBUG;%(PreprocessorDefinitions) Level4 true + Fast false @@ -239,9 +242,10 @@ Level4 true true - Full - Speed + MaxSpeed + Size true + Fast false diff --git a/np3encrypt/np3encrypt.vcxproj b/np3encrypt/np3encrypt.vcxproj index 86da5c409..b6b43cbf8 100644 --- a/np3encrypt/np3encrypt.vcxproj +++ b/np3encrypt/np3encrypt.vcxproj @@ -102,6 +102,7 @@ true Speed true + Fast Console @@ -119,6 +120,7 @@ WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true + Fast Console @@ -133,6 +135,7 @@ Disabled _DEBUG;_CONSOLE;%(PreprocessorDefinitions) true + Fast Console @@ -151,6 +154,7 @@ Speed true + Fast Console diff --git a/scintilla/Scintilla.vcxproj b/scintilla/Scintilla.vcxproj index 4120d15a7..d45c01bce 100644 --- a/scintilla/Scintilla.vcxproj +++ b/scintilla/Scintilla.vcxproj @@ -168,7 +168,7 @@ ProgramDatabase StreamingSIMDExtensions2 true - Full + MaxSpeed NotUsing _SCL_SECURE_NO_WARNINGS;SCI_OWNREGEX;ONIG_EXTERN=extern;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES;STATIC_BUILD;SCI_LEXER;USE_D2D;%(PreprocessorDefinitions) MultiThreaded @@ -177,7 +177,7 @@ Fast stdcpplatest - Speed + Size true @@ -189,7 +189,7 @@ include;lexlib;src;../onigmo;../onigmo/win32;%(AdditionalIncludeDirectories) ProgramDatabase true - Full + MaxSpeed NotUsing _SCL_SECURE_NO_WARNINGS;SCI_OWNREGEX;ONIG_EXTERN=extern;_WIN64;NDEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES;STATIC_BUILD;SCI_LEXER;USE_D2D;%(PreprocessorDefinitions) MultiThreaded @@ -197,7 +197,7 @@ true Fast stdcpplatest - Speed + Size true diff --git a/src/Notepad3.vcxproj b/src/Notepad3.vcxproj index 4014f1bb7..54fe39b6f 100644 --- a/src/Notepad3.vcxproj +++ b/src/Notepad3.vcxproj @@ -204,7 +204,7 @@ ..\scintilla\include;..\scintilla\lexlib;..\scintilla\src;%(AdditionalIncludeDirectories) true - Full + MaxSpeed WIN32;STATIC_BUILD;SCI_LEXER;NDEBUG;%(PreprocessorDefinitions) MultiThreaded Level4 @@ -213,7 +213,7 @@ StreamingSIMDExtensions2 Fast stdcpp17 - Speed + Size true @@ -259,7 +259,7 @@ ..\scintilla\include;..\scintilla\lexlib;..\scintilla\src;%(AdditionalIncludeDirectories) true - Full + MaxSpeed _WIN64;STATIC_BUILD;SCI_LEXER;NDEBUG;%(PreprocessorDefinitions) MultiThreaded Level4 @@ -267,7 +267,7 @@ true Fast stdcpp17 - Speed + Size true