diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index a21796e757..060a98ef44 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -1902,7 +1902,7 @@ ARDOUR_UI::transport_roll () } } - } else if (_session->get_play_range () && !Config->get_always_play_range()) { + } else if (_session->get_play_range () ) { /* stop playing a range if we currently are */ _session->request_play_range (0, true); } @@ -1969,10 +1969,10 @@ ARDOUR_UI::toggle_roll (bool with_abort, bool roll_out_of_bounded_mode) if (rolling) { _session->request_stop (with_abort, true); } else { - if ( Config->get_always_play_range() ) { + if ( Config->get_follow_edits() && ( editor->get_selection().time.front().start == _session->transport_frame() ) ) { //if playhead is exactly at the start of a range, we can assume it was placed there by follow_edits _session->request_play_range (&editor->get_selection().time, true); + _session->set_requested_return_frame( editor->get_selection().time.front().start ); //force an auto-return here } - _session->request_transport_speed (1.0f); } } @@ -2179,7 +2179,7 @@ ARDOUR_UI::map_transport_state () editor->get_waves_button ("transport_loop_button").set_active (false); } - if (Config->get_always_play_range()) { + if (Config->get_follow_edits()) { /* light up both roll and play-selection if they are joined */ roll_button.set_active (true); play_selection_button.set_active (true); diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index a0c45c3df8..55a3e9cd2b 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -443,7 +443,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr boost::shared_ptr play_selection_controllable; boost::shared_ptr rec_controllable; - void toggle_always_play_range (); + void toggle_follow_edits (); void set_transport_controllable_state (const XMLNode&); XMLNode& get_transport_controllable_state (); diff --git a/gtk2_ardour/ardour_ui2.cc b/gtk2_ardour/ardour_ui2.cc index 18dde195c6..074e6f873f 100644 --- a/gtk2_ardour/ardour_ui2.cc +++ b/gtk2_ardour/ardour_ui2.cc @@ -601,7 +601,7 @@ ARDOUR_UI::click_button_clicked (GdkEventButton* ev) } void -ARDOUR_UI::toggle_always_play_range () +ARDOUR_UI::toggle_follow_edits () { RefPtr act = ActionManager::get_action (X_("Transport"), X_("ToggleFollowEdits")); assert (act); @@ -609,7 +609,7 @@ ARDOUR_UI::toggle_always_play_range () RefPtr tact = RefPtr::cast_dynamic (act); assert (tact); - Config->set_always_play_range (tact->get_active ()); + Config->set_follow_edits (tact->get_active ()); } diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc index f83d0b341a..f203b6a07b 100644 --- a/gtk2_ardour/ardour_ui_ed.cc +++ b/gtk2_ardour/ardour_ui_ed.cc @@ -353,7 +353,7 @@ ARDOUR_UI::install_actions () act = ActionManager::register_toggle_action (transport_actions, X_("ToggleAutoReturn"), _("Auto Return"), sigc::mem_fun(*this, &ARDOUR_UI::toggle_auto_return)); ActionManager::session_sensitive_actions.push_back (act); ActionManager::transport_sensitive_actions.push_back (act); - act = ActionManager::register_toggle_action (transport_actions, X_("ToggleFollowEdits"), _("Follow Edits"), sigc::mem_fun(*this, &ARDOUR_UI::toggle_always_play_range)); + act = ActionManager::register_toggle_action (transport_actions, X_("ToggleFollowEdits"), _("Follow Edits"), sigc::mem_fun(*this, &ARDOUR_UI::toggle_follow_edits)); ActionManager::session_sensitive_actions.push_back (act); ActionManager::transport_sensitive_actions.push_back (act); diff --git a/gtk2_ardour/ardour_ui_options.cc b/gtk2_ardour/ardour_ui_options.cc index 42a9790566..7d9c526503 100644 --- a/gtk2_ardour/ardour_ui_options.cc +++ b/gtk2_ardour/ardour_ui_options.cc @@ -328,7 +328,7 @@ ARDOUR_UI::parameter_changed (std::string p) } else if (p == "always-play-range") { - ActionManager::map_some_state ("Transport", "ToggleFollowEdits", &RCConfiguration::get_always_play_range); + ActionManager::map_some_state ("Transport", "ToggleFollowEdits", &RCConfiguration::get_follow_edits); } else if (p == "send-mtc") { diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index 03005b9dab..ca764408ad 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -4348,7 +4348,7 @@ SelectionDrag::finished (GdkEvent* event, bool movement_occurred) if ( s->get_play_range() && s->transport_rolling() ) { s->request_play_range (&_editor->selection->time, true); } else { - if (Config->get_always_play_range() && !s->transport_rolling()) { + if (Config->get_follow_edits() && !s->transport_rolling()) { s->request_locate (_editor->get_selection().time.start()); } } diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index 39f72077cc..2fd1a13415 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -1293,7 +1293,7 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp } //not rolling, range mode click + join_play_range : locate the PH here - if ( !_drags->active () && !_session->transport_rolling() && ( effective_mouse_mode() == MouseRange ) && Config->get_always_play_range() ) { + if ( !_drags->active () && !_session->transport_rolling() && ( effective_mouse_mode() == MouseRange ) && Config->get_follow_edits() ) { framepos_t where = canvas_event_sample (event); snap_to(where); _session->request_locate (where, false); diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index 8852bcdbff..91750616ba 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -2237,7 +2237,7 @@ Editor::get_preroll () void Editor::maybe_locate_with_edit_preroll ( framepos_t location ) { - if ( _session->transport_rolling() || !Config->get_always_play_range() ) + if ( _session->transport_rolling() || !Config->get_follow_edits() ) return; location -= get_preroll(); @@ -5559,7 +5559,7 @@ Editor::set_playhead_cursor () } } - if ( Config->get_always_play_range() ) + if ( Config->get_follow_edits() ) cancel_time_selection(); } diff --git a/gtk2_ardour/editor_selection.cc b/gtk2_ardour/editor_selection.cc index ea07b2a3b2..a6a4b09aed 100644 --- a/gtk2_ardour/editor_selection.cc +++ b/gtk2_ardour/editor_selection.cc @@ -1087,7 +1087,7 @@ Editor::time_selection_changed () ActionManager::set_sensitive (ActionManager::time_selection_sensitive_actions, true); } - if (_session && Config->get_always_play_range() && !_session->transport_rolling() && !selection->time.empty()) { + if (_session && Config->get_follow_edits() && !_session->transport_rolling() && !selection->time.empty()) { _session->request_locate (selection->time.start()); } } diff --git a/libs/ardour/ardour/rc_configuration_vars.h b/libs/ardour/ardour/rc_configuration_vars.h index 34b0c53085..a0cbd9caee 100644 --- a/libs/ardour/ardour/rc_configuration_vars.h +++ b/libs/ardour/ardour/rc_configuration_vars.h @@ -153,7 +153,7 @@ CONFIG_VARIABLE (bool, secondary_clock_delta_edit_cursor, "secondary-clock-delta CONFIG_VARIABLE (bool, show_track_meters, "show-track-meters", true) CONFIG_VARIABLE (bool, locate_while_waiting_for_sync, "locate-while-waiting-for-sync", false) CONFIG_VARIABLE (bool, disable_disarm_during_roll, "disable-disarm-during-roll", false) -CONFIG_VARIABLE (bool, always_play_range, "always-play-range", false) +CONFIG_VARIABLE (bool, follow_edits, "follow-edits", false) CONFIG_VARIABLE (bool, super_rapid_clock_update, "super-rapid-clock-update", false) /* metering */ diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index b7dac796c5..c967afa3f3 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -508,6 +508,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop framepos_t transport_frame () const {return _transport_frame; } framepos_t audible_frame () const; framepos_t requested_return_frame() const { return _requested_return_frame; } + void set_requested_return_frame(framepos_t return_to); enum PullupFormat { pullup_Plus4Plus1, diff --git a/libs/ardour/session_transport.cc b/libs/ardour/session_transport.cc index 19f86eb2b3..2cd8de49bf 100644 --- a/libs/ardour/session_transport.cc +++ b/libs/ardour/session_transport.cc @@ -1635,6 +1635,13 @@ Session::request_bounded_roll (framepos_t start, framepos_t end) lar.push_back (ar); request_play_range (&lar, true); } + +void +Session::set_requested_return_frame (framepos_t return_to) +{ + _requested_return_frame = return_to; +} + void Session::request_roll_at_and_return (framepos_t start, framepos_t return_to) {