summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2011-02-01 02:41:31 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2011-02-01 02:41:31 +0000
commitb78d036aa056af0ef4f5821c45dae5f70bc69231 (patch)
tree639a9169028c22d827b316bb26cf03d8b2ba4a1a
parentdeee47bcaea08eb94d25bc3c308c6c199b8e0708 (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.cc14
-rw-r--r--libs/ardour/ardour/processor.h5
-rw-r--r--libs/ardour/processor.cc20
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;
+}