summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2016-06-07 09:48:17 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2016-06-07 09:48:17 -0400
commit78ad42fd88791da359640329874e2abf2acbebc9 (patch)
tree4816f1ff3ef1944f278d079e787ade769c08c1be /libs
parentaf9a9a9efd17452931525e3ddcf1d57bcbc7f4a7 (diff)
fix up logic that connects ControlGroups and RouteGroups
This makes deactivating a RouteGroup also stop the ControlGroups from having any effect
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/control_group.cc8
-rw-r--r--libs/ardour/route_group.cc21
2 files changed, 24 insertions, 5 deletions
diff --git a/libs/ardour/control_group.cc b/libs/ardour/control_group.cc
index 36ea1efc63..25f21a8775 100644
--- a/libs/ardour/control_group.cc
+++ b/libs/ardour/control_group.cc
@@ -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) {
diff --git a/libs/ardour/route_group.cc b/libs/ardour/route_group.cc
index 4288554565..ce6e4a12e2 100644
--- a/libs/ardour/route_group.cc
+++ b/libs/ardour/route_group.cc
@@ -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