add a method to cancel a pending play_range. this is needed when we are modifying the range with keyboard commands.

This commit is contained in:
Ben Loftis 2014-07-02 17:34:49 -05:00
parent 0f1c7b1d71
commit a1c8e67e50
6 changed files with 18 additions and 54 deletions

View file

@ -763,6 +763,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
/* ranges */
void request_play_range (std::list<AudioRange>*, bool leave_rolling = false);
void request_cancel_play_range ();
bool get_play_range () const { return _play_range; }
void maybe_update_session_range (framepos_t, framepos_t);

View file

@ -54,6 +54,7 @@ public:
Audition,
InputConfigurationChange,
SetPlayAudioRange,
CancelPlayAudioRange,
RealTimeOperation,
AdjustPlaybackBuffering,
AdjustCaptureBuffering,

View file

@ -369,6 +369,7 @@ setup_enum_writer ()
REGISTER_CLASS_ENUM (SessionEvent, Audition);
REGISTER_CLASS_ENUM (SessionEvent, InputConfigurationChange);
REGISTER_CLASS_ENUM (SessionEvent, SetPlayAudioRange);
REGISTER_CLASS_ENUM (SessionEvent, CancelPlayAudioRange);
REGISTER_CLASS_ENUM (SessionEvent, StopOnce);
REGISTER_CLASS_ENUM (SessionEvent, AutoLoop);
REGISTER (_SessionEvent_Type);

View file

@ -1142,6 +1142,10 @@ Session::process_event (SessionEvent* ev)
set_play_range (ev->audio_range, (ev->speed == 1.0f));
break;
case SessionEvent::CancelPlayAudioRange:
unset_play_range();
break;
case SessionEvent::RealTimeOperation:
process_rtop (ev);
del = false; // other side of RT request needs to clean up

View file

@ -227,6 +227,14 @@ Session::request_play_range (list<AudioRange>* range, bool leave_rolling)
queue_event (ev);
}
void
Session::request_cancel_play_range ()
{
SessionEvent* ev = new SessionEvent (SessionEvent::CancelPlayAudioRange, SessionEvent::Add, SessionEvent::Immediate, 0, 0);
queue_event (ev);
}
void
Session::realtime_stop (bool abort, bool clear_state)
{