summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2007-06-04 21:53:39 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2007-06-04 21:53:39 +0000
commitdcc577534d198a20ace3434a2fc2052adb8af7fe (patch)
treefb3696dccd4328d3406b38e68ef4d497247b8318 /libs
parent28e8112676ec7139bd4fc08e23c0071bb11be434 (diff)
(full tree) fix for redirect state restore issues, remove trunk-only clock modes from menu defs
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@1953 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/route.cc41
1 files changed, 24 insertions, 17 deletions
diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc
index 11132984f0..84712851eb 100644
--- a/libs/ardour/route.cc
+++ b/libs/ardour/route.cc
@@ -893,6 +893,8 @@ Route::add_redirects (const RedirectList& others, void *src, uint32_t* err_strea
{
uint32_t old_rmo = redirect_max_outs;
+ assert (ports_legal);
+
if (!_session.engine().connected()) {
return 1;
}
@@ -994,6 +996,8 @@ Route::remove_redirect (boost::shared_ptr<Redirect> redirect, void *src, uint32_
{
uint32_t old_rmo = redirect_max_outs;
+ assert (ports_legal);
+
if (!_session.engine().connected()) {
return 1;
}
@@ -1705,25 +1709,20 @@ Route::_set_state (const XMLNode& node, bool call_base)
}
}
- if (ports_legal) {
-
- /* if ports are not legal, this will happen in set_deferred_state() */
- XMLNodeList redirect_nodes;
+ XMLNodeList redirect_nodes;
+
+ for (niter = nlist.begin(); niter != nlist.end(); ++niter){
- for (niter = nlist.begin(); niter != nlist.end(); ++niter){
-
- child = *niter;
-
- if (child->name() == X_("Send") || child->name() == X_("Insert")) {
- redirect_nodes.push_back(child);
- }
-
+ child = *niter;
+
+ if (child->name() == X_("Send") || child->name() == X_("Insert")) {
+ redirect_nodes.push_back(child);
}
- _set_redirect_states (redirect_nodes);
}
-
+
+ _set_redirect_states (redirect_nodes);
for (niter = nlist.begin(); niter != nlist.end(); ++niter){
child = *niter;
@@ -1794,19 +1793,27 @@ Route::_set_redirect_states(const XMLNodeList &nlist)
RedirectList::iterator i, o;
+ if (!ports_legal) {
+
+ for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
+ deferred_state->add_child_copy (**niter);
+ }
+
+ return;
+ }
+
// Iterate through existing redirects, remove those which are not in the state list
for (i = _redirects.begin(); i != _redirects.end(); ) {
RedirectList::iterator tmp = i;
++tmp;
bool redirectInStateList = false;
-
- (*i)->id().print (buf, sizeof (buf));
+ (*i)->id().print (buf, sizeof (buf));
for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
- if (strncmp(buf,(*niter)->child(X_("Redirect"))->child(X_("IO"))->property(X_("id"))->value().c_str(), sizeof(buf)) == 0) {
+ if (strncmp (buf,(*niter)->child(X_("Redirect"))->child(X_("IO"))->property(X_("id"))->value().c_str(), sizeof(buf)) == 0) {
redirectInStateList = true;
break;
}