diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2016-06-12 22:49:47 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2016-06-12 22:49:47 -0400 |
commit | 70898f92c7f797a5f3ea1a9fa581d695e6a78688 (patch) | |
tree | 591ba9aac5c7e907adf0f9947f9d606b015808f7 /gtk2_ardour/window_manager.cc | |
parent | 8d1746501682da3e2937c7e8670354f79b656934 (diff) |
use WindowProxy::signal_(map|unmap) to keep window toggle actions in their correct state
Diffstat (limited to 'gtk2_ardour/window_manager.cc')
-rw-r--r-- | gtk2_ardour/window_manager.cc | 38 |
1 files changed, 36 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<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; } + + tact->set_active (true); +} + +void +Manager::window_proxy_was_unmapped (ProxyBase* proxy) +{ + 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; + } + + tact->set_active (false); } void @@ -89,7 +123,6 @@ Manager::remove (const ProxyBase* info) void Manager::toggle_window (ProxyBase* proxy) { - 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; @@ -196,6 +229,7 @@ ProxyBase::setup () { WindowProxy::setup (); set_session(_session); + } /*-----------------------*/ |