diff --git a/src/Edit.c b/src/Edit.c
index b8f39dcdd..f18ea5a55 100644
--- a/src/Edit.c
+++ b/src/Edit.c
@@ -73,6 +73,7 @@ extern bool bFindReplCopySelOrClip;
static EDITFINDREPLACE efrSave;
static bool bSwitchedFindReplace = false;
+static bool bHideNonMatchedLines = false;
extern int xFindReplaceDlg;
extern int yFindReplaceDlg;
@@ -4715,12 +4716,24 @@ static RegExResult_t __fastcall _FindHasMatch(HWND hwnd, LPCEDITFINDREPLACE lpef
DocPos end = iTextLength;
const DocPos iPos = _FindInTarget(hwnd, szFind, slen, (int)(lpefr->fuFlags), &start, &end, false, FRMOD_IGNORE);
+ static DocLn lastScrollToLn = -1;
+
if (bFirstMatchOnly && !bReplaceInitialized) {
- if (iPos >= 0) {
- EditScrollTo(hwnd, SciCall_LineFromPosition(iPos), true);
- }
- else {
- EditScrollTo(hwnd, SciCall_LineFromPosition(iStart), false);
+ if (!bHideNonMatchedLines) {
+ if (iPos >= 0) {
+ const DocLn scrollToLn = SciCall_LineFromPosition(iPos);
+ if (scrollToLn != lastScrollToLn) {
+ EditScrollTo(hwnd, scrollToLn, true);
+ lastScrollToLn = scrollToLn;
+ }
+ }
+ else {
+ const DocLn scrollToLn = SciCall_LineFromPosition(iStart);
+ if (scrollToLn != lastScrollToLn) {
+ EditScrollTo(hwnd, scrollToLn, false);
+ lastScrollToLn = scrollToLn;
+ }
+ }
}
}
else // mark all matches
@@ -4765,7 +4778,6 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA
static RegExResult_t regexMatch = INVALID;
static bool bFlagsChanged = true;
- static bool bHideNonMatchedLines = false;
static COLORREF rgbRed = RGB(255, 170, 170);
static COLORREF rgbGreen = RGB(170, 255, 170);
@@ -5163,10 +5175,14 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA
EnableCmd(GetMenu(g_hwndMain), IDM_VIEW_HYPERLINKHOTSPOTS, bHyperlinkHotspot);
bFlagsChanged = true;
_SetTimerMarkAll(hwnd, 0);
- if (bHideNonMatchedLines)
+ if (bHideNonMatchedLines) {
EditScrollTo(g_hwndEdit, 0, false);
- else
+ SendMessage(g_hwndEdit, SCI_SETREADONLY, true, 0);
+ }
+ else {
EditScrollTo(g_hwndEdit, Sci_GetCurrentLine(), true);
+ SendMessage(g_hwndEdit, SCI_SETREADONLY, false, 0);
+ }
}
break;
@@ -6408,12 +6424,10 @@ void EditUpdateUrlHotspots(HWND hwnd, DocPos startPos, DocPos endPos, bool bActi
//
void EditHideNotMarkedLineRange(HWND hwnd, DocPos iStartPos, DocPos iEndPos, bool bHide)
{
- static bool bLastState = true;
- //UNUSED(hwnd);
+ UNUSED(hwnd);
if (!bHide) {
//SendMessage(hwnd, SCI_FOLDALL, (WPARAM)SC_FOLDACTION_EXPAND, 0);
- bLastState = bHide;
return;
}
@@ -6442,6 +6456,7 @@ void EditHideNotMarkedLineRange(HWND hwnd, DocPos iStartPos, DocPos iEndPos, boo
const int baseLevel = SC_FOLDLEVELBASE;
+ const int headerLevel = SC_FOLDLEVELBASE | SC_FOLDLEVELHEADERFLAG;
const int hiddenLevel = (SC_FOLDLEVELBASE + 1) | SC_FOLDLEVELWHITEFLAG;
bool bHdrFlag = false;
@@ -6456,7 +6471,7 @@ void EditHideNotMarkedLineRange(HWND hwnd, DocPos iStartPos, DocPos iEndPos, boo
}
if (bIsHidden) {
if (!bHdrFlag) {
- SendMessage(hwnd, SCI_SETFOLDLEVEL, (WPARAM)iLine, (LPARAM)(baseLevel | SC_FOLDLEVELHEADERFLAG));
+ SendMessage(hwnd, SCI_SETFOLDLEVEL, (WPARAM)iLine, (LPARAM)headerLevel);
bHdrFlag = true;
}
else
diff --git a/src/Notepad3.c b/src/Notepad3.c
index 6c7c20f62..c64974359 100644
--- a/src/Notepad3.c
+++ b/src/Notepad3.c
@@ -2594,11 +2594,6 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_FILE_READONLY:
- //bReadOnly = (bReadOnly) ? false : true;
- //SendMessage(g_hwndEdit,SCI_SETREADONLY,bReadOnly,0);
- //UpdateToolbar();
- //UpdateStatusbar();
-
if (StringCchLenW(g_wchCurFile,COUNTOF(g_wchCurFile)))
{
DWORD dwFileAttributes = GetFileAttributes(g_wchCurFile);
diff --git a/src/Notepad3.rc b/src/Notepad3.rc
index 7bf54c0f9..d4c800e7f 100644
--- a/src/Notepad3.rc
+++ b/src/Notepad3.rc
@@ -699,7 +699,7 @@ BEGIN
CONTROL "(?)",IDC_BACKSLASHHELP,"SysLink",0x0,106,73,14,10
CONTROL "(?)",IDC_WILDCARDHELP,"SysLink",0x0,191,85,14,10
CONTROL "",IDS_FR_STATUS_TEXT,"Static",SS_LEFTNOWORDWRAP,7,117,259,9,WS_EX_STATICEDGE
- PUSHBUTTON "Toggle Visibility",IDC_TOGGLE_VISIBILITY,211,65,55,14
+ PUSHBUTTON "Toggle &Visibility",IDC_TOGGLE_VISIBILITY,211,65,55,14
END
IDD_REPLACE DIALOGEX 0, 0, 273, 156
@@ -734,7 +734,7 @@ BEGIN
CONTROL "(?)",IDC_REGEXPHELP,"SysLink",0x0,107,114,14,10
CONTROL "(?)",IDC_WILDCARDHELP,"SysLink",0x0,191,114,14,10
CONTROL "",IDS_FR_STATUS_TEXT,"Static",SS_LEFTNOWORDWRAP,7,144,259,9,WS_EX_STATICEDGE
- PUSHBUTTON "Toggle Visibility",IDC_TOGGLE_VISIBILITY,211,94,55,14
+ PUSHBUTTON "Toggle &Visibility",IDC_TOGGLE_VISIBILITY,211,94,55,14
END
IDD_RUN DIALOGEX 0, 0, 229, 96
diff --git a/src/Styles.c b/src/Styles.c
index 11791be3b..e40bd34eb 100644
--- a/src/Styles.c
+++ b/src/Styles.c
@@ -125,7 +125,8 @@ enum LexDefaultStyles {
STY_BOOK_MARK = 12,
STY_MARK_OCC = 13,
STY_URL_HOTSPOT = 14,
- STY_INVISIBLE = 15
+ STY_INVISIBLE = 15,
+ STY_READONLY = 16
};
@@ -3933,6 +3934,26 @@ void Style_SetInvisible(HWND hwnd, bool bInvisible)
+//=============================================================================
+//
+// Style_GetReadonlyStyleID()
+//
+int Style_GetReadonlyStyleID()
+{
+ return (STYLE_LASTPREDEFINED + STY_READONLY);
+}
+
+
+//=============================================================================
+//
+// Style_SetInvisible()
+//
+void Style_SetReadonly(HWND hwnd, bool bReadonly)
+{
+ SendMessage(hwnd, SCI_STYLESETCHANGEABLE, Style_GetReadonlyStyleID(), (LPARAM)!bReadonly);
+}
+
+
//=============================================================================
//
// Style_SetLongLineColors()
diff --git a/src/Styles.h b/src/Styles.h
index 95fee565f..774acd93e 100644
--- a/src/Styles.h
+++ b/src/Styles.h
@@ -72,6 +72,7 @@ bool Style_Export(HWND);
void Style_SetLexer(HWND,PEDITLEXER);
void Style_SetUrlHotSpot(HWND, bool);
void Style_SetInvisible(HWND, bool);
+void Style_SetReadonly(HWND, bool);
void Style_SetLongLineColors(HWND);
void Style_SetCurrentLineBackground(HWND, bool);
void Style_SetFolding(HWND, bool);
@@ -118,6 +119,7 @@ INT_PTR CALLBACK Style_SelectLexerDlgProc(HWND,UINT,WPARAM,LPARAM);
void Style_SelectLexerDlg(HWND);
int Style_GetHotspotStyleID();
int Style_GetInvisibleStyleID();
+int Style_GetReadonlyStyleID();
bool Style_StrGetWeightValue(LPCWSTR,int*);
void Style_AppendWeightStr(LPWSTR, int, int);