diff options
Diffstat (limited to 'libs')
-rw-r--r-- | libs/ardour/ardour/io.h | 1 | ||||
-rw-r--r-- | libs/ardour/io.cc | 40 | ||||
-rw-r--r-- | libs/ardour/io_processor.cc | 2 |
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); } } |