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.
This commit is contained in:
Robin Gareus 2014-11-29 01:35:49 +01:00
parent 784b96e255
commit 58663db374
4 changed files with 30 additions and 119 deletions

View file

@ -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;
};

View file

@ -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)
{
}
@ -271,6 +274,12 @@ Processor::set_ui (void* p)
_ui_pointer = p;
}
void
Processor::set_window_proxy (ProcessorWindowProxy* wp)
{
_window_proxy = wp;
}
void
Processor::set_owner (SessionObject* o)
{