From 81069a98b293bbe879aeaf39c87f7789ec56cb40 Mon Sep 17 00:00:00 2001 From: Martchus Date: Sun, 10 Sep 2023 14:47:03 +0200 Subject: [PATCH] Prevent app from being stuck when start bar selected --- src/Bar.h | 1 + src/Conductor.h | 1 + src/Song.cpp | 10 +++++++--- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/Bar.h b/src/Bar.h index 8e91a5c..4d4b4ec 100644 --- a/src/Bar.h +++ b/src/Bar.h @@ -100,6 +100,7 @@ public: } bool seekingBarNumber() { return m_seekingBarNumber;} + void doneSeekingBarNumber() { m_seekingBarNumber = false; } // get and reset the current bar event bits eventBits_t readEventBits() { diff --git a/src/Conductor.h b/src/Conductor.h index 52ce880..9fd3397 100644 --- a/src/Conductor.h +++ b/src/Conductor.h @@ -223,6 +223,7 @@ protected: bool validatePianistChord(); bool seekingBarNumber() { return m_bar.seekingBarNumber();} + void doneSeekingBarNumber() { m_bar.doneSeekingBarNumber(); } int track2Channel(int track) {return m_track2ChannelLookUp[track];} diff --git a/src/Song.cpp b/src/Song.cpp index 447c80a..6e3f3cf 100644 --- a/src/Song.cpp +++ b/src/Song.cpp @@ -163,10 +163,10 @@ eventBits_t CSong::task(qint64 ticks) { realTimeEngine(ticks); - while (!m_reachedMidiEof) + for (auto scoreHasEnoughSpace = true; !m_reachedMidiEof && scoreHasEnoughSpace;) { // loop as long as there is space and that the score also has space - while (midiEventSpace() > 10 && chordEventSpace() > 10 && m_scoreWin->midiEventSpace() > 100) + while (midiEventSpace() > 10 && chordEventSpace() > 10 && (scoreHasEnoughSpace = m_scoreWin->midiEventSpace() > 100)) { // Read the next events CMidiEvent event = m_midiFile->readMidiEvent(); @@ -198,7 +198,11 @@ eventBits_t CSong::task(qint64 ticks) m_scoreWin->drawScrollingSymbols(false); // don't display any thing just remove from the queue } - eventBits_t eventBits = m_realTimeEventBits; + // unset the seeking state (noop if not seeking anyways) + doneSeekingBarNumber(); + + // return and unset event bits + const auto eventBits = m_realTimeEventBits; m_realTimeEventBits = 0; return eventBits; }