diff options
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/processor_box.cc | 13 | ||||
-rw-r--r-- | gtk2_ardour/processor_box.h | 2 | ||||
-rw-r--r-- | gtk2_ardour/window_manager.cc | 16 |
3 files changed, 23 insertions, 8 deletions
diff --git a/gtk2_ardour/processor_box.cc b/gtk2_ardour/processor_box.cc index abfae95543..b54a7817c8 100644 --- a/gtk2_ardour/processor_box.cc +++ b/gtk2_ardour/processor_box.cc @@ -3087,7 +3087,7 @@ ProcessorBox::edit_processor (boost::shared_ptr<Processor> processor) if (proxy) { proxy->set_custom_ui_mode (true); - proxy->toggle (); + proxy->show_the_right_window (); } } @@ -3105,7 +3105,7 @@ ProcessorBox::generic_edit_processor (boost::shared_ptr<Processor> processor) if (proxy) { proxy->set_custom_ui_mode (false); - proxy->toggle (); + proxy->show_the_right_window (); } } @@ -3371,13 +3371,16 @@ ProcessorWindowProxy::get (bool create) } void -ProcessorWindowProxy::toggle () +ProcessorWindowProxy::show_the_right_window () { if (_window && (is_custom != want_custom)) { /* drop existing window - wrong type */ drop_window (); + get (true); + setup (); + assert (_window); + is_custom = want_custom; } - is_custom = want_custom; - WM::ProxyBase::toggle (); + toggle (); } diff --git a/gtk2_ardour/processor_box.h b/gtk2_ardour/processor_box.h index a30b05b561..151788ec24 100644 --- a/gtk2_ardour/processor_box.h +++ b/gtk2_ardour/processor_box.h @@ -90,7 +90,7 @@ class ProcessorWindowProxy : public WM::ProxyBase } ARDOUR::SessionHandlePtr* session_handle(); - void toggle(); + void show_the_right_window (); void set_custom_ui_mode(bool use_custom) { want_custom = use_custom; } int set_state (const XMLNode&, int); diff --git a/gtk2_ardour/window_manager.cc b/gtk2_ardour/window_manager.cc index e5913c59e8..eadfc196c3 100644 --- a/gtk2_ardour/window_manager.cc +++ b/gtk2_ardour/window_manager.cc @@ -89,8 +89,20 @@ Manager::remove (const ProxyBase* info) void Manager::toggle_window (ProxyBase* proxy) { - if (proxy) { - proxy->toggle (); + + Glib::RefPtr<Gtk::Action> act = ARDOUR_UI::instance()->global_actions.find_action (string_compose ("%1/%2", window_actions->get_name(), proxy->action_name())); + if (!act) { + return; + } + Glib::RefPtr<Gtk::ToggleAction> tact = Glib::RefPtr<Gtk::ToggleAction>::cast_dynamic (act); + if (!tact) { + return; + } + + if (tact->get_active()) { + proxy->present (); + } else { + proxy->hide (); } } |