fix up logic that connects ControlGroups and RouteGroups
authorPaul Davis <paul@linuxaudiosystems.com>
Tue, 7 Jun 2016 13:48:17 +0000 (09:48 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Tue, 7 Jun 2016 13:48:17 +0000 (09:48 -0400)
This makes deactivating a RouteGroup also stop the ControlGroups from having any effect

libs/ardour/control_group.cc
libs/ardour/route_group.cc

index 36ea1efc63141db29d0faa1878cd32b79919a8ca..25f21a8775328595bdd843d2aac38f7b32bdc716 100644 (file)
@@ -155,6 +155,10 @@ ControlGroup::set_group_value (boost::shared_ptr<AutomationControl> control, dou
 
        control->set_value (val, Controllable::ForGroup);
 
+       if (!_active) {
+               return;
+       }
+
        /* now propagate across the group */
 
        Glib::Threads::RWLock::ReaderLock lm (controls_lock);
@@ -237,6 +241,10 @@ GainControlGroup::set_group_value (boost::shared_ptr<AutomationControl> control,
 
        /* now propagate across the group */
 
+       if (!_active) {
+               return;
+       }
+
        Glib::Threads::RWLock::ReaderLock lm (controls_lock);
 
        if (_mode & Relative) {
index 428855456573add04d8e6ab40f1541eb2c830202..ce6e4a12e24a2755c4748e7b8061e6e8d1c71fb2 100644 (file)
@@ -395,6 +395,9 @@ RouteGroup::set_active (bool yn, void* /*src*/)
        }
 
        _active = yn;
+
+       push_to_groups ();
+
        send_change (PropertyChange (Properties::active));
        _session.set_dirty ();
 }
@@ -539,11 +542,19 @@ RouteGroup::post_set (PBD::PropertyChange const &)
 void
 RouteGroup::push_to_groups ()
 {
-       _gain_group->set_active (_gain);
-       _solo_group->set_active (_solo);
-       _mute_group->set_active (_mute);
-       _rec_enable_group->set_active (_recenable);
-       _monitoring_group->set_active (_monitoring);
+       if (_active) {
+               _gain_group->set_active (is_gain());
+               _solo_group->set_active (is_solo());
+               _mute_group->set_active (is_mute());
+               _rec_enable_group->set_active (is_recenable());
+               _monitoring_group->set_active (is_monitoring());
+       } else {
+               _gain_group->set_active (false);
+               _solo_group->set_active (false);
+               _mute_group->set_active (false);
+               _rec_enable_group->set_active (false);
+               _monitoring_group->set_active (false);
+       }
 }
 
 void