From 5ba1996fd70f05362c70b54e68261b955659f291 Mon Sep 17 00:00:00 2001 From: Colin Fletcher Date: Wed, 27 Jun 2012 12:21:23 +0000 Subject: [PATCH] A (hopefully) better fix for toggle-mixer-on-top, using gtk_window_is_active() to work out whether the mixer is already on top. git-svn-id: svn://localhost/ardour2/branches/3.0@12952 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/ardour_ui.h | 9 ++++----- gtk2_ardour/ardour_ui_dependents.cc | 26 +++++++++++--------------- gtk2_ardour/mixer_ui.cc | 16 ++-------------- 3 files changed, 17 insertions(+), 34 deletions(-) diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index 4d6f3391fc..c48d373ca3 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -259,8 +259,6 @@ 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; @@ -286,9 +284,10 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr ARDOUR::AudioEngine *engine; Gtk::Tooltips _tooltips; - void goto_mixer_window (); - void toggle_mixer_window (); - void toggle_mixer_on_top (); + void goto_editor_window (); + void goto_mixer_window (); + void toggle_mixer_window (); + void toggle_mixer_on_top (); int setup_windows (); void setup_transport (); diff --git a/gtk2_ardour/ardour_ui_dependents.cc b/gtk2_ardour/ardour_ui_dependents.cc index 2b0e0df215..99b27d75d6 100644 --- a/gtk2_ardour/ardour_ui_dependents.cc +++ b/gtk2_ardour/ardour_ui_dependents.cc @@ -133,25 +133,21 @@ ARDOUR_UI::toggle_mixer_window () void ARDOUR_UI::toggle_mixer_on_top () { - /* 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 (gtk_window_is_active(Mixer_UI::instance()->gobj())) { + goto_editor_window (); + } else { + 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 (true); + /* Toggle the mixer to `visible' if required */ + if (!tact->get_active ()) { + tact->set_active (true); + } } + goto_mixer_window (); } - - goto_mixer_window (); } /** The main editor window has been closed */ diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc index a29717211e..5034243680 100644 --- a/gtk2_ardour/mixer_ui.cc +++ b/gtk2_ardour/mixer_ui.cc @@ -1565,25 +1565,13 @@ Mixer_UI::on_key_press_event (GdkEventKey* ev) if (gtk_window_propagate_key_event (GTK_WINDOW(gobj()), ev)) { return true; } - + 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; } - + return forward_key_press (ev); }