summaryrefslogtreecommitdiff
path: root/libs/ardour/session_rtevents.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2011-10-20 18:50:29 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2011-10-20 18:50:29 +0000
commit3764eedca0d8ca8d666401c8bb8364705a64317e (patch)
treeeb666341e2b9a48c2cb8f2534725d6adfb33107e /libs/ardour/session_rtevents.cc
parent49b459f8d32ccabdac7cc0bacf3976557c00b2a6 (diff)
add initial implementation of explicit monitor (input|disk) control. some behaviour to be worked out, still
git-svn-id: svn://localhost/ardour2/branches/3.0@10256 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/session_rtevents.cc')
-rw-r--r--libs/ardour/session_rtevents.cc25
1 files changed, 17 insertions, 8 deletions
diff --git a/libs/ardour/session_rtevents.cc b/libs/ardour/session_rtevents.cc
index ce40c5ce9e..ca1ee319c7 100644
--- a/libs/ardour/session_rtevents.cc
+++ b/libs/ardour/session_rtevents.cc
@@ -32,16 +32,25 @@ using namespace PBD;
using namespace ARDOUR;
using namespace Glib;
-SessionEvent*
-Session::get_rt_event (boost::shared_ptr<RouteList> rl, bool yn, SessionEvent::RTeventCallback after, bool group_override,
- void (Session::*method) (boost::shared_ptr<RouteList>, bool, bool))
+void
+Session::set_monitoring (boost::shared_ptr<RouteList> rl, MonitorChoice mc, SessionEvent::RTeventCallback after, bool group_override)
+{
+ queue_event (get_rt_event (rl, mc, after, group_override, &Session::rt_set_monitoring));
+}
+
+void
+Session::rt_set_monitoring (boost::shared_ptr<RouteList> rl, MonitorChoice mc, bool /* group_override */)
{
- SessionEvent* ev = new SessionEvent (SessionEvent::RealTimeOperation, SessionEvent::Add, SessionEvent::Immediate, 0, 0.0);
- ev->rt_slot = boost::bind (method, this, rl, yn, group_override);
- ev->rt_return = after;
- ev->event_loop = EventLoop::get_event_loop_for_thread ();
+ for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) {
+ if (!(*i)->is_hidden()) {
+ boost::shared_ptr<Track> t = boost::dynamic_pointer_cast<Track> (*i);
+ if (t) {
+ t->set_monitoring (mc);
+ }
+ }
+ }
- return ev;
+ set_dirty();
}
void