summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2015-07-10 22:09:18 +0200
committerRobin Gareus <robin@gareus.org>2015-07-10 22:09:18 +0200
commit4c608b6e04b7187f19ecb80e1b804b2b9c65cb34 (patch)
treed44fa6000530e5e3f53a1d728fcb2e0c559ec6a6
parent9ab76a5cf0a8dc2ce1032184970225fb7491deaf (diff)
assign new IDs to plugin copies on paste.
when copying a plugin the state is transferred by serializing XML and setting state from XML. This state includes the unique ID. This ID needs to be identical at first in order to load the state from <session-dir>/plugins/<ID>/*
-rw-r--r--gtk2_ardour/processor_box.cc5
-rw-r--r--libs/ardour/ardour/plugin_insert.h1
-rw-r--r--libs/ardour/plugin_insert.cc9
3 files changed, 13 insertions, 2 deletions
diff --git a/gtk2_ardour/processor_box.cc b/gtk2_ardour/processor_box.cc
index 71435fe9e4..a059f32a05 100644
--- a/gtk2_ardour/processor_box.cc
+++ b/gtk2_ardour/processor_box.cc
@@ -2155,9 +2155,10 @@ ProcessorBox::paste_processor_state (const XMLNodeList& nlist, boost::shared_ptr
/* XXX its a bit limiting to assume that everything else
is a plugin.
*/
-
p.reset (new PluginInsert (*_session));
- p->set_state (**niter, Stateful::current_state_version);
+ PBD::ID id = p->id();
+ p->set_state (**niter, Stateful::current_state_version);
+ boost::dynamic_pointer_cast<PluginInsert>(p)->update_id (id);
}
copies.push_back (p);
diff --git a/libs/ardour/ardour/plugin_insert.h b/libs/ardour/ardour/plugin_insert.h
index e01f56d8bf..7504478e87 100644
--- a/libs/ardour/ardour/plugin_insert.h
+++ b/libs/ardour/ardour/plugin_insert.h
@@ -53,6 +53,7 @@ class LIBARDOUR_API PluginInsert : public Processor
XMLNode& state(bool);
XMLNode& get_state(void);
int set_state(const XMLNode&, int version);
+ void update_id (PBD::ID);
void run (BufferSet& in, framepos_t start_frame, framepos_t end_frame, pframes_t nframes, bool);
void silence (framecnt_t nframes);
diff --git a/libs/ardour/plugin_insert.cc b/libs/ardour/plugin_insert.cc
index 8da0abb00f..b490646ffc 100644
--- a/libs/ardour/plugin_insert.cc
+++ b/libs/ardour/plugin_insert.cc
@@ -1146,6 +1146,15 @@ PluginInsert::set_state(const XMLNode& node, int version)
}
void
+PluginInsert::update_id (PBD::ID id)
+{
+ set_id (id.to_s());
+ for (Plugins::iterator i = _plugins.begin(); i != _plugins.end(); ++i) {
+ (*i)->set_insert_id (id);
+ }
+}
+
+void
PluginInsert::set_parameter_state_2X (const XMLNode& node, int version)
{
XMLNodeList nlist = node.children();