summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2012-06-13 21:18:00 +0000
committerCarl Hetherington <carl@carlh.net>2012-06-13 21:18:00 +0000
commita0cb61d4111fad95d3b29ebf6f07c3b12f084456 (patch)
tree8722fe5916659e99e84a2c35d0bf8de7447060a8
parentda6f9ab807d938ec91c78cd7661fbfdfe9aaee73 (diff)
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
-rw-r--r--gtk2_ardour/ardour_ui.h3
-rw-r--r--gtk2_ardour/ardour_ui_dependents.cc36
-rw-r--r--gtk2_ardour/ardour_ui_ed.cc2
-rw-r--r--gtk2_ardour/ardour_ui_mixer.cc1
-rw-r--r--gtk2_ardour/mixer_ui.cc12
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<Action> act = ActionManager::get_action (X_("Common"), X_("toggle-mixer-on-top"));
- if (!act) {
- return;
- }
-
- Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::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<ToggleAction>::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<Action> act = ActionManager::get_action (X_("Common"), X_("toggle-mixer"));
+ if (act) {
+ Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::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_("<Actions>/Common/toggle-mixer")));
- mixer->signal_unmap().connect (sigc::bind (sigc::ptr_fun (&ActionManager::uncheck_toggleaction), X_("<Actions>/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("<Actions>/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;