mirror of
https://github.com/rizonesoft/Notepad3.git
synced 2026-06-14 21:09:05 +08:00
+ fix: behavior of replace (dialog) in case of multi-line selection
This commit is contained in:
parent
5a6ad071e0
commit
e2487e3891
25
src/Edit.c
25
src/Edit.c
@ -4972,7 +4972,6 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA
|
||||
static int iSaveMarkOcc = -1;
|
||||
static bool bSaveOccVisible = false;
|
||||
static bool bSaveTFBackSlashes = false;
|
||||
static bool _bRestoreMarkOcc = true;
|
||||
|
||||
WCHAR tchBuf[FNDRPL_BUFFER] = { L'\0' };
|
||||
|
||||
@ -4994,7 +4993,6 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA
|
||||
|
||||
iSaveMarkOcc = s_bSwitchedFindReplace ? iSaveMarkOcc : Settings.MarkOccurrences;
|
||||
bSaveOccVisible = s_bSwitchedFindReplace ? bSaveOccVisible : Settings.MarkOccurrencesMatchVisible;
|
||||
_bRestoreMarkOcc = sg_pefrData->bMarkOccurences;
|
||||
|
||||
//const WORD wTabSpacing = (WORD)SendMessage(sg_pefrData->hwnd, SCI_GETTABWIDTH, 0, 0);; // dialog box units
|
||||
//SendDlgItemMessage(hwnd, IDC_FINDTEXT, EM_SETTABSTOPS, 1, (LPARAM)&wTabSpacing);
|
||||
@ -5015,9 +5013,9 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA
|
||||
COMBOBOXINFO infoF = { sizeof(COMBOBOXINFO) };
|
||||
GetComboBoxInfo(GetDlgItem(hwnd, IDC_FINDTEXT), &infoF);
|
||||
//SHAutoComplete(infoF.hwndItem, SHACF_DEFAULT);
|
||||
if (infoF.hwndItem)
|
||||
if (infoF.hwndItem) {
|
||||
SHAutoComplete(infoF.hwndItem, SHACF_FILESYS_ONLY | SHACF_AUTOAPPEND_FORCE_OFF | SHACF_AUTOSUGGEST_FORCE_OFF);
|
||||
|
||||
}
|
||||
if (!GetWindowTextLengthW(GetDlgItem(hwnd, IDC_FINDTEXT))) {
|
||||
SetDlgItemTextMB2W(hwnd, IDC_FINDTEXT, sg_pefrData->szFind);
|
||||
}
|
||||
@ -5064,12 +5062,6 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA
|
||||
DialogEnableWindow(hwnd, IDC_DOT_MATCH_ALL, false);
|
||||
}
|
||||
|
||||
// switch off "mark all occ" in case of initial replace dialog on multiline selection
|
||||
if (GetDlgItem(hwnd, IDC_REPLACE) && !s_bSwitchedFindReplace) {
|
||||
if (Sci_IsMultiLineSelection()) {
|
||||
sg_pefrData->bMarkOccurences = false;
|
||||
}
|
||||
}
|
||||
if (sg_pefrData->bMarkOccurences) {
|
||||
Settings.MarkOccurrences = 0;
|
||||
Settings.MarkOccurrencesMatchVisible = false;
|
||||
@ -5145,6 +5137,7 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA
|
||||
hBrushBlue = CreateSolidBrush(rgbBlueColorRef);
|
||||
|
||||
SetTimer(hwnd, IDT_TIMER_MRKALL, USER_TIMER_MINIMUM, MQ_ExecuteNext);
|
||||
_DelayMarkAll(hwnd, 0, s_InitialSearchStart);
|
||||
}
|
||||
return true;
|
||||
|
||||
@ -5163,7 +5156,6 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA
|
||||
}
|
||||
}
|
||||
sg_pefrData->szFind[0] = '\0';
|
||||
sg_pefrData->bMarkOccurences = _bRestoreMarkOcc;
|
||||
|
||||
Settings.MarkOccurrences = iSaveMarkOcc;
|
||||
Settings.MarkOccurrencesMatchVisible = bSaveOccVisible;
|
||||
@ -5265,7 +5257,7 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA
|
||||
tchBuf[0] = L'\0';
|
||||
|
||||
DocPos const cchSelection = SciCall_GetSelText(NULL);
|
||||
if (1 < cchSelection) {
|
||||
if ((1 < cchSelection) && !(GetDlgItem(hwnd, IDC_REPLACE) && Sci_IsMultiLineSelection())) {
|
||||
lpszSelection = AllocMem(cchSelection, HEAP_ZERO_MEMORY);
|
||||
SciCall_GetSelText(lpszSelection);
|
||||
}
|
||||
@ -5369,7 +5361,12 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA
|
||||
if (s_anyMatch != match) { s_anyMatch = match; }
|
||||
// we have to set Sci's regex instance to first find (have substitution in place)
|
||||
DocPos const iStartPos = (DocPos)lParam;
|
||||
s_fwrdMatch = _FindHasMatch(Globals.hwndEdit, sg_pefrData, iStartPos, false, true);
|
||||
if (!GetDlgItem(hwnd, IDC_REPLACE) || !Sci_IsMultiLineSelection()) {
|
||||
s_fwrdMatch = _FindHasMatch(Globals.hwndEdit, sg_pefrData, iStartPos, false, true);
|
||||
}
|
||||
else {
|
||||
s_fwrdMatch = match;
|
||||
}
|
||||
sg_pefrData->bStateChanged = false;
|
||||
InvalidateRect(GetDlgItem(hwnd, IDC_FINDTEXT), NULL, true);
|
||||
if (match != MATCH) {
|
||||
@ -5401,7 +5398,6 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA
|
||||
{
|
||||
iSaveMarkOcc = Settings.MarkOccurrences;
|
||||
bSaveOccVisible = Settings.MarkOccurrencesMatchVisible;
|
||||
_bRestoreMarkOcc = true;
|
||||
|
||||
Settings.MarkOccurrences = 0;
|
||||
Settings.MarkOccurrencesMatchVisible = false;
|
||||
@ -5414,7 +5410,6 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA
|
||||
else { // switched OFF
|
||||
Settings.MarkOccurrences = iSaveMarkOcc;
|
||||
Settings.MarkOccurrencesMatchVisible = bSaveOccVisible;
|
||||
_bRestoreMarkOcc = false;
|
||||
//DialogEnableWindow(hwnd, IDC_TOGGLE_VISIBILITY, (Settings.MarkOccurrences > 0) && !Settings.MarkOccurrencesMatchVisible);
|
||||
DialogEnableWindow(hwnd, IDC_TOGGLE_VISIBILITY, false);
|
||||
if (EditToggleView(Globals.hwndEdit, false)) {
|
||||
|
||||
@ -470,7 +470,7 @@ DeclareSciCallR0(IsSelectionEmpty, GETSELECTIONEMPTY, bool)
|
||||
DeclareSciCallR0(IsSelectionRectangle, SELECTIONISRECTANGLE, bool)
|
||||
|
||||
#define Sci_IsSingleLineSelection() (SciCall_LineFromPosition(SciCall_GetSelectionEnd()) == SciCall_LineFromPosition(SciCall_GetSelectionStart()))
|
||||
#define Sci_IsMultiLineSelection() ((SciCall_LineFromPosition(SciCall_GetSelectionEnd()) - SciCall_LineFromPosition(SciCall_GetSelectionStart())) >= 1)
|
||||
#define Sci_IsMultiLineSelection() ((SciCall_LineFromPosition(SciCall_GetSelectionEnd()) - SciCall_LineFromPosition(SciCall_GetSelectionStart())) > 1)
|
||||
|
||||
#define Sci_IsForwardSelection() (SciCall_GetAnchor() <= SciCall_GetCurrentPos())
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user