From: Paul Davis Date: Mon, 13 Jun 2016 02:49:47 +0000 (-0400) Subject: use WindowProxy::signal_(map|unmap) to keep window toggle actions in their correct... X-Git-Tag: 5.0-pre1~506 X-Git-Url: https://main.carlh.net/gitweb/?a=commitdiff_plain;h=70898f92c7f797a5f3ea1a9fa581d695e6a78688;hp=8d1746501682da3e2937c7e8670354f79b656934;p=ardour.git use WindowProxy::signal_(map|unmap) to keep window toggle actions in their correct state --- 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