summaryrefslogtreecommitdiff
path: root/libs/ardour/session_rtevents.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2016-03-08 10:42:20 -0500
committerPaul Davis <paul@linuxaudiosystems.com>2016-05-31 15:30:39 -0400
commita3c5b81ca13f81cd4db628096943f049bc6c0af1 (patch)
treeb71dc1f33f1a356cae56cf356326ee2636dec5bc /libs/ardour/session_rtevents.cc
parent9a0f4b1ef354f5ccc7cbe49a28b4a5eb35e0eb99 (diff)
Session API changes to enable VCAs to set soloed-by-upstream on assigned routes
Diffstat (limited to 'libs/ardour/session_rtevents.cc')
-rw-r--r--libs/ardour/session_rtevents.cc29
1 files changed, 29 insertions, 0 deletions
diff --git a/libs/ardour/session_rtevents.cc b/libs/ardour/session_rtevents.cc
index 5850643739..68ba15550e 100644
--- a/libs/ardour/session_rtevents.cc
+++ b/libs/ardour/session_rtevents.cc
@@ -90,6 +90,35 @@ Session::rt_set_solo (boost::shared_ptr<RouteList> rl, bool yn, Controllable::Gr
}
set_dirty();
+
+ /* XXX boost::shared_ptr<RouteList> goes out of scope here and is likley free()ed in RT context
+ * because boost's shared_ptr does reference counting and free/delete in the dtor.
+ * (this also applies to other rt_ methods here)
+ */
+}
+
+void
+Session::set_implicit_solo (boost::shared_ptr<RouteList> rl, int delta, bool upstream, SessionEvent::RTeventCallback after,
+ Controllable::GroupControlDisposition group_override)
+{
+ queue_event (get_rt_event (rl, delta, upstream, after, group_override, &Session::rt_set_implicit_solo));
+}
+
+void
+Session::rt_set_implicit_solo (boost::shared_ptr<RouteList> rl, int delta, bool upstream, PBD::Controllable::GroupControlDisposition)
+{
+ for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) {
+ if (!(*i)->is_auditioner()) {
+ if (upstream) {
+ (*i)->mod_solo_by_others_upstream (delta);
+ } else {
+ (*i)->mod_solo_by_others_downstream (delta);
+ }
+ }
+ }
+
+ set_dirty();
+
/* XXX boost::shared_ptr<RouteList> goes out of scope here and is likley free()ed in RT context
* because boost's shared_ptr does reference counting and free/delete in the dtor.
* (this also applies to other rt_ methods here)