diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2011-02-01 02:41:31 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2011-02-01 02:41:31 +0000 |
commit | b78d036aa056af0ef4f5821c45dae5f70bc69231 (patch) | |
tree | 639a9169028c22d827b316bb26cf03d8b2ba4a1a | |
parent | deee47bcaea08eb94d25bc3c308c6c199b8e0708 (diff) |
store void pointers to processor UIs in Processors, and reset ProcessorWindowProxy objects to use them, so that we can never create 2 windows (UIs) for the same processor
git-svn-id: svn://localhost/ardour2/branches/3.0@8638 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r-- | gtk2_ardour/processor_box.cc | 14 | ||||
-rw-r--r-- | libs/ardour/ardour/processor.h | 5 | ||||
-rw-r--r-- | libs/ardour/processor.cc | 20 |
3 files changed, 39 insertions, 0 deletions
diff --git a/gtk2_ardour/processor_box.cc b/gtk2_ardour/processor_box.cc index ecd2319a5f..7dc2f4f25f 100644 --- a/gtk2_ardour/processor_box.cc +++ b/gtk2_ardour/processor_box.cc @@ -1197,6 +1197,17 @@ ProcessorBox::maybe_add_processor_to_ui_list (boost::weak_ptr<Processor> w) w); wp->marked = true; + + /* if the processor already has an existing UI, + note that so that we don't recreate it + */ + + void* existing_ui = p->get_ui (); + + if (existing_ui) { + wp->set (static_cast<Gtk::Window*>(existing_ui)); + } + _processor_window_proxies.push_back (wp); ARDOUR_UI::instance()->add_window_proxy (wp); } @@ -2234,6 +2245,9 @@ void ProcessorBox::set_processor_ui (boost::shared_ptr<Processor> p, Gtk::Window* w) { list<ProcessorWindowProxy*>::iterator i = _processor_window_proxies.begin (); + + p->set_ui (w); + while (i != _processor_window_proxies.end()) { boost::shared_ptr<Processor> t = (*i)->processor().lock (); if (t && t == p) { diff --git a/libs/ardour/ardour/processor.h b/libs/ardour/ardour/processor.h index 9038088cf0..94b9363480 100644 --- a/libs/ardour/ardour/processor.h +++ b/libs/ardour/ardour/processor.h @@ -48,6 +48,7 @@ class Processor : public SessionObject, public Automatable, public Latent static const std::string state_node_name; Processor(Session&, const std::string& name); + Processor (const Processor& other); virtual ~Processor() { } @@ -99,6 +100,9 @@ class Processor : public SessionObject, public Automatable, public Latent PBD::Signal0<void> ActiveChanged; PBD::Signal2<void,ChanCount,ChanCount> ConfigurationChanged; + + void set_ui (void*); + void* get_ui () const { return _ui_pointer; } protected: virtual int set_state_2X (const XMLNode&, int version); @@ -111,6 +115,7 @@ protected: ChanCount _configured_output; bool _display_to_user; bool _pre_fader; + void* _ui_pointer; }; } // namespace ARDOUR diff --git a/libs/ardour/processor.cc b/libs/ardour/processor.cc index 69d0f2408d..8ddc58735c 100644 --- a/libs/ardour/processor.cc +++ b/libs/ardour/processor.cc @@ -68,6 +68,20 @@ Processor::Processor(Session& session, const string& name) , _configured(false) , _display_to_user (true) , _pre_fader (false) + , _ui_pointer (0) +{ +} + +Processor::Processor (const Processor& other) + : SessionObject(other.session(), other.name()) + , Automatable (other.session()) + , _pending_active(other._pending_active) + , _active(other._active) + , _next_ab_is_active(false) + , _configured(false) + , _display_to_user (true) + , _pre_fader (false) + , _ui_pointer (0) { } @@ -279,3 +293,9 @@ Processor::set_pre_fader (bool p) { _pre_fader = p; } + +void +Processor::set_ui (void* p) +{ + _ui_pointer = p; +} |