summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/ardour/io.h1
-rw-r--r--libs/ardour/io.cc40
-rw-r--r--libs/ardour/io_processor.cc2
3 files changed, 42 insertions, 1 deletions
diff --git a/libs/ardour/ardour/io.h b/libs/ardour/ardour/io.h
index 88706ecea1..2451611b1b 100644
--- a/libs/ardour/ardour/io.h
+++ b/libs/ardour/ardour/io.h
@@ -144,6 +144,7 @@ class IO : public SessionObject, public Latent
XMLNode& get_state (void);
int set_state (const XMLNode&, int version);
int set_state_2X (const XMLNode&, int, bool);
+ static void prepare_for_reset (XMLNode&, const std::string&);
class BoolCombiner {
public:
diff --git a/libs/ardour/io.cc b/libs/ardour/io.cc
index 3805d7ac83..93ab043308 100644
--- a/libs/ardour/io.cc
+++ b/libs/ardour/io.cc
@@ -614,6 +614,8 @@ IO::set_state (const XMLNode& node, int version)
return -1;
}
+ cerr << "IO::set state, connecting legal ? " << connecting_legal << endl;
+
if (connecting_legal) {
if (make_connections (node, version, false)) {
@@ -956,6 +958,44 @@ IO::make_connections (const XMLNode& node, int version, bool in)
return 0;
}
+void
+IO::prepare_for_reset (XMLNode& node, const std::string& name)
+{
+ /* reset name */
+ node.add_property ("name", name);
+
+ /* now find connections and reset the name of the port
+ in one so that when we re-use it it will match
+ the name of the thing we're applying it to.
+ */
+
+ XMLProperty* prop;
+ XMLNodeList children = node.children();
+
+ for (XMLNodeIterator i = children.begin(); i != children.end(); ++i) {
+
+ if ((*i)->name() == "Port") {
+
+ prop = (*i)->property (X_("name"));
+
+ if (prop) {
+ string new_name;
+ string old = prop->value();
+ string::size_type slash = old.find ('/');
+
+ if (slash != string::npos) {
+ /* port name is of form: <IO-name>/<port-name> */
+
+ new_name = name;
+ new_name += old.substr (old.find ('/'));
+
+ prop->set_value (new_name);
+ }
+ }
+ }
+ }
+}
+
int
IO::make_connections_2X (const XMLNode& node, int /*version*/, bool in)
diff --git a/libs/ardour/io_processor.cc b/libs/ardour/io_processor.cc
index e1d1461bcd..d5e0f3e0eb 100644
--- a/libs/ardour/io_processor.cc
+++ b/libs/ardour/io_processor.cc
@@ -318,6 +318,6 @@ IOProcessor::prepare_for_reset (XMLNode &state, const std::string& name)
XMLNode* io_node = state.child (IO::state_node_name.c_str());
if (io_node) {
- io_node->add_property ("name", name);
+ IO::prepare_for_reset (*io_node, name);
}
}