diff --git a/TODO.md b/TODO.md index af6e0f6c3..06951982a 100644 --- a/TODO.md +++ b/TODO.md @@ -4,11 +4,9 @@ # THE REAL TO-DO LIST -- Song is silent after playing an order after loop point -- Select loaded instrument on open - rewrite because I want a setting... - finish auto-clone -once you have done all of this (maybe not the first one) and merged the two or so pending pull requests, release 0.6.1 +once you have done all of this (maybe not the first one), release 0.6.1 Furnace is like alcohol... diff --git a/src/gui/editing.cpp b/src/gui/editing.cpp index 8ed4116a0..d27c55a13 100644 --- a/src/gui/editing.cpp +++ b/src/gui/editing.cpp @@ -88,6 +88,7 @@ void FurnaceGUI::prepareUndo(ActionType action) { void FurnaceGUI::makeUndo(ActionType action) { bool doPush=false; + bool shallWalk=false; UndoStep s; s.type=action; s.cursor=cursor; @@ -136,6 +137,18 @@ void FurnaceGUI::makeUndo(ActionType action) { for (int k=0; kdata[j][k]!=oldPat[i]->data[j][k]) { s.pat.push_back(UndoPatternData(subSong,i,e->curOrders->ord[i][curOrder],j,k,oldPat[i]->data[j][k],p->data[j][k])); + + if (k>=4) { + if (oldPat[i]->data[j][k&(~1)]==0x0b || + p->data[j][k&(~1)]==0x0b || + oldPat[i]->data[j][k&(~1)]==0x0d || + p->data[j][k&(~1)]==0x0d || + oldPat[i]->data[j][k&(~1)]==0xff || + p->data[j][k&(~1)]==0xff) { + shallWalk=true; + } + } + } } } @@ -156,6 +169,9 @@ void FurnaceGUI::makeUndo(ActionType action) { redoHist.clear(); if (undoHist.size()>settings.maxUndoSteps) undoHist.pop_front(); } + if (shallWalk) { + e->walkSong(loopOrder,loopRow,loopEnd); + } } void FurnaceGUI::doSelectAll() { @@ -1770,6 +1786,7 @@ void FurnaceGUI::doUndo() { setOrder(us.order); } } + e->walkSong(loopOrder,loopRow,loopEnd); break; } @@ -1845,7 +1862,7 @@ void FurnaceGUI::doRedo() { setOrder(us.order); } } - + e->walkSong(loopOrder,loopRow,loopEnd); break; }