summaryrefslogtreecommitdiff
path: root/gtk2_ardour/ardour_ui.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gtk2_ardour/ardour_ui.cc')
-rw-r--r--gtk2_ardour/ardour_ui.cc24
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