summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2016-03-14 10:42:01 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2016-03-14 10:42:01 -0400
commit420cc9b4478059cfeabd8da5b2a25595a1de29fb (patch)
tree2b474a7a32ec7fb2cd39e15501952ba56b87721f
parent591f92e5319800a1610b701727441a56f69f196d (diff)
use ForGroup to flag and detect route-group based control changes
-rw-r--r--libs/ardour/route.cc14
-rw-r--r--libs/ardour/route_group_member.cc2
-rw-r--r--libs/ardour/session.cc2
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()) {