From 0c368499f844d79ac6d268f459cd3b00a35e19ca Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Thu, 28 Mar 2019 03:01:53 +0100 Subject: [PATCH] Fix route-templates with external sends --- libs/ardour/io.cc | 15 +++++++++++++++ libs/ardour/session.cc | 8 ++++++++ 2 files changed, 23 insertions(+) diff --git a/libs/ardour/io.cc b/libs/ardour/io.cc index 5d6d343f2e..693dc07f23 100644 --- a/libs/ardour/io.cc +++ b/libs/ardour/io.cc @@ -576,6 +576,21 @@ IO::set_state (const XMLNode& node, int version) if (create_ports (node, version)) { return -1; } + if (_sendish && _direction == Output) { + /* ignore from XML for sends, but use the names + * ::ensure_ports_locked() creates port using ::build_legal_port_name() + * This is needed to properly restore connections when creating + * external sends from templates because the IO name changes. + */ + PortSet::iterator i = _ports.begin(); + XMLNodeConstIterator x = node.children().begin(); + for (; i != _ports.end(), x != node.children().end(); ++i, ++x) { + if ((*x)->name() == "Port") { + (*x)->remove_property (X_("name")); + (*x)->set_property (X_("name"), i->name()); + } + } + } // after create_ports, updates names if (node.get_property ("pretty-name", name)) { diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index d6753c50d9..5170456938 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -3439,6 +3439,14 @@ Session::new_route_from_template (uint32_t how_many, PresentationInfo::order_t i (*i)->remove_property (X_("name")); (*i)->set_property ("bitslot", bitslot); (*i)->set_property ("name", name); + XMLNodeList io_kids = (*i)->children (); + for (XMLNodeList::iterator j = io_kids.begin(); j != io_kids.end(); ++j) { + if ((*j)->name() != X_("IO")) { + continue; + } + (*j)->remove_property (X_("name")); + (*j)->set_property ("name", name); + } } else if (type && type->value() == X_("intreturn")) { (*i)->remove_property (X_("bitslot"));