summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk2_ardour/keyeditor.cc5
-rw-r--r--gtk2_ardour/utils.cc19
-rw-r--r--libs/gtkmm2ext/gtkmm2ext/utils.h1
-rw-r--r--libs/gtkmm2ext/utils.cc24
4 files changed, 30 insertions, 19 deletions
diff --git a/gtk2_ardour/keyeditor.cc b/gtk2_ardour/keyeditor.cc
index 85522a7e41..f8b5f2da4e 100644
--- a/gtk2_ardour/keyeditor.cc
+++ b/gtk2_ardour/keyeditor.cc
@@ -203,11 +203,14 @@ KeyEditor::on_key_release_event (GdkEventKey* ev)
goto out;
}
+ GdkModifierType mod = (GdkModifierType)(Keyboard::RelevantModifierKeyMask & ev->state);
+
Gtkmm2ext::possibly_translate_keyval_to_make_legal_accelerator (ev->keyval);
+ Gtkmm2ext::possibly_translate_mod_to_make_legal_accelerator (mod);
bool result = AccelMap::change_entry (path,
last_keyval,
- ModifierType (Keyboard::RelevantModifierKeyMask & ev->state),
+ Gdk::ModifierType(mod),
true);
if (result) {
diff --git a/gtk2_ardour/utils.cc b/gtk2_ardour/utils.cc
index c9d3abe111..a88ee7f9a5 100644
--- a/gtk2_ardour/utils.cc
+++ b/gtk2_ardour/utils.cc
@@ -450,24 +450,7 @@ ARDOUR_UI_UTILS::key_press_focus_accelerator_handler (Gtk::Window& window, GdkEv
GdkModifierType mod = GdkModifierType (ev->state);
mod = GdkModifierType (mod & gtk_accelerator_get_default_mod_mask());
-#ifdef GTKOSX
- /* GTK on OS X is currently (February 2012) setting both
- the Meta and Mod2 bits in the event modifier state if
- the Command key is down.
-
- gtk_accel_groups_activate() does not invoke any of the logic
- that gtk_window_activate_key() will that sorts out that stupid
- state of affairs, and as a result it fails to find a match
- for the key event and the current set of accelerators.
-
- to fix this, if the meta bit is set, remove the mod2 bit
- from the modifier. this assumes that our bindings use Primary
- which will have set the meta bit in the accelerator entry.
- */
- if (mod & GDK_META_MASK) {
- mod = GdkModifierType (mod & ~GDK_MOD2_MASK);
- }
-#endif
+ Gtkmm2ext::possibly_translate_mod_to_make_legal_accelerator(mod);
if (allow_activating && gtk_accel_groups_activate(G_OBJECT(win), fakekey, mod)) {
DEBUG_TRACE (DEBUG::Accelerators, "\taccel group activated by fakekey\n");
diff --git a/libs/gtkmm2ext/gtkmm2ext/utils.h b/libs/gtkmm2ext/gtkmm2ext/utils.h
index daae1b78aa..53c8ea2fdf 100644
--- a/libs/gtkmm2ext/gtkmm2ext/utils.h
+++ b/libs/gtkmm2ext/gtkmm2ext/utils.h
@@ -110,6 +110,7 @@ namespace Gtkmm2ext {
LIBGTKMM2EXT_API Glib::RefPtr<Gdk::Window> window_to_draw_on (Gtk::Widget& w, Gtk::Widget** parent);
LIBGTKMM2EXT_API bool possibly_translate_keyval_to_make_legal_accelerator (uint32_t& keyval);
+ LIBGTKMM2EXT_API bool possibly_translate_mod_to_make_legal_accelerator (GdkModifierType& mod);
LIBGTKMM2EXT_API uint32_t possibly_translate_legal_accelerator_to_real_key (uint32_t keyval);
LIBGTKMM2EXT_API int physical_screen_height (Glib::RefPtr<Gdk::Window>);
diff --git a/libs/gtkmm2ext/utils.cc b/libs/gtkmm2ext/utils.cc
index b4926ac43b..f7e96f09c8 100644
--- a/libs/gtkmm2ext/utils.cc
+++ b/libs/gtkmm2ext/utils.cc
@@ -338,6 +338,30 @@ Gtkmm2ext::detach_menu (Gtk::Menu& menu)
}
bool
+Gtkmm2ext::possibly_translate_mod_to_make_legal_accelerator (GdkModifierType& mod)
+{
+#ifdef GTKOSX
+ /* GTK on OS X is currently (February 2012) setting both
+ the Meta and Mod2 bits in the event modifier state if
+ the Command key is down.
+
+ gtk_accel_groups_activate() does not invoke any of the logic
+ that gtk_window_activate_key() will that sorts out that stupid
+ state of affairs, and as a result it fails to find a match
+ for the key event and the current set of accelerators.
+
+ to fix this, if the meta bit is set, remove the mod2 bit
+ from the modifier. this assumes that our bindings use Primary
+ which will have set the meta bit in the accelerator entry.
+ */
+ if (mod & GDK_META_MASK) {
+ mod = GdkModifierType (mod & ~GDK_MOD2_MASK);
+ }
+#endif
+ return true;
+}
+
+bool
Gtkmm2ext::possibly_translate_keyval_to_make_legal_accelerator (uint32_t& keyval)
{
int fakekey = GDK_VoidSymbol;