more solo propagation fixes.
authorRobin Gareus <robin@gareus.org>
Tue, 6 Oct 2015 12:14:44 +0000 (14:14 +0200)
committerRobin Gareus <robin@gareus.org>
Tue, 6 Oct 2015 12:14:44 +0000 (14:14 +0200)
handle cases  Track(s) -> Bus1 -> Bus2

libs/ardour/route.cc
libs/ardour/session.cc

index a5c1af0e870a45cd191ece2e05a25ce56b79dce9..5393bcc6820dbf5c03e583421338e51b0aaf4887 100644 (file)
@@ -900,8 +900,11 @@ Route::mod_solo_by_others_upstream (int32_t delta)
             (old_sbu > 0 && _soloed_by_others_upstream == 0))) {
 
                if (delta > 0 || !Config->get_exclusive_solo()) {
-                       DEBUG_TRACE (DEBUG::Solo, "\t ... INVERT push\n");
+                       DEBUG_TRACE (DEBUG::Solo, string_compose("\t ... INVERT push from %1\n", _name));
                        for (FedBy::iterator i = _fed_by.begin(); i != _fed_by.end(); ++i) {
+                               if (i->sends_only) {
+                                       continue;
+                               }
                                boost::shared_ptr<Route> sr = i->r.lock();
                                if (sr) {
                                        sr->mod_solo_by_others_downstream (-delta);
index 12d53f337383b20ed27143b832e4a135e5e913ee..9d0c4f9662adcfc9cd723f41a5a30ffea46f93c7 100644 (file)
@@ -3614,6 +3614,8 @@ Session::route_solo_changed (bool self_solo_change, void* /*src*/, boost::weak_p
                        if (!via_sends_only) {
                                if (!route->soloed_by_others_upstream()) {
                                        (*i)->mod_solo_by_others_downstream (delta);
+                               } else {
+                                       DEBUG_TRACE (DEBUG::Solo, "\talready soloed by others upstream\n");
                                }
                        } else {
                                DEBUG_TRACE (DEBUG::Solo, string_compose ("\tthere is a send-only feed from %1\n", (*i)->name()));
@@ -3638,12 +3640,9 @@ Session::route_solo_changed (bool self_solo_change, void* /*src*/, boost::weak_p
                                                                  route->soloed_by_others_downstream(),
                                                                  route->soloed_by_others_upstream()));
                        if (!via_sends_only) {
-                               if (!route->soloed_by_others_downstream()) {
-                                       DEBUG_TRACE (DEBUG::Solo, string_compose ("\tmod %1 by %2\n", (*i)->name(), delta));
-                                       (*i)->mod_solo_by_others_upstream (delta);
-                               } else {
-                                       DEBUG_TRACE (DEBUG::Solo, "\talready soloed by others downstream\n");
-                               }
+                               //NB. Triggers Invert Push, which handles soloed by downstream
+                               DEBUG_TRACE (DEBUG::Solo, string_compose ("\tmod %1 by %2\n", (*i)->name(), delta));
+                               (*i)->mod_solo_by_others_upstream (delta);
                        } else {
                                DEBUG_TRACE (DEBUG::Solo, string_compose ("\tfeed to %1 ignored, sends-only\n", (*i)->name()));
                        }