summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2014-11-29 01:35:49 +0100
committerRobin Gareus <robin@gareus.org>2014-11-29 10:06:25 +0100
commit58663db3743dbb5feddd9fc4221e7a328ef3b4ed (patch)
tree540cc34efde1549482e91f68390e1e7d727468d9 /libs
parent784b96e255e67f5166e1c610dea950eaf0a1f025 (diff)
change ownership of processor window-proxy
fixes crashes: * If the Editor-Mixer shows a channel with a plugin that has been edited in the Mixer, double-clicking the plugin will try to bring up a 2nd instance of the plugin-UI. * When closing Ardour both the Mixer and the Editor-Mixer try to delete the underlying plugin, resulting in a double free.
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/ardour/processor.h5
-rw-r--r--libs/ardour/processor.cc9
2 files changed, 14 insertions, 0 deletions
diff --git a/libs/ardour/ardour/processor.h b/libs/ardour/ardour/processor.h
index 85d466a169..4f8434f179 100644
--- a/libs/ardour/ardour/processor.h
+++ b/libs/ardour/ardour/processor.h
@@ -35,6 +35,7 @@
#include "ardour/automatable.h"
class XMLNode;
+class ProcessorWindowProxy;
namespace ARDOUR {
@@ -114,6 +115,9 @@ class LIBARDOUR_API Processor : public SessionObject, public Automatable, public
void set_ui (void*);
void* get_ui () const { return _ui_pointer; }
+ ProcessorWindowProxy * window_proxy () const { return _window_proxy; }
+ void set_window_proxy (ProcessorWindowProxy* wp);
+
void set_owner (SessionObject*);
SessionObject* owner() const;
@@ -129,6 +133,7 @@ protected:
bool _display_to_user;
bool _pre_fader; ///< true if this processor is currently placed before the Amp, otherwise false
void* _ui_pointer;
+ ProcessorWindowProxy *_window_proxy;
SessionObject* _owner;
};
diff --git a/libs/ardour/processor.cc b/libs/ardour/processor.cc
index d571f55688..ca1f71db5a 100644
--- a/libs/ardour/processor.cc
+++ b/libs/ardour/processor.cc
@@ -63,6 +63,7 @@ Processor::Processor(Session& session, const string& name)
, _display_to_user (true)
, _pre_fader (false)
, _ui_pointer (0)
+ , _window_proxy (0)
, _owner (0)
{
}
@@ -79,6 +80,8 @@ Processor::Processor (const Processor& other)
, _display_to_user (true)
, _pre_fader (false)
, _ui_pointer (0)
+ , _window_proxy (0)
+ , _owner (0)
{
}
@@ -272,6 +275,12 @@ Processor::set_ui (void* p)
}
void
+Processor::set_window_proxy (ProcessorWindowProxy* wp)
+{
+ _window_proxy = wp;
+}
+
+void
Processor::set_owner (SessionObject* o)
{
_owner = o;