From a0cb61d4111fad95d3b29ebf6f07c3b12f084456 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Wed, 13 Jun 2012 21:18:00 +0000 Subject: Patch from colinf to fix problems with toggle mixer on top (#2477). git-svn-id: svn://localhost/ardour2/branches/3.0@12714 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/ardour_ui.h | 3 ++- gtk2_ardour/ardour_ui_dependents.cc | 36 ++++++++++++++++-------------------- gtk2_ardour/ardour_ui_ed.cc | 2 +- gtk2_ardour/ardour_ui_mixer.cc | 1 - gtk2_ardour/mixer_ui.cc | 12 ++++++++++++ 5 files changed, 31 insertions(+), 23 deletions(-) diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index c5d9dc1003..7b4ffb9f0e 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -256,6 +256,8 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr void get_process_buffers (); void drop_process_buffers (); + void goto_editor_window (); + protected: friend class PublicEditor; @@ -281,7 +283,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr ARDOUR::AudioEngine *engine; Gtk::Tooltips _tooltips; - void goto_editor_window (); void goto_mixer_window (); void toggle_mixer_window (); void toggle_mixer_on_top (); diff --git a/gtk2_ardour/ardour_ui_dependents.cc b/gtk2_ardour/ardour_ui_dependents.cc index c55942b4bd..2b0e0df215 100644 --- a/gtk2_ardour/ardour_ui_dependents.cc +++ b/gtk2_ardour/ardour_ui_dependents.cc @@ -133,29 +133,25 @@ ARDOUR_UI::toggle_mixer_window () void ARDOUR_UI::toggle_mixer_on_top () { - Glib::RefPtr act = ActionManager::get_action (X_("Common"), X_("toggle-mixer-on-top")); - if (!act) { - return; - } - - Glib::RefPtr tact = Glib::RefPtr::cast_dynamic (act); - - if (tact->get_active()) { - - /* Toggle the mixer to `visible' if required */ - act = ActionManager::get_action (X_("Common"), X_("toggle-mixer")); - if (act) { - tact = Glib::RefPtr::cast_dynamic (act); + /* Only called if the editor window received the shortcut key or if selected + from the editor window menu, so the mixer is definitely not on top, and + we can unconditionally make it so here. + + XXX this might not work so well where there is a global menu bar, e.g. + on OS X. + */ + + /* Toggle the mixer to `visible' if required */ + Glib::RefPtr act = ActionManager::get_action (X_("Common"), X_("toggle-mixer")); + if (act) { + Glib::RefPtr tact = Glib::RefPtr::cast_dynamic (act); - if (!tact->get_active()) { - tact->set_active (); - } + if (!tact->get_active()) { + tact->set_active (true); } - - goto_mixer_window (); - } else { - goto_editor_window (); } + + goto_mixer_window (); } /** The main editor window has been closed */ diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc index 9a2a7b2043..9519143af2 100644 --- a/gtk2_ardour/ardour_ui_ed.cc +++ b/gtk2_ardour/ardour_ui_ed.cc @@ -229,7 +229,7 @@ ARDOUR_UI::install_actions () ActionManager::session_sensitive_actions.push_back (act); ActionManager::register_toggle_action (common_actions, X_("toggle-mixer"), S_("Window|Mixer"), sigc::mem_fun(*this, &ARDOUR_UI::toggle_mixer_window)); - ActionManager::register_toggle_action (common_actions, X_("toggle-mixer-on-top"), _("Mixer on Top"), sigc::mem_fun(*this, &ARDOUR_UI::toggle_mixer_on_top)); + ActionManager::register_action (common_actions, X_("toggle-mixer-on-top"), _("Mixer on Top"), sigc::mem_fun(*this, &ARDOUR_UI::toggle_mixer_on_top)); ActionManager::register_toggle_action (common_actions, X_("ToggleRCOptionsEditor"), _("Preferences"), sigc::mem_fun(*this, &ARDOUR_UI::toggle_rc_options_window)); ActionManager::register_toggle_action (common_actions, X_("ToggleSessionOptionsEditor"), _("Properties"), sigc::mem_fun(*this, &ARDOUR_UI::toggle_session_options_window)); act = ActionManager::register_toggle_action (common_actions, X_("ToggleInspector"), _("Tracks and Busses"), sigc::mem_fun(*this, &ARDOUR_UI::toggle_route_params_window)); diff --git a/gtk2_ardour/ardour_ui_mixer.cc b/gtk2_ardour/ardour_ui_mixer.cc index e3250d2a1f..aacffa9d20 100644 --- a/gtk2_ardour/ardour_ui_mixer.cc +++ b/gtk2_ardour/ardour_ui_mixer.cc @@ -44,7 +44,6 @@ ARDOUR_UI::create_mixer () mixer->signal_window_state_event().connect (sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::main_window_state_event_handler), false)); mixer->signal_unmap().connect (sigc::bind (sigc::ptr_fun (&ActionManager::uncheck_toggleaction), X_("/Common/toggle-mixer"))); - mixer->signal_unmap().connect (sigc::bind (sigc::ptr_fun (&ActionManager::uncheck_toggleaction), X_("/Common/toggle-mixer-on-top"))); return 0; } diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc index 60b3f7b0d8..8dd83ad771 100644 --- a/gtk2_ardour/mixer_ui.cc +++ b/gtk2_ardour/mixer_ui.cc @@ -1550,6 +1550,18 @@ Mixer_UI::on_key_press_event (GdkEventKey* ev) } KeyboardKey k (ev->state, ev->keyval); + + GtkAccelKey key; + + /* Handle toggle-mixer-on-top here, so it can do a different thing if the + mixer is already on top and received this key press. + */ + if (gtk_accel_map_lookup_entry("/Common/toggle-mixer-on-top", &key)) { + if (int (k.state()) == key.accel_mods && k.key() == key.accel_key) { + ARDOUR_UI::instance()->goto_editor_window(); + return true; + } + } if (bindings.activate (k, Bindings::Press)) { return true; -- cgit v1.2.3