1 diff --git a/gdk/quartz/gdkevents-quartz.c b/gdk/quartz/gdkevents-quartz.c
2 index a8800f7..ec6a893 100644
3 --- a/gdk/quartz/gdkevents-quartz.c
4 +++ b/gdk/quartz/gdkevents-quartz.c
5 @@ -292,10 +292,19 @@ get_keyboard_modifiers_from_ns_flags (NSUInteger nsflags)
6 modifiers |= GDK_SHIFT_MASK;
7 if (nsflags & NSControlKeyMask)
8 modifiers |= GDK_CONTROL_MASK;
9 - if (nsflags & NSAlternateKeyMask)
10 - modifiers |= GDK_MOD1_MASK;
11 - if (nsflags & NSCommandKeyMask)
12 - modifiers |= GDK_MOD2_MASK;
14 + if (gdk_quartz_get_fix_modifiers ())
16 + if (nsflags & NSAlternateKeyMask)
17 + modifiers |= GDK_MOD1_MASK;
18 + if (nsflags & NSCommandKeyMask)
19 + modifiers |= GDK_MOD2_MASK;
23 + if (nsflags & NSCommandKeyMask)
24 + modifiers |= GDK_MOD1_MASK;
29 @@ -930,7 +939,7 @@ fill_key_event (GdkWindow *window,
33 - mask = GDK_MOD2_MASK;
34 + mask = gdk_quartz_get_fix_modifiers () ? GDK_MOD2_MASK : GDK_MOD1_MASK;
38 @@ -941,7 +950,7 @@ fill_key_event (GdkWindow *window,
42 - mask = GDK_MOD1_MASK;
43 + mask = gdk_quartz_get_fix_modifiers () ? GDK_MOD1_MASK : GDK_MOD2_MASK;
47 @@ -1089,9 +1098,9 @@ _gdk_quartz_events_get_current_keyboard_modifiers (void)
48 if (carbon_modifiers & controlKey)
49 modifiers |= GDK_CONTROL_MASK;
50 if (carbon_modifiers & optionKey)
51 - modifiers |= GDK_MOD1_MASK;
52 + modifiers |= (gdk_quartz_get_fix_modifiers () ? GDK_MOD1_MASK : GDK_MOD2_MASK);
53 if (carbon_modifiers & cmdKey)
54 - modifiers |= GDK_MOD2_MASK;
55 + modifiers |= (gdk_quartz_get_fix_modifiers () ? GDK_MOD2_MASK : GDK_MOD1_MASK);
59 diff --git a/gdk/quartz/gdkglobals-quartz.c b/gdk/quartz/gdkglobals-quartz.c
60 index 53c6d5e..31dbab1 100644
61 --- a/gdk/quartz/gdkglobals-quartz.c
62 +++ b/gdk/quartz/gdkglobals-quartz.c
63 @@ -41,3 +41,17 @@ gdk_quartz_osx_version (void)
68 +static gboolean fix_modifiers = FALSE;
71 +gdk_quartz_set_fix_modifiers (gboolean fix)
73 + fix_modifiers = fix;
77 +gdk_quartz_get_fix_modifiers (void)
79 + return fix_modifiers;
81 diff --git a/gdk/quartz/gdkkeys-quartz.c b/gdk/quartz/gdkkeys-quartz.c
82 index 19a20f5..c7ceec6 100644
83 --- a/gdk/quartz/gdkkeys-quartz.c
84 +++ b/gdk/quartz/gdkkeys-quartz.c
85 @@ -693,11 +693,11 @@ gdk_keymap_translate_keyboard_state (GdkKeymap *keymap,
86 for (bit = GDK_SHIFT_MASK; bit < GDK_BUTTON1_MASK; bit <<= 1)
88 if (translate_keysym (hardware_keycode,
89 - (bit == GDK_MOD1_MASK) ? 0 : group,
90 + (bit == (gdk_quartz_get_fix_modifiers () ? GDK_MOD1_MASK : GDK_MOD2_MASK)) ? 0 : group,
93 translate_keysym (hardware_keycode,
94 - (bit == GDK_MOD1_MASK) ? 1 : group,
95 + (bit == (gdk_quartz_get_fix_modifiers () ? GDK_MOD1_MASK : GDK_MOD2_MASK)) ? 1 : group,
99 @@ -718,16 +718,32 @@ void
100 gdk_keymap_add_virtual_modifiers (GdkKeymap *keymap,
101 GdkModifierType *state)
103 - if (*state & GDK_MOD2_MASK)
104 - *state |= GDK_META_MASK;
105 + if (gdk_quartz_get_fix_modifiers ())
107 + if (*state & GDK_MOD2_MASK)
108 + *state |= GDK_META_MASK;
112 + if (*state & GDK_MOD1_MASK)
113 + *state |= GDK_META_MASK;
118 gdk_keymap_map_virtual_modifiers (GdkKeymap *keymap,
119 GdkModifierType *state)
121 - if (*state & GDK_META_MASK)
122 - *state |= GDK_MOD2_MASK;
123 + if (gdk_quartz_get_fix_modifiers ())
125 + if (*state & GDK_META_MASK)
126 + *state |= GDK_MOD2_MASK;
130 + if (*state & GDK_META_MASK)
131 + *state |= GDK_MOD1_MASK;
136 diff --git a/gdk/quartz/gdkquartz.h b/gdk/quartz/gdkquartz.h
137 index 742d651..ed0ba35 100644
138 --- a/gdk/quartz/gdkquartz.h
139 +++ b/gdk/quartz/gdkquartz.h
140 @@ -58,6 +58,9 @@ id gdk_quartz_drag_context_get_dragging_info_libgtk_only (GdkDragContext
141 NSEvent *gdk_quartz_event_get_nsevent (GdkEvent *event);
142 GdkOSXVersion gdk_quartz_osx_version (void);
144 +void gdk_quartz_set_fix_modifiers (gboolean fix);
145 +gboolean gdk_quartz_get_fix_modifiers (void);
149 #endif /* __GDK_QUARTZ_H__ */
150 diff --git a/gtk/gtkprivate.h b/gtk/gtkprivate.h
151 index 6386c32..aa1cc74 100644
152 --- a/gtk/gtkprivate.h
153 +++ b/gtk/gtkprivate.h
154 @@ -122,7 +122,7 @@ gboolean _gtk_fnmatch (const char *pattern,
155 #ifndef GDK_WINDOWING_QUARTZ
156 #define GTK_NO_TEXT_INPUT_MOD_MASK (GDK_MOD1_MASK | GDK_CONTROL_MASK)
158 -#define GTK_NO_TEXT_INPUT_MOD_MASK (GDK_MOD2_MASK | GDK_CONTROL_MASK)
159 +#define GTK_NO_TEXT_INPUT_MOD_MASK (gdk_quartz_get_fix_modifiers () ? (GDK_MOD2_MASK | GDK_CONTROL_MASK) : (GDK_MOD1_MASK | GDK_CONTROL_MASK))
162 #ifndef GDK_WINDOWING_QUARTZ
163 @@ -130,13 +130,13 @@ gboolean _gtk_fnmatch (const char *pattern,
164 #define GTK_MODIFY_SELECTION_MOD_MASK GDK_CONTROL_MASK
166 #define GTK_EXTEND_SELECTION_MOD_MASK GDK_SHIFT_MASK
167 -#define GTK_MODIFY_SELECTION_MOD_MASK GDK_MOD2_MASK
168 +#define GTK_MODIFY_SELECTION_MOD_MASK (gdk_quartz_get_fix_modifiers () ? GDK_MOD2_MASK : GDK_MOD1_MASK)
171 #ifndef GDK_WINDOWING_QUARTZ
172 #define GTK_TOGGLE_GROUP_MOD_MASK 0
174 -#define GTK_TOGGLE_GROUP_MOD_MASK GDK_MOD1_MASK
175 +#define GTK_TOGGLE_GROUP_MOD_MASK (gdk_quartz_get_fix_modifiers () ? GDK_MOD1_MASK : 0)
178 gboolean _gtk_button_event_triggers_context_menu (GdkEventButton *event);