[bockbuild] Moved Gtk+ files back to main bockbuild repo
[mono.git] / bockbuild / mac-sdk / patches / gdk-quartz-set-fix-modifiers-hack-v3.patch
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;
13 +
14 +  if (gdk_quartz_get_fix_modifiers ())
15 +    {
16 +      if (nsflags & NSAlternateKeyMask)
17 +        modifiers |= GDK_MOD1_MASK;
18 +      if (nsflags & NSCommandKeyMask)
19 +        modifiers |= GDK_MOD2_MASK;
20 +    }
21 +  else
22 +    {
23 +      if (nsflags & NSCommandKeyMask)
24 +        modifiers |= GDK_MOD1_MASK;
25 +    }
26
27    return modifiers;
28  }
29 @@ -930,7 +939,7 @@ fill_key_event (GdkWindow    *window,
30          {
31          case GDK_Meta_R:
32          case GDK_Meta_L:
33 -          mask = GDK_MOD2_MASK;
34 +          mask = gdk_quartz_get_fix_modifiers () ? GDK_MOD2_MASK : GDK_MOD1_MASK;
35            break;
36          case GDK_Shift_R:
37          case GDK_Shift_L:
38 @@ -941,7 +950,7 @@ fill_key_event (GdkWindow    *window,
39            break;
40          case GDK_Alt_R:
41          case GDK_Alt_L:
42 -          mask = GDK_MOD1_MASK;
43 +          mask = gdk_quartz_get_fix_modifiers () ? GDK_MOD1_MASK : GDK_MOD2_MASK;
44            break;
45          case GDK_Control_R:
46          case GDK_Control_L:
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);
56
57        return modifiers;
58      }
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)
64    else
65      return minor;
66  }
67 +
68 +static gboolean fix_modifiers = FALSE;
69 +
70 +void
71 +gdk_quartz_set_fix_modifiers (gboolean fix)
72 +{
73 +  fix_modifiers = fix;
74 +}
75 +
76 +gboolean
77 +gdk_quartz_get_fix_modifiers (void)
78 +{
79 +  return fix_modifiers;
80 +}
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)
87      {
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,
91                              state & ~bit,
92                              NULL, NULL) !=
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,
96                              state | bit,
97                              NULL, NULL))
98         tmp_modifiers |= bit;
99 @@ -718,16 +718,32 @@ void
100  gdk_keymap_add_virtual_modifiers (GdkKeymap       *keymap,
101                                    GdkModifierType *state)
102  {
103 -  if (*state & GDK_MOD2_MASK)
104 -    *state |= GDK_META_MASK;
105 +  if (gdk_quartz_get_fix_modifiers ())
106 +    {
107 +      if (*state & GDK_MOD2_MASK)
108 +        *state |= GDK_META_MASK;
109 +    }
110 +  else
111 +    {
112 +      if (*state & GDK_MOD1_MASK)
113 +        *state |= GDK_META_MASK;
114 +    }
115  }
116
117  gboolean
118  gdk_keymap_map_virtual_modifiers (GdkKeymap       *keymap,
119                                    GdkModifierType *state)
120  {
121 -  if (*state & GDK_META_MASK)
122 -    *state |= GDK_MOD2_MASK;
123 +  if (gdk_quartz_get_fix_modifiers ())
124 +    {
125 +      if (*state & GDK_META_MASK)
126 +        *state |= GDK_MOD2_MASK;
127 +    }
128 +  else
129 +    {
130 +      if (*state & GDK_META_MASK)
131 +        *state |= GDK_MOD1_MASK;
132 +    }
133
134    return TRUE;
135  }
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);
143
144 +void      gdk_quartz_set_fix_modifiers (gboolean fix);
145 +gboolean  gdk_quartz_get_fix_modifiers (void);
146 +
147  G_END_DECLS
148
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)
157  #else
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))
160  #endif
161
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
165  #else
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)
169  #endif
170
171  #ifndef GDK_WINDOWING_QUARTZ
172  #define GTK_TOGGLE_GROUP_MOD_MASK 0
173  #else
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)
176  #endif
177
178  gboolean _gtk_button_event_triggers_context_menu (GdkEventButton *event);