+ chg: scroll back to initial view position, if find/repl. dialog has been opened unintntional

This commit is contained in:
Rainer Kottenhoff 2018-05-29 11:41:43 +02:00
parent fb1ab5cfeb
commit 8fa0a8365d
2 changed files with 35 additions and 27 deletions

View File

@ -4936,8 +4936,8 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA
{
static LPEDITFINDREPLACE sg_pefrData = NULL;
static DocPos s_InitialSearchStart = 0;
static DocPos s_InitialAnchortPos = 0;
static DocPos s_InitialCaretPos = 0;
static DocLn s_InitialTopLine = -1;
static RegExResult_t regexMatch = INVALID;
static COLORREF rgbRed = RGB(255, 170, 170);
@ -5111,14 +5111,11 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA
hBrushGreen = CreateSolidBrush(rgbGreen);
hBrushBlue = CreateSolidBrush(rgbBlue);
EditEnsureSelectionVisible(hwnd);
s_InitialSearchStart = SciCall_GetSelectionStart();
SetTimer(hwnd, IDT_TIMER_MRKALL, USER_TIMER_MINIMUM, MQ_ExecuteNext);
_SetSearchFlags(hwnd, sg_pefrData);
s_InitialSearchStart = SciCall_GetSelectionStart();
s_InitialAnchortPos = SciCall_GetAnchor();
s_InitialCaretPos = SciCall_GetCurrentPos();
_DelayMarkAll(hwnd, 50, s_InitialSearchStart);
}
return true;
@ -5145,8 +5142,10 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA
}
MarkAllOccurrences(50, true);
EditSelectEx(g_hwndEdit, s_InitialAnchortPos, s_InitialCaretPos, -1, -1);
EditEnsureSelectionVisible(g_hwndEdit);
if (s_InitialTopLine >= 0) {
SciCall_SetFirstVisibleLine(s_InitialTopLine);
s_InitialTopLine = -1;
}
CmdMessageQueue_t* pmqc = NULL;
CmdMessageQueue_t* dummy;
@ -5167,18 +5166,31 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA
case WM_ACTIVATE:
{
s_InitialSearchStart = SciCall_GetSelectionStart();
s_InitialAnchortPos = SciCall_GetAnchor();
s_InitialCaretPos = SciCall_GetCurrentPos();
switch (LOWORD(wParam))
{
case WA_INACTIVE:
//~s_InitialTopLine = -1;
//~g_bFindReplCopySelOrClip = true;
break;
DialogEnableWindow(hwnd, IDC_REPLACEINSEL, !SciCall_IsSelectionEmpty());
if (sg_pefrData->bMarkOccurences) {
_DelayMarkAll(hwnd, 50, s_InitialSearchStart);
case WA_CLICKACTIVE:
// mouse click activation
case WA_ACTIVE:
default:
s_InitialSearchStart = SciCall_GetSelectionStart();
if (s_InitialTopLine < 0) {
s_InitialTopLine = SciCall_DocLineFromVisible(SciCall_GetFirstVisibleLine());
}
DialogEnableWindow(hwnd, IDC_REPLACEINSEL, !SciCall_IsSelectionEmpty());
if (sg_pefrData->bMarkOccurences) {
_DelayMarkAll(hwnd, 50, s_InitialSearchStart);
}
break;
}
//if (LOWORD(wParam) == WA_INACTIVE) {
// g_bFindReplCopySelOrClip = true;
//}
}
return false;
@ -5191,8 +5203,7 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA
case IDC_DOC_MODIFIED:
sg_pefrData->bStateChanged = true;
s_InitialSearchStart = SciCall_GetSelectionStart();
s_InitialAnchortPos = SciCall_GetAnchor();
s_InitialCaretPos = SciCall_GetCurrentPos();
s_InitialTopLine = -1;
break;
case IDC_FINDTEXT:
@ -5297,7 +5308,7 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA
InvalidateRect(GetDlgItem(hwnd, IDC_FINDTEXT), NULL, true);
if (match != MATCH) {
EditClearAllOccurrenceMarkers(g_hwndEdit);
EditSelectEx(g_hwndEdit, s_InitialAnchortPos, s_InitialCaretPos, -1, -1);
if (s_InitialTopLine >= 0) { SciCall_SetFirstVisibleLine(s_InitialTopLine); }
}
if (EditToggleView(g_hwndEdit, false)) { EditHideNotMarkedLineRange(g_hwndEdit, -1, -1, true); }
_OBSERVE_NOTIFY_CHANGE_;
@ -5514,8 +5525,7 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA
if (!SciCall_IsSelectionEmpty()) { EditJumpToSelectionEnd(hwnd); }
EditFindNext(sg_pefrData->hwnd, sg_pefrData, (LOWORD(wParam) == IDACC_SELTONEXT), HIBYTE(GetKeyState(VK_F3)));
s_InitialSearchStart = SciCall_GetSelectionStart();
s_InitialAnchortPos = SciCall_GetAnchor();
s_InitialCaretPos = SciCall_GetCurrentPos();
s_InitialTopLine = -1;
break;
case IDC_FINDPREV: // find previous
@ -5524,8 +5534,7 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA
if (!SciCall_IsSelectionEmpty()) { EditJumpToSelectionStart(hwnd); }
EditFindPrev(sg_pefrData->hwnd, sg_pefrData, (LOWORD(wParam) == IDACC_SELTOPREV), HIBYTE(GetKeyState(VK_F3)));
s_InitialSearchStart = SciCall_GetSelectionStart();
s_InitialAnchortPos = SciCall_GetAnchor();
s_InitialCaretPos = SciCall_GetCurrentPos();
s_InitialTopLine = -1;
break;
case IDC_REPLACE:

View File

@ -258,11 +258,10 @@ DeclareSciCallR0(GetXoffset, GETXOFFSET, int)
DeclareSciCallV1(SetXoffset, SETXOFFSET, int, offset)
DeclareSciCallV2(SetVisiblePolicy, SETVISIBLEPOLICY, int, flags, DocLn, lines)
DeclareSciCallR0(LinesOnScreen, LINESONSCREEN, DocLn)
DeclareSciCallR0(GetFirstVisibleLine, GETFIRSTVISIBLELINE, DocLn)
DeclareSciCallV1(SetFirstVisibleLine, SETFIRSTVISIBLELINE, DocLn, line)
DeclareSciCallR1(VisibleFromDocLine, VISIBLEFROMDOCLINE, DocLn, DocLn, line)
DeclareSciCallR1(DocLineFromVisible, DOCLINEFROMVISIBLE, DocLn, DocLn, line)