summaryrefslogtreecommitdiff
path: root/libs/ardour/slavable.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2016-12-12 18:43:47 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2016-12-12 18:43:55 +0000
commite37bfffca5692509ede7481b7cadda7606cc3e17 (patch)
treedc62d7340f94ce918c1f4ee020d7f810bf3bf2da /libs/ardour/slavable.cc
parentafa6720288fce4513dc16c9cb53562c051172c52 (diff)
Add Slavable::AssignmentChanged signal to notify when a slavable is assigned/unassigned to/from a master
Diffstat (limited to 'libs/ardour/slavable.cc')
-rw-r--r--libs/ardour/slavable.cc40
1 files changed, 24 insertions, 16 deletions
diff --git a/libs/ardour/slavable.cc b/libs/ardour/slavable.cc
index 10eb084372..61a11f257d 100644
--- a/libs/ardour/slavable.cc
+++ b/libs/ardour/slavable.cc
@@ -117,19 +117,23 @@ 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());
- }
+ {
+ Glib::Threads::RWLock::WriterLock lm (master_lock);
+ if (assign_controls (v) == 0) {
+ _masters.insert (v->number());
+ }
+
+ /* Do NOT use ::unassign() because it will store a
+ * boost::shared_ptr<VCA> in the functor, leaving a dangling ref to the
+ * VCA.
+ */
- /* Do NOT use ::unassign() because it will store a
- * boost::shared_ptr<VCA> in the functor, leaving a dangling ref to the
- * VCA.
- */
+ v->Drop.connect_same_thread (unassign_connections, boost::bind (&Slavable::weak_unassign, this, boost::weak_ptr<VCA>(v)));
+ v->DropReferences.connect_same_thread (unassign_connections, boost::bind (&Slavable::weak_unassign, this, boost::weak_ptr<VCA>(v)));
+ }
- v->Drop.connect_same_thread (unassign_connections, boost::bind (&Slavable::weak_unassign, this, boost::weak_ptr<VCA>(v)));
- v->DropReferences.connect_same_thread (unassign_connections, boost::bind (&Slavable::weak_unassign, this, boost::weak_ptr<VCA>(v)));
+ AssignmentChange (v, true);
}
void
@@ -144,13 +148,17 @@ Slavable::weak_unassign (boost::weak_ptr<VCA> v)
void
Slavable::unassign (boost::shared_ptr<VCA> v)
{
- Glib::Threads::RWLock::WriterLock lm (master_lock);
- (void) unassign_controls (v);
- if (v) {
- _masters.erase (v->number());
- } else {
- _masters.clear ();
+ {
+ Glib::Threads::RWLock::WriterLock lm (master_lock);
+
+ (void) unassign_controls (v);
+ if (v) {
+ _masters.erase (v->number());
+ } else {
+ _masters.clear ();
+ }
}
+ AssignmentChange (v, false);
}
/* Gain, solo & mute are currently the only controls that are