diff --git a/gtk2_ardour/editor_keys.cc b/gtk2_ardour/editor_keys.cc index 2900e28c2a..34847bbfe4 100644 --- a/gtk2_ardour/editor_keys.cc +++ b/gtk2_ardour/editor_keys.cc @@ -63,8 +63,8 @@ Editor::keyboard_selection_finish (bool add) selection->set (start, end); //if session is playing a range, cancel that -// if (_session->get_play_range()) -// _session->request_cancel_play_range(); + if (_session->get_play_range()) + _session->request_cancel_play_range(); } } @@ -99,61 +99,10 @@ Editor::keyboard_selection_begin () //if session is playing a range, cancel that if (_session->get_play_range()) - _session->request_transport_speed ( 1.0 ); - - //if join playhead, locate to the newly selected start -// if ( !_session->transport_rolling() && Config->get_join_play_range() ) -// _session->request_cancel_play_range(); + _session->request_cancel_play_range(); } } -/* -void -Editor::keyboard_selection_finish (bool add) -{ - if (_session && have_pending_keyboard_selection) { - - framepos_t end; - bool ignored; - - if (_session->transport_rolling()) { - end = _session->audible_frame(); - } else { - if (!mouse_frame (end, ignored)) { - return; - } - } - - if (add) { - selection->add (pending_keyboard_selection_start, end); - } else { - selection->set (pending_keyboard_selection_start, end); - } - - have_pending_keyboard_selection = false; - } -} - -void -Editor::keyboard_selection_begin () -{ - if (_session) { - if (_session->transport_rolling()) { - pending_keyboard_selection_start = _session->audible_frame(); - have_pending_keyboard_selection = true; - } else { - bool ignored; - framepos_t where; // XXX fix me - - if (mouse_frame (where, ignored)) { - pending_keyboard_selection_start = where; - have_pending_keyboard_selection = true; - } - - } - } -}*/ - void Editor::keyboard_paste () { diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index 03eccd40a3..de2dc6189e 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -763,6 +763,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop /* ranges */ void request_play_range (std::list*, 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); diff --git a/libs/ardour/ardour/session_event.h b/libs/ardour/ardour/session_event.h index 1283f32004..1772b53c3d 100644 --- a/libs/ardour/ardour/session_event.h +++ b/libs/ardour/ardour/session_event.h @@ -54,6 +54,7 @@ public: Audition, InputConfigurationChange, SetPlayAudioRange, + CancelPlayAudioRange, RealTimeOperation, AdjustPlaybackBuffering, AdjustCaptureBuffering, diff --git a/libs/ardour/enums.cc b/libs/ardour/enums.cc index 54f1e602be..9d6d37b5f8 100644 --- a/libs/ardour/enums.cc +++ b/libs/ardour/enums.cc @@ -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); diff --git a/libs/ardour/session_process.cc b/libs/ardour/session_process.cc index 680f2861de..b1e336c373 100644 --- a/libs/ardour/session_process.cc +++ b/libs/ardour/session_process.cc @@ -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 diff --git a/libs/ardour/session_transport.cc b/libs/ardour/session_transport.cc index 85b36e5a66..19f86eb2b3 100644 --- a/libs/ardour/session_transport.cc +++ b/libs/ardour/session_transport.cc @@ -227,6 +227,14 @@ Session::request_play_range (list* 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) {