use ForGroup to flag and detect route-group based control changes

This commit is contained in:
Paul Davis 2016-03-14 10:42:01 -04:00
parent 591f92e531
commit 420cc9b447
3 changed files with 9 additions and 9 deletions

View File

@ -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;
}

View File

@ -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)));

View File

@ -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()) {