From 00933950b7f21807fc4edf615876060f85882474 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Tue, 4 Aug 2015 14:30:41 -0400 Subject: small rationalization of naming and code for managing plugin GUI visibility --- gtk2_ardour/processor_box.cc | 13 ++++++++----- gtk2_ardour/processor_box.h | 2 +- gtk2_ardour/window_manager.cc | 16 ++++++++++++++-- libs/gtkmm2ext/gtkmm2ext/window_proxy.h | 3 +-- libs/gtkmm2ext/window_proxy.cc | 12 ++++++++++-- 5 files changed, 34 insertions(+), 12 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) 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) 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 act = ARDOUR_UI::instance()->global_actions.find_action (string_compose ("%1/%2", window_actions->get_name(), proxy->action_name())); + if (!act) { + return; + } + Glib::RefPtr tact = Glib::RefPtr::cast_dynamic (act); + if (!tact) { + return; + } + + if (tact->get_active()) { + proxy->present (); + } else { + proxy->hide (); } } diff --git a/libs/gtkmm2ext/gtkmm2ext/window_proxy.h b/libs/gtkmm2ext/gtkmm2ext/window_proxy.h index a0026d9f97..e2f4d70951 100644 --- a/libs/gtkmm2ext/gtkmm2ext/window_proxy.h +++ b/libs/gtkmm2ext/gtkmm2ext/window_proxy.h @@ -66,8 +66,6 @@ class LIBGTKMM2EXT_API WindowProxy : public PBD::StatefulDestructible, public vi virtual Gtk::Window* get (bool create = false) = 0; - virtual void toggle (); - virtual int set_state (const XMLNode&, int version); virtual XMLNode& get_state (); @@ -93,6 +91,7 @@ class LIBGTKMM2EXT_API WindowProxy : public PBD::StatefulDestructible, public vi virtual bool delete_event_handler (GdkEventAny *ev); virtual void setup (); + void toggle (); }; } diff --git a/libs/gtkmm2ext/window_proxy.cc b/libs/gtkmm2ext/window_proxy.cc index 6f20eaa8d5..d7670cb89e 100644 --- a/libs/gtkmm2ext/window_proxy.cc +++ b/libs/gtkmm2ext/window_proxy.cc @@ -22,6 +22,7 @@ #include "pbd/convert.h" #include "pbd/xml++.h" +#include "pbd/stacktrace.h" #include "gtkmm2ext/window_proxy.h" #include "gtkmm2ext/visibility_tracker.h" @@ -139,6 +140,7 @@ WindowProxy::toggle() { if (!_window) { (void) get (true); + setup (); assert (_window); /* XXX this is a hack - the window object should really ensure its components are all visible. sigh. @@ -146,12 +148,13 @@ WindowProxy::toggle() _window->show_all(); /* we'd like to just call this and nothing else */ _window->present (); - } else { if (_window->is_mapped()) { save_pos_and_size(); } + vistracker->cycle_visibility (); + if (_window->is_mapped()) { if (_width != -1 && _height != -1) { _window->set_default_size (_width, _height); @@ -279,7 +282,12 @@ WindowProxy::hide () bool WindowProxy::delete_event_handler (GdkEventAny* /*ev*/) { - hide(); + if (_action) { + _action->activate (); + } else { + hide(); + } + return true; } -- cgit v1.2.3