From 70898f92c7f797a5f3ea1a9fa581d695e6a78688 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Sun, 12 Jun 2016 22:49:47 -0400 Subject: use WindowProxy::signal_(map|unmap) to keep window toggle actions in their correct state --- gtk2_ardour/window_manager.cc | 38 ++++++++++++++++++++++++++++++++++++-- gtk2_ardour/window_manager.h | 3 +++ 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/gtk2_ardour/window_manager.cc b/gtk2_ardour/window_manager.cc index cac4bcd968..24ed57da6d 100644 --- a/gtk2_ardour/window_manager.cc +++ b/gtk2_ardour/window_manager.cc @@ -68,11 +68,45 @@ Manager::register_window (ProxyBase* info) if (!window_actions) { window_actions = ARDOUR_UI::instance()->global_actions.create_action_group (X_("Window")); } - + info->set_action (ARDOUR_UI::instance()->global_actions.register_toggle_action (window_actions, info->action_name().c_str(), info->menu_name().c_str(), sigc::bind (sigc::mem_fun (*this, &Manager::toggle_window), info))); + + info->signal_map.connect (sigc::bind (sigc::mem_fun (*this, &Manager::window_proxy_was_mapped), info)); + info->signal_unmap.connect (sigc::bind (sigc::mem_fun (*this, &Manager::window_proxy_was_unmapped), info)); + + } +} + +void +Manager::window_proxy_was_mapped (ProxyBase* proxy) +{ + 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; } + + tact->set_active (true); +} + +void +Manager::window_proxy_was_unmapped (ProxyBase* proxy) +{ + 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; + } + + tact->set_active (false); } void @@ -89,7 +123,6 @@ Manager::remove (const ProxyBase* info) void Manager::toggle_window (ProxyBase* proxy) { - Glib::RefPtr act = ARDOUR_UI::instance()->global_actions.find_action (string_compose ("%1/%2", window_actions->get_name(), proxy->action_name())); if (!act) { return; @@ -196,6 +229,7 @@ ProxyBase::setup () { WindowProxy::setup (); set_session(_session); + } /*-----------------------*/ diff --git a/gtk2_ardour/window_manager.h b/gtk2_ardour/window_manager.h index 37744e5964..9d0363eba9 100644 --- a/gtk2_ardour/window_manager.h +++ b/gtk2_ardour/window_manager.h @@ -76,6 +76,9 @@ class Manager : public ARDOUR::SessionHandlePtr ~Manager(); static Manager* _instance; + private: + void window_proxy_was_mapped (ProxyBase*); + void window_proxy_was_unmapped (ProxyBase*); }; class ProxyBase : public ARDOUR::SessionHandlePtr, public Gtkmm2ext::WindowProxy -- cgit v1.2.3