diff options
-rw-r--r-- | libs/gtkmm2ext/keyboard.cc | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/libs/gtkmm2ext/keyboard.cc b/libs/gtkmm2ext/keyboard.cc index 0f9aeb028f..d59fe014ce 100644 --- a/libs/gtkmm2ext/keyboard.cc +++ b/libs/gtkmm2ext/keyboard.cc @@ -143,11 +143,31 @@ Keyboard::Keyboard () RelevantModifierKeyMask = (GdkModifierType) gtk_accelerator_get_default_mod_mask (); + RelevantModifierKeyMask = GdkModifierType (RelevantModifierKeyMask | PrimaryModifier); + RelevantModifierKeyMask = GdkModifierType (RelevantModifierKeyMask | SecondaryModifier); + RelevantModifierKeyMask = GdkModifierType (RelevantModifierKeyMask | TertiaryModifier); + RelevantModifierKeyMask = GdkModifierType (RelevantModifierKeyMask | Level4Modifier); + RelevantModifierKeyMask = GdkModifierType (RelevantModifierKeyMask | CopyModifier); + RelevantModifierKeyMask = GdkModifierType (RelevantModifierKeyMask | RangeSelectModifier); + + gtk_accelerator_set_default_mod_mask (RelevantModifierKeyMask); + #ifdef __APPLE__ /* Remove SUPER,HYPER,META. * * GTK on OS X adds META when Command is pressed for various indefensible reasons, since - * it also uses MOD2 to indicate Command. + * it also uses MOD2 to indicate Command. Our code assumes that each + * modifier (Primary, Secondary etc.) is represented by a single bit in + * the modifier mask, but GTK's (STUPID) design uses two (MOD2 + META) + * to represent the Command key. Some discussion about this is here: + * https://bugzilla.gnome.org/show_bug.cgi?id=692597 + * + * We cannot do this until AFTER we told GTK what the default modifier + * was, because otherwise it will fail to recognize MOD2-META-<key> as + * an accelerator. + * + * Note that in the tabbed branch, we no longer use GTK accelerators + * for functional purposes, so this is as critical for that branch. */ RelevantModifierKeyMask = GdkModifierType (RelevantModifierKeyMask & ~GDK_SUPER_MASK); @@ -155,15 +175,6 @@ Keyboard::Keyboard () RelevantModifierKeyMask = GdkModifierType (RelevantModifierKeyMask & ~GDK_META_MASK); #endif - RelevantModifierKeyMask = GdkModifierType (RelevantModifierKeyMask | PrimaryModifier); - RelevantModifierKeyMask = GdkModifierType (RelevantModifierKeyMask | SecondaryModifier); - RelevantModifierKeyMask = GdkModifierType (RelevantModifierKeyMask | TertiaryModifier); - RelevantModifierKeyMask = GdkModifierType (RelevantModifierKeyMask | Level4Modifier); - RelevantModifierKeyMask = GdkModifierType (RelevantModifierKeyMask | CopyModifier); - RelevantModifierKeyMask = GdkModifierType (RelevantModifierKeyMask | RangeSelectModifier); - - gtk_accelerator_set_default_mod_mask (RelevantModifierKeyMask); - snooper_id = gtk_key_snooper_install (_snooper, (gpointer) this); } |