summaryrefslogtreecommitdiff
path: root/libs/ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2016-05-19 15:15:36 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2016-05-31 15:30:44 -0400
commit6c61194710c2e5758dd377af577933ae62e1dbec (patch)
tree57a000cd5183996a24f31483a6d54b479d82d40e /libs/ardour
parentcc3f029c73ec5367f42b394a40b0d86bb9823a4f (diff)
provide mechanism for "drop all slaves" for VCA master
Diffstat (limited to 'libs/ardour')
-rw-r--r--libs/ardour/ardour/slavable.h2
-rw-r--r--libs/ardour/ardour/vca.h2
-rw-r--r--libs/ardour/slavable.cc3
3 files changed, 7 insertions, 0 deletions
diff --git a/libs/ardour/ardour/slavable.h b/libs/ardour/ardour/slavable.h
index 147f90fda0..e5c8688df1 100644
--- a/libs/ardour/ardour/slavable.h
+++ b/libs/ardour/ardour/slavable.h
@@ -67,8 +67,10 @@ class LIBARDOUR_API Slavable
mutable Glib::Threads::RWLock master_lock;
std::set<uint32_t> _masters;
PBD::ScopedConnection assign_connection;
+ PBD::ScopedConnectionList unassign_connections;
int do_assign (VCAManager* s);
+
};
} // namespace ARDOUR
diff --git a/libs/ardour/ardour/vca.h b/libs/ardour/ardour/vca.h
index 2814cb68b4..eddfd628b4 100644
--- a/libs/ardour/ardour/vca.h
+++ b/libs/ardour/ardour/vca.h
@@ -60,6 +60,8 @@ class LIBARDOUR_API VCA : public Stripable,
XMLNode& get_state();
int set_state (XMLNode const&, int version);
+ PBD::Signal0<void> Drop; /* signal to slaves to drop control by this VCA */
+
/* Slavable API */
bool slaved_to (boost::shared_ptr<VCA>) const;
diff --git a/libs/ardour/slavable.cc b/libs/ardour/slavable.cc
index e3af33becf..b6921c55c1 100644
--- a/libs/ardour/slavable.cc
+++ b/libs/ardour/slavable.cc
@@ -115,10 +115,13 @@ Slavable::do_assign (VCAManager* manager)
void
Slavable::assign (boost::shared_ptr<VCA> v)
{
+ assert (v);
Glib::Threads::RWLock::WriterLock lm (master_lock);
if (assign_controls (v) == 0) {
_masters.insert (v->number());
}
+
+ v->Drop.connect_same_thread (unassign_connections, boost::bind (&Slavable::unassign, this, v));
}
void