use ForGroup to flag and detect route-group based control changes
authorPaul Davis <paul@linuxaudiosystems.com>
Mon, 14 Mar 2016 14:42:01 +0000 (10:42 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Mon, 14 Mar 2016 14:42:01 +0000 (10:42 -0400)
libs/ardour/route.cc
libs/ardour/route_group_member.cc
libs/ardour/session.cc

index 3523d82a5ae70ca6251268cd677725f582b9a95d..74b3a87fcf96985adacca1b9981f8236f1cac14e 100644 (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;
        }
 
index 9ca94bfb2bc4851383e6269a43ff82bd70f5d1bd..280d193fba1d90dc11b3cff20b18c878529aa2ff 100644 (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)));
index a324aedbc68dd37b1ab7dfc530ec895dee1d3073..f58994a0d3f48d8c9d131d4db79afb8fc77f4eb8 100644 (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()) {