From 8c11c8d421da6f049767e8bfd3455150e5a3fca3 Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Fri, 14 Sep 2018 15:51:06 +0200 Subject: [PATCH] + fix: (some) issues in Code-Folding scrolling --- src/Edit.c | 16 +++++++++------- src/Notepad3.c | 2 +- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/Edit.c b/src/Edit.c index 54102e1c4..c4e3fcb7b 100644 --- a/src/Edit.c +++ b/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(); } } } } diff --git a/src/Notepad3.c b/src/Notepad3.c index 6f261183a..f8ece8e5b 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -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: