13
0

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
This commit is contained in:
Paul Davis 2011-02-01 02:41:31 +00:00
parent deee47bcae
commit b78d036aa0
3 changed files with 39 additions and 0 deletions

View File

@ -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) {

View File

@ -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() { }
@ -100,6 +101,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

View File

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