summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/ardour/ardour/plugin.h6
-rw-r--r--libs/ardour/ardour/plugin_insert.h1
-rw-r--r--libs/ardour/ardour/processor.h2
-rw-r--r--libs/ardour/plugin_insert.cc10
4 files changed, 18 insertions, 1 deletions
diff --git a/libs/ardour/ardour/plugin.h b/libs/ardour/ardour/plugin.h
index 09cd066527..612091191e 100644
--- a/libs/ardour/ardour/plugin.h
+++ b/libs/ardour/ardour/plugin.h
@@ -51,6 +51,7 @@ class PluginInsert;
class Plugin;
class PluginInfo;
class AutomationControl;
+class SessionObject;
typedef boost::shared_ptr<Plugin> PluginPtr;
typedef boost::shared_ptr<PluginInfo> PluginInfoPtr;
@@ -262,6 +263,9 @@ class LIBARDOUR_API Plugin : public PBD::StatefulDestructible, public Latent
PluginInfoPtr get_info() const { return _info; }
virtual void set_info (const PluginInfoPtr inf);
+ virtual void set_owner (SessionObject* o) { _owner = o; }
+ SessionObject* owner() const { return _owner; }
+
ARDOUR::AudioEngine& engine() const { return _engine; }
ARDOUR::Session& session() const { return _session; }
@@ -335,6 +339,8 @@ protected:
uint32_t _cycles;
std::map<std::string, PresetRecord> _presets;
+ SessionObject* _owner;
+
private:
/** Fill _presets with our presets */
diff --git a/libs/ardour/ardour/plugin_insert.h b/libs/ardour/ardour/plugin_insert.h
index a9a2ce6273..474df73e41 100644
--- a/libs/ardour/ardour/plugin_insert.h
+++ b/libs/ardour/ardour/plugin_insert.h
@@ -59,6 +59,7 @@ class LIBARDOUR_API PluginInsert : public Processor
XMLNode& get_state(void);
int set_state(const XMLNode&, int version);
void update_id (PBD::ID);
+ void set_owner (SessionObject*);
void set_state_dir (const std::string& d = "");
void run (BufferSet& in, framepos_t start_frame, framepos_t end_frame, double speed, pframes_t nframes, bool);
diff --git a/libs/ardour/ardour/processor.h b/libs/ardour/ardour/processor.h
index 1a4863ff2d..32e8b7c7e5 100644
--- a/libs/ardour/ardour/processor.h
+++ b/libs/ardour/ardour/processor.h
@@ -127,7 +127,7 @@ class LIBARDOUR_API Processor : public SessionObject, public Automatable, public
PluginPinWindowProxy * pinmgr_proxy () const { return _pinmgr_proxy; }
void set_pingmgr_proxy (PluginPinWindowProxy* wp) { _pinmgr_proxy = wp ; }
- void set_owner (SessionObject*);
+ virtual void set_owner (SessionObject*);
SessionObject* owner() const;
protected:
diff --git a/libs/ardour/plugin_insert.cc b/libs/ardour/plugin_insert.cc
index c3dae8b71f..2283f99e4b 100644
--- a/libs/ardour/plugin_insert.cc
+++ b/libs/ardour/plugin_insert.cc
@@ -2618,6 +2618,15 @@ PluginInsert::update_id (PBD::ID id)
}
void
+PluginInsert::set_owner (SessionObject* o)
+{
+ Processor::set_owner (o);
+ for (Plugins::iterator i = _plugins.begin(); i != _plugins.end(); ++i) {
+ (*i)->set_owner (o);
+ }
+}
+
+void
PluginInsert::set_state_dir (const std::string& d)
{
// state() only saves the state of the first plugin
@@ -2907,6 +2916,7 @@ void
PluginInsert::add_plugin (boost::shared_ptr<Plugin> plugin)
{
plugin->set_insert_id (this->id());
+ plugin->set_owner (_owner);
if (_plugins.empty()) {
/* first (and probably only) plugin instance - connect to relevant signals */