From 8bb5605dfc48a9578164e820fb866f0e7881d899 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Fri, 6 Nov 2009 22:43:47 +0000 Subject: deep, somewhat subtle changes for transport control. Everything should use Session::request_stop(), which nows takes an additional argument indicating whether or not to clear play range/loop state. UI threads will generally do so, other things, like slave sync objects, generally will not. also fixed stupid delay on exit, caused by unconditional usleep (2.5 seconds) ... git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@6027 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/ardour_ui.cc | 20 +++++++++++--------- gtk2_ardour/ardour_ui2.cc | 2 +- gtk2_ardour/editor_mouse.cc | 4 ++-- 3 files changed, 14 insertions(+), 12 deletions(-) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 4bbd7c5429..834c329793 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -729,9 +729,11 @@ ARDOUR_UI::finish() { if (session) { - if (session->transport_rolling()) { - session->request_stop (); - usleep (2500000); + int tries = 0; + + while (session->transport_rolling() && (++tries < 8)) { + session->request_stop (true, false); + usleep (10000); } if (session->dirty()) { @@ -1398,14 +1400,14 @@ ARDOUR_UI::transport_stop () return; } - session->request_stop (); + session->request_stop (false, true); } void ARDOUR_UI::transport_stop_and_forget_capture () { if (session) { - session->request_stop (true); + session->request_stop (true, true); } } @@ -1473,9 +1475,10 @@ ARDOUR_UI::transport_roll () if (session->get_play_loop()) { /* XXX it is not possible to just leave seamless loop and keep - playing at present (nov 4th 2009 + playing at present (nov 4th 2009) */ if (!Config->get_seamless_loop()) { + /* off, and stop */ session->request_play_loop (false, true); } else { return; @@ -1534,12 +1537,11 @@ ARDOUR_UI::toggle_roll (bool with_abort, bool roll_out_of_bounded_mode) affect_transport = false; session->request_play_range (false, true); } - } + } if (affect_transport) { - if (rolling) { - session->request_stop (with_abort); + session->request_stop (with_abort, true); } else { session->request_transport_speed (1.0f); } diff --git a/gtk2_ardour/ardour_ui2.cc b/gtk2_ardour/ardour_ui2.cc index e58b9d6a09..ac6f3e7413 100644 --- a/gtk2_ardour/ardour_ui2.cc +++ b/gtk2_ardour/ardour_ui2.cc @@ -637,7 +637,7 @@ ARDOUR_UI::shuttle_box_button_release (GdkEventButton* ev) roll_button.set_visual_state (1); } else { shuttle_fract = 0; - session->request_transport_speed (0.0); + session->request_stop (); } shuttle_box.queue_draw (); } diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index 490112d430..3fd7e09afc 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -1191,7 +1191,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT } } else { /* make sure we stop */ - session->request_transport_speed (0.0); + session->request_stop (); } break; @@ -2247,7 +2247,7 @@ Editor::start_cursor_grab (ArdourCanvas::Item* item, GdkEvent* event) _dragging_playhead = true; if (session && drag_info.was_rolling) { - session->request_stop (); + session->request_stop (false, true); } if (session && session->is_auditioning()) { -- cgit v1.2.3