summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2009-11-06 22:43:47 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2009-11-06 22:43:47 +0000
commit8bb5605dfc48a9578164e820fb866f0e7881d899 (patch)
tree29171e531c26a0a79513f0b6f06d95d9ce05c494 /gtk2_ardour
parentc3e7746e367b5b461f0577b548c9e29854bdde06 (diff)
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
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/ardour_ui.cc20
-rw-r--r--gtk2_ardour/ardour_ui2.cc2
-rw-r--r--gtk2_ardour/editor_mouse.cc4
3 files changed, 14 insertions, 12 deletions
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()) {