diff options
Diffstat (limited to 'libs/ardour/session_process.cc')
-rw-r--r-- | libs/ardour/session_process.cc | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/libs/ardour/session_process.cc b/libs/ardour/session_process.cc index 329bb62174..22c6abfc73 100644 --- a/libs/ardour/session_process.cc +++ b/libs/ardour/session_process.cc @@ -1138,6 +1138,11 @@ Session::process_event (SessionEvent* ev) do_record_enable_change_all (ev->routes, ev->yes_or_no); break; + case SessionEvent::RealTimeOperation: + process_rtop (ev); + del = false; // other side of RT request needs to clean up + break; + default: fatal << string_compose(_("Programming error: illegal event type in process_event (%1)"), ev->type) << endmsg; /*NOTREACHED*/ @@ -1148,9 +1153,24 @@ Session::process_event (SessionEvent* ev) del = del && !_remove_event (ev); } - ev->Complete (ev, 0); /* EMIT SIGNAL */ - if (del) { delete ev; } } + + +void +Session::request_real_time_operation (sigc::slot<void> rt_op, sigc::slot<void,SessionEvent*> callback) +{ + SessionEvent* ev = new SessionEvent (SessionEvent::RealTimeOperation, SessionEvent::Add, SessionEvent::Immediate, 0, 0.0); + ev->rt_slot = rt_op; + ev->rt_return = callback; + queue_event (ev); +} + +void +Session::process_rtop (SessionEvent* ev) +{ + ev->rt_slot (); + ev->rt_return (ev); +} |