diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 1c55f0a8d..c81e552c1 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -3930,11 +3930,13 @@ bool FurnaceGUI::loop() { int nextPlayOrder=0; int nextOldRow=0; e->getPlayPos(nextPlayOrder,nextOldRow); + oldRowChanged=false; playOrder=nextPlayOrder; if (followPattern) { curOrder=playOrder; } if (e->isPlaying()) { + if (oldRow!=nextOldRow) oldRowChanged=true; oldRow=nextOldRow; } @@ -7110,6 +7112,8 @@ FurnaceGUI::FurnaceGUI(): exitDisabledTimer(0), soloTimeout(0.0f), exportFadeOut(5.0), + newSongFirstFrame(false), + oldRowChanged(false), editControlsOpen(true), ordersOpen(true), insListOpen(true), diff --git a/src/gui/gui.h b/src/gui/gui.h index bd6b33ce8..0c495a6ee 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -1816,7 +1816,7 @@ class FurnaceGUI { double exportFadeOut; - bool newSongFirstFrame; + bool newSongFirstFrame, oldRowChanged; bool editControlsOpen, ordersOpen, insListOpen, songInfoOpen, patternOpen, insEditOpen; bool waveListOpen, waveEditOpen, sampleListOpen, sampleEditOpen, aboutOpen, settingsOpen; bool mixerOpen, debugOpen, inspectorOpen, oscOpen, volMeterOpen, statsOpen, compatFlagsOpen; diff --git a/src/gui/pattern.cpp b/src/gui/pattern.cpp index b85b802c1..efb949867 100644 --- a/src/gui/pattern.cpp +++ b/src/gui/pattern.cpp @@ -377,11 +377,14 @@ void FurnaceGUI::drawPattern() { bool inhibitMenu=false; - if (e->isPlaying() && followPattern && (!e->isStepping() || pendingStepUpdate)) { - cursor.y=oldRow; - if (selStart.xCoarse==selEnd.xCoarse && selStart.xFine==selEnd.xFine && selStart.y==selEnd.y && !selecting) { - selStart=cursor; - selEnd=cursor; + if (e->isPlaying() && followPattern) { + if (oldRowChanged || !e->isStepping()) { + if (e->isStepping()) pendingStepUpdate=1; + cursor.y=oldRow; + if (selStart.xCoarse==selEnd.xCoarse && selStart.xFine==selEnd.xFine && selStart.y==selEnd.y && !selecting) { + selStart=cursor; + selEnd=cursor; + } } } demandX=0;