summaryrefslogtreecommitdiff
path: root/gtk2_ardour/window_manager.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2016-06-12 22:49:47 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2016-06-12 22:49:47 -0400
commit70898f92c7f797a5f3ea1a9fa581d695e6a78688 (patch)
tree591ba9aac5c7e907adf0f9947f9d606b015808f7 /gtk2_ardour/window_manager.cc
parent8d1746501682da3e2937c7e8670354f79b656934 (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.cc38
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);
+
}
/*-----------------------*/