diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2010-05-05 03:06:14 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2010-05-05 03:06:14 +0000 |
commit | 9a1cce915b4a281bcac42e5bddd881275fb08612 (patch) | |
tree | 4bd7407f29c101fd897f9d4d49e69a187f1e6900 /libs | |
parent | 056ceba16a5ab45aabec0cd10ae3228881e640dc (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.cc | 33 |
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"; } } |