diff options
Diffstat (limited to 'gtk2_ardour/ardour_ui.cc')
-rw-r--r-- | gtk2_ardour/ardour_ui.cc | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 8dc5680a1e..16a96f1e45 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -1549,7 +1549,7 @@ ARDOUR_UI::transport_roll () } void -ARDOUR_UI::toggle_roll (bool with_abort) +ARDOUR_UI::toggle_roll (bool with_abort, bool roll_out_of_bounded_mode) { if (!session) { @@ -1573,27 +1573,35 @@ ARDOUR_UI::toggle_roll (bool with_abort) bool rolling = session->transport_rolling(); bool affect_transport = true; - if (rolling) { + if (rolling && roll_out_of_bounded_mode) { /* drop out of loop/range playback but leave transport rolling */ if (session->get_play_loop()) { - affect_transport = false; + if (Config->get_seamless_loop()) { + /* the disk buffers contain copies of the loop - we can't + just keep playing, so stop the transport. the user + can restart as they wish. + */ + affect_transport = true; + } else { + /* disk buffers are normal, so we can keep playing */ + affect_transport = false; + } session->request_play_loop (false, true); } else if (session->get_play_range ()) { affect_transport = false; - session->request_play_range (false, true); + session->request_play_range (0, true); } - } + } if (affect_transport) { - if (rolling) { - session->request_stop (with_abort); + session->request_stop (with_abort, true); } else { session->request_transport_speed (1.0f); } } - map_transport_state (); + map_transport_state (); } void |