mirror of
https://github.com/rizonesoft/Notepad3.git
synced 2026-06-28 21:02:59 +08:00
+ fix: (some) issues in Code-Folding scrolling
This commit is contained in:
parent
13691e4631
commit
8c11c8d421
16
src/Edit.c
16
src/Edit.c
@ -8152,6 +8152,7 @@ inline bool _FoldToggleNode(DocLn ln, FOLD_ACTION action)
|
||||
|
||||
void __stdcall EditFoldPerformAction(DocLn ln, int mode, FOLD_ACTION action)
|
||||
{
|
||||
bool fToggled = false;
|
||||
if (action == SNIFF) {
|
||||
action = SciCall_GetFoldExpanded(ln) ? FOLD : EXPAND;
|
||||
}
|
||||
@ -8180,12 +8181,13 @@ void __stdcall EditFoldPerformAction(DocLn ln, int mode, FOLD_ACTION action)
|
||||
if (lv < lvStop || (lv == lvStop && fHeader && ln != lnNode))
|
||||
return;
|
||||
else if (fHeader && (lv == lvNode || (lv > lvNode && mode & FOLD_CHILDREN)))
|
||||
_FoldToggleNode(ln, action);
|
||||
fToggled |= _FoldToggleNode(ln, action);
|
||||
}
|
||||
}
|
||||
else {
|
||||
_FoldToggleNode(ln, action);
|
||||
fToggled = _FoldToggleNode(ln, action);
|
||||
}
|
||||
if (fToggled) { SciCall_ScrollCaret(); }
|
||||
}
|
||||
|
||||
|
||||
@ -8193,7 +8195,6 @@ void EditToggleFolds(FOLD_ACTION action, bool bForceAll)
|
||||
{
|
||||
static FOLD_ACTION sbLastSniffAllAction = EXPAND;
|
||||
|
||||
bool fToggled = bForceAll;
|
||||
DocLn const iBegLn = SciCall_LineFromPosition(SciCall_GetSelectionStart());
|
||||
DocLn const iEndLn = SciCall_LineFromPosition(SciCall_GetSelectionEnd());
|
||||
|
||||
@ -8205,18 +8206,19 @@ void EditToggleFolds(FOLD_ACTION action, bool bForceAll)
|
||||
if (iBegLn == iEndLn) {
|
||||
// single line
|
||||
DocLn const ln = (SciCall_GetFoldLevel(iBegLn) & SC_FOLDLEVELHEADERFLAG) ? iBegLn : SciCall_GetFoldParent(iBegLn);
|
||||
_FoldToggleNode(ln, action);
|
||||
if (_FoldToggleNode(ln, action)) { SciCall_ScrollCaret(); }
|
||||
}
|
||||
else {
|
||||
// selection range spans at least two lines
|
||||
bool fToggled = bForceAll;
|
||||
for (DocLn ln = iBegLn; ln <= iEndLn; ++ln) {
|
||||
if (SciCall_GetFoldLevel(ln) & SC_FOLDLEVELHEADERFLAG) {
|
||||
if (_FoldToggleNode(ln, action)) { fToggled = !fToggled ? true : false; }
|
||||
fToggled |= _FoldToggleNode(ln, action);
|
||||
}
|
||||
}
|
||||
if (fToggled) { EditEnsureSelectionVisible(g_hwndEdit); }
|
||||
}
|
||||
}
|
||||
if (fToggled) { EditEnsureSelectionVisible(g_hwndEdit); }
|
||||
}
|
||||
|
||||
|
||||
@ -8305,7 +8307,7 @@ void EditFoldAltArrow(FOLD_MOVE move, FOLD_ACTION action)
|
||||
else {
|
||||
ln = (SciCall_GetFoldLevel(iBegLn) & SC_FOLDLEVELHEADERFLAG) ? iBegLn : SciCall_GetFoldParent(iBegLn);
|
||||
if (action != SNIFF) {
|
||||
_FoldToggleNode(ln, action);
|
||||
if (_FoldToggleNode(ln, action)) { SciCall_ScrollCaret(); }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -4796,7 +4796,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
|
||||
|
||||
|
||||
case IDM_VIEW_TOGGLEFOLDS:
|
||||
EditToggleFolds(SNIFF, true);
|
||||
EditToggleFolds(SNIFF, SciCall_IsSelectionEmpty());
|
||||
break;
|
||||
|
||||
case IDM_VIEW_TOGGLE_CURRENT_FOLD:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user