diff --git a/src/lib/tunes/tunes.cpp b/src/lib/tunes/tunes.cpp index 90e1d4226b6c2bac2ec84192ef3c640e9a888e7d..86c65631cf473083373c06c078e1c35a62acd9e6 100644 --- a/src/lib/tunes/tunes.cpp +++ b/src/lib/tunes/tunes.cpp @@ -88,7 +88,15 @@ void Tunes::config_tone(bool repeat_flag) int Tunes::set_control(const tune_control_s &tune_control) { bool reset_playing_tune = false; - _repeat = false; + + // Only reset these flags if the new tune will actually be played. + // Note that repeated tunes can always be interrupted, even without the + // override flag. + if (_repeat || _tune == nullptr || tune_control.tune_override) { + _repeat = false; + _using_custom_msg = false; + _tune = nullptr; + } if (tune_control.tune_id < _default_tunes_size) { switch (tune_control.tune_id) {