summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2010-05-05 03:06:14 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2010-05-05 03:06:14 +0000
commit9a1cce915b4a281bcac42e5bddd881275fb08612 (patch)
tree4bd7407f29c101fd897f9d4d49e69a187f1e6900 /libs
parent056ceba16a5ab45aabec0cd10ae3228881e640dc (diff)
this might just be it for solo
git-svn-id: svn://localhost/ardour2/branches/3.0@7056 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/route.cc33
1 files changed, 15 insertions, 18 deletions
diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc
index e4052573b5..206cbef0ef 100644
--- a/libs/ardour/route.cc
+++ b/libs/ardour/route.cc
@@ -635,27 +635,24 @@ Route::mod_solo_by_others_upstream (int32_t delta)
not in reverse.
*/
- cerr << name() << " SbU ... latched solo? " << Config->get_solo_latched() << " delta = " << delta << endl;
+ cerr << name() << " SbU ... sbd = " << _soloed_by_others_downstream
+ << " ss = " << _self_solo << " latched solo? " << Config->get_solo_latched() << " delta = "
+ << delta << endl;
- bool push_inverse = false;
-
- if (old_sbu > 0 && _soloed_by_others_upstream == 0 && _self_solo) {
- /* we went back to non-soloed-by-others-upstream but we're still soloed push */
- push_inverse = true;
- }
+ if ((_self_solo || _soloed_by_others_downstream) &&
+ ((old_sbu == 0 && _soloed_by_others_upstream > 0) ||
+ (old_sbu > 0 && _soloed_by_others_upstream == 0))) {
- if (old_sbu == 0 && _soloed_by_others_upstream > 0) {
- /* upstream made us solo when we weren't before */
- push_inverse = true;
- }
-
- if (push_inverse) {
- cerr << "\t ... INVERT push\n";
- for (FedBy::iterator i = _fed_by.begin(); i != _fed_by.end(); ++i) {
- boost::shared_ptr<Route> sr = i->r.lock();
- if (sr) {
- sr->mod_solo_by_others_downstream (-delta);
+ if (delta > 0 || Config->get_solo_latched()) {
+ cerr << "\t ... INVERT push\n";
+ for (FedBy::iterator i = _fed_by.begin(); i != _fed_by.end(); ++i) {
+ boost::shared_ptr<Route> sr = i->r.lock();
+ if (sr) {
+ sr->mod_solo_by_others_downstream (-delta);
+ }
}
+ } else {
+ cerr << "\t... skip invert push\n";
}
}