use WindowProxy::signal_(map|unmap) to keep window toggle actions in their correct state

This commit is contained in:
Paul Davis
2016-06-12 22:49:47 -04:00
parent 8d17465016
commit 70898f92c7
2 changed files with 39 additions and 2 deletions

View File

@@ -68,13 +68,47 @@ 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
Manager::remove (const ProxyBase* info)
{
@@ -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);
}
/*-----------------------*/

View File

@@ -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