provide mechanism for "drop all slaves" for VCA master
authorPaul Davis <paul@linuxaudiosystems.com>
Thu, 19 May 2016 19:15:36 +0000 (15:15 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Tue, 31 May 2016 19:30:44 +0000 (15:30 -0400)
libs/ardour/ardour/slavable.h
libs/ardour/ardour/vca.h
libs/ardour/slavable.cc

index 147f90fda0b9f74fb292e86b3a08a0a569d47e77..e5c8688df1086360861e00de77610797bbf6e18f 100644 (file)
@@ -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
index 2814cb68b40e73cb5ec0b4b9fb91d63c53730b96..eddfd628b4b57937e7e507a6264d9f84cfff2806 100644 (file)
@@ -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;
index e3af33becf96558af0623759b14ce82fd6dd8d43..b6921c55c11be2dc83cf6c773b4e5f50508cbc55 100644 (file)
@@ -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