From 420cc9b4478059cfeabd8da5b2a25595a1de29fb Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Mon, 14 Mar 2016 10:42:01 -0400 Subject: [PATCH] use ForGroup to flag and detect route-group based control changes --- libs/ardour/route.cc | 14 +++++++------- libs/ardour/route_group_member.cc | 2 +- libs/ardour/session.cc | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc index 3523d82a5a..74b3a87fcf 100644 --- a/libs/ardour/route.cc +++ b/libs/ardour/route.cc @@ -807,7 +807,7 @@ Route::set_listen (bool yn, Controllable::GroupControlDisposition group_override } if (use_group (group_override, &RouteGroup::is_solo)) { - _route_group->foreach_route (boost::bind (&Route::set_listen, _1, yn, Controllable::NoGroup)); + _route_group->foreach_route (boost::bind (&Route::set_listen, _1, yn, Controllable::ForGroup)); return; } @@ -892,6 +892,9 @@ Route::clear_all_solo_state () void Route::set_solo (bool yn, Controllable::GroupControlDisposition group_override) { + DEBUG_TRACE (DEBUG::Solo, string_compose ("%1: set solo => %2, grp ? %3 currently self-soloed ? %4\n", + name(), yn, enum_2_string(group_override), self_soloed())); + if (_solo_safe) { DEBUG_TRACE (DEBUG::Solo, string_compose ("%1 ignore solo change due to solo-safe\n", name())); return; @@ -903,13 +906,10 @@ Route::set_solo (bool yn, Controllable::GroupControlDisposition group_override) } if (use_group (group_override, &RouteGroup::is_solo)) { - _route_group->foreach_route (boost::bind (&Route::set_solo, _1, yn, Controllable::NoGroup)); + _route_group->foreach_route (boost::bind (&Route::set_solo, _1, yn, Controllable::ForGroup)); return; } - DEBUG_TRACE (DEBUG::Solo, string_compose ("%1: set solo => %2, grp ? %3 currently self-soloed ? %4\n", - name(), yn, enum_2_string(group_override), self_soloed())); - if (self_soloed() != yn) { set_self_solo (yn); solo_changed (true, group_override); /* EMIT SIGNAL */ @@ -1054,7 +1054,7 @@ Route::set_solo_isolated (bool yn, Controllable::GroupControlDisposition group_o } if (use_group (group_override, &RouteGroup::is_solo)) { - _route_group->foreach_route (boost::bind (&Route::set_solo_isolated, _1, yn, Controllable::NoGroup)); + _route_group->foreach_route (boost::bind (&Route::set_solo_isolated, _1, yn, Controllable::ForGroup)); return; } @@ -1124,7 +1124,7 @@ void Route::set_mute (bool yn, Controllable::GroupControlDisposition group_override) { if (use_group (group_override, &RouteGroup::is_mute)) { - _route_group->foreach_route (boost::bind (&Route::set_mute, _1, yn, Controllable::NoGroup)); + _route_group->foreach_route (boost::bind (&Route::set_mute, _1, yn, Controllable::ForGroup)); return; } diff --git a/libs/ardour/route_group_member.cc b/libs/ardour/route_group_member.cc index 9ca94bfb2b..280d193fba 100644 --- a/libs/ardour/route_group_member.cc +++ b/libs/ardour/route_group_member.cc @@ -41,7 +41,7 @@ RouteGroupMember::use_group (PBD::Controllable::GroupControlDisposition gcd, boo { bool active_for_predicate = _route_group && (_route_group->*predicate)() && _route_group->is_active(); - return (gcd != PBD::Controllable::NoGroup) && + return ((gcd != PBD::Controllable::NoGroup) && (gcd != PBD::Controllable::ForGroup)) && _route_group && ((active_for_predicate && (gcd != PBD::Controllable::InverseGroup)) || (!active_for_predicate && (gcd == PBD::Controllable::InverseGroup))); diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index a324aedbc6..f58994a0d3 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -3701,7 +3701,7 @@ Session::route_solo_changed (bool self_solo_change, Controllable::GroupControlDi */ RouteGroup* rg = route->route_group (); - const bool group_already_accounted_for = route->use_group (group_override, &RouteGroup::is_solo); + const bool group_already_accounted_for = (group_override == Controllable::ForGroup); if (delta == 1 && Config->get_exclusive_solo()) { -- 2.30.2