}
- if (_slave_state == Running && !non_realtime_work_pending()) {
+ if (_slave_state == Running && 0 == (post_transport_work () & ~PostTransportSpeed)) {
/* speed is set, we're locked, and good to go */
return true;
}
case SessionEvent::PunchIn:
// cerr << "PunchIN at " << transport_frame() << endl;
- if (config.get_punch_in() && record_status() == Enabled) {
+ if (config.get_punch_in() && record_status() == Enabled && !preroll_record_punch_enabled()) {
enable_record ();
}
remove = false;
case SessionEvent::PunchOut:
// cerr << "PunchOUT at " << transport_frame() << endl;
- if (config.get_punch_out()) {
+ if (config.get_punch_out() && !preroll_record_punch_enabled()) {
step_back_from_record ();
}
remove = false;
del = false;
break;
+ case SessionEvent::RecordStart:
+ if (preroll_record_punch_enabled() && record_status() == Enabled) {
+ enable_record ();
+ }
+ remove = false;
+ del = false;
+ break;
+
case SessionEvent::StopOnce:
if (!non_realtime_work_pending()) {
_clear_event_type (SessionEvent::StopOnce);
return max_framepos;
}
+ if (preroll_record_punch_enabled ()) {
+ 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());