From f7cef2016f737a7c80b5307d3d45d8065b9e8789 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Sun, 9 Jan 2011 23:14:47 +0000 Subject: [PATCH] patch from lincoln to fix failure to leave loop play mode at transort stop git-svn-id: svn://localhost/ardour2/branches/3.0@8489 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/ardour_ui.cc | 33 ++++++++++++++++++++------------ libs/ardour/panner.cc | 3 +++ libs/ardour/session_transport.cc | 3 +++ 3 files changed, 27 insertions(+), 12 deletions(-) diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index c725bce3db..09a6562fb4 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -1687,21 +1687,30 @@ ARDOUR_UI::toggle_roll (bool with_abort, bool roll_out_of_bounded_mode) void ARDOUR_UI::toggle_session_auto_loop () { - if (_session) { - if (_session->get_play_loop()) { - if (_session->transport_rolling()) { - Location * looploc = _session->locations()->auto_loop_location(); - if (looploc) { - _session->request_locate (looploc->start(), true); - } - } else { + if (!_session) { + return; + } + + if (_session->get_play_loop()) { + + if (_session->transport_rolling()) { + + Location * looploc = _session->locations()->auto_loop_location(); + + if (looploc) { + _session->request_locate (looploc->start(), true); _session->request_play_loop (false); } + } else { - Location * looploc = _session->locations()->auto_loop_location(); - if (looploc) { - _session->request_play_loop (true); - } + _session->request_play_loop (false); + } + } else { + + Location * looploc = _session->locations()->auto_loop_location(); + + if (looploc) { + _session->request_play_loop (true); } } } diff --git a/libs/ardour/panner.cc b/libs/ardour/panner.cc index bbca86c549..e4dc417c83 100644 --- a/libs/ardour/panner.cc +++ b/libs/ardour/panner.cc @@ -119,6 +119,7 @@ StreamPanner::PanControllable::set_value (double val) val = max (min (val, 1.0), 0.0); if (p.set_stereo_pan (val, p.width_control()->get_value())) { AutomationControl::set_value(val); + p.session().set_dirty (); } break; @@ -127,6 +128,7 @@ StreamPanner::PanControllable::set_value (double val) val = max (min (val, 1.0), -1.0); if (p.set_stereo_pan (p.direction_control()->get_value(), val)) { AutomationControl::set_value(val); + p.session().set_dirty (); } break; @@ -134,6 +136,7 @@ StreamPanner::PanControllable::set_value (double val) val = max (min (val, 1.0), 0.0); streampanner->set_position (AngularVector (direct_control_to_stereo_pan (val), 0.0)); AutomationControl::set_value(val); + p.session().set_dirty (); break; } diff --git a/libs/ardour/session_transport.cc b/libs/ardour/session_transport.cc index aa3f2a6782..2258f70921 100644 --- a/libs/ardour/session_transport.cc +++ b/libs/ardour/session_transport.cc @@ -944,6 +944,7 @@ Session::set_transport_speed (double speed, bool abort, bool clear_state) if (Config->get_monitoring_model() == HardwareMonitoring) { boost::shared_ptr rl = routes.reader(); + for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) { boost::shared_ptr tr = boost::dynamic_pointer_cast (*i); if (tr && tr->record_enabled ()) { @@ -965,6 +966,8 @@ Session::set_transport_speed (double speed, bool abort, bool clear_state) } else { stop_transport (abort); } + + unset_play_loop (); } else if (transport_stopped() && speed == 1.0) {