From 42a2e2c93376cb79a1756cf33c728a7404f7fbbd Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 21 Jun 2025 18:06:51 -0500 Subject: [PATCH] GUI: improve edit advance behavior now it goes to next pattern issue #2444 --- src/gui/cursor.cpp | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/src/gui/cursor.cpp b/src/gui/cursor.cpp index 3d95bf0f8..31faeb310 100644 --- a/src/gui/cursor.cpp +++ b/src/gui/cursor.cpp @@ -450,7 +450,37 @@ void FurnaceGUI::moveCursorBottom(bool select) { void FurnaceGUI::editAdvance() { finishSelection(); cursor.y+=editStep; - if (cursor.y>=e->curSubSong->patLen) cursor.y=e->curSubSong->patLen-1; + int hangPrevention=0; + while (cursor.y>=e->curSubSong->patLen) { + if (++hangPrevention>500) { + showError("BUG: about to hang when advancing cursor.\nplease report this issue immediately!"); + break; + } + switch (settings.wrapVertical) { + case 1: // wrap + cursor.y-=e->curSubSong->patLen; + break; + case 2: // wrap + next pattern + if (curOrder<(e->curSubSong->ordersLen-1)) { + cursor.y-=e->curSubSong->patLen; + setOrder(curOrder+1); + } else { + cursor.y=e->curSubSong->patLen-1; + } + break; + case 3: // wrap + next pattern (wrap around) + cursor.y-=e->curSubSong->patLen; + if (curOrder<(e->curSubSong->ordersLen-1)) { + setOrder(curOrder+1); + } else { + setOrder(0); + } + break; + default: // don't wrap + cursor.y=e->curSubSong->patLen-1; + break; + } + } selStart=cursor; selEnd=cursor; updateScroll(cursor.y);