summaryrefslogtreecommitdiff
path: root/libs/ardour/session_process.cc
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2011-12-11 16:26:03 +0000
committerCarl Hetherington <carl@carlh.net>2011-12-11 16:26:03 +0000
commitb5478a8a2b09793fe94c2a8836daec2b8f24f0a5 (patch)
treeca4c5b55425d1f5167fda54a680acaeb99d036f0 /libs/ardour/session_process.cc
parenta94098ae9bc8d36ebc9deee00bc91b1c3e27b521 (diff)
Clarify stop-at-session-end behaviour; should fix #4033.
git-svn-id: svn://localhost/ardour2/branches/3.0@10978 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/session_process.cc')
-rw-r--r--libs/ardour/session_process.cc22
1 files changed, 17 insertions, 5 deletions
diff --git a/libs/ardour/session_process.cc b/libs/ardour/session_process.cc
index 33c4e5621c..89dd83b9c6 100644
--- a/libs/ardour/session_process.cc
+++ b/libs/ardour/session_process.cc
@@ -1133,11 +1133,23 @@ Session::process_event (SessionEvent* ev)
framepos_t
Session::compute_stop_limit () const
{
- bool const punching = (config.get_punch_in () && _locations->auto_punch_location());
-
- if (!actively_recording() && !punching && Config->get_stop_at_session_end()) {
- return current_end_frame ();
+ if (!Config->get_stop_at_session_end ()) {
+ return max_framepos;
+ }
+
+ bool const punching_in = (config.get_punch_in () && _locations->auto_punch_location());
+ bool const punching_out = (config.get_punch_out () && _locations->auto_punch_location());
+
+ if (actively_recording ()) {
+ /* permanently recording */
+ return max_framepos;
+ } else if (punching_in && !punching_out) {
+ /* punching in but never out */
+ return max_framepos;
+ } else if (punching_in && punching_out && _locations->auto_punch_location()->end() > current_end_frame()) {
+ /* punching in and punching out after session end */
+ return max_framepos;
}
- return max_framepos;
+ return current_end_frame ();
}