Fix 'mono' package typo
[mono.git] / bockbuild / mac-sdk / patches / gtk / dont-call-CopySymbolicHotKeys-so-much.patch
1 diff --git a/gdk/quartz/gdkevents-quartz.c b/gdk/quartz/gdkevents-quartz.c
2 index f4ae401..d601ee3 100644
3 --- a/gdk/quartz/gdkevents-quartz.c
4 +++ b/gdk/quartz/gdkevents-quartz.c
5 @@ -680,6 +680,8 @@ _gdk_quartz_events_update_focus_window (GdkWindow *window,
6         * everything in the window is set to correct state.
7         */
8        generate_motion_event (window);
9 +
10 +      _gdk_quartz_update_symbolic_hotkeys ();
11      }
12  }
13
14 diff --git a/gdk/quartz/gdkinput.c b/gdk/quartz/gdkinput.c
15 index 6f5f8ea..8d5698f 100644
16 --- a/gdk/quartz/gdkinput.c
17 +++ b/gdk/quartz/gdkinput.c
18 @@ -568,6 +568,8 @@ _gdk_input_exit (void)
19        g_free (tmp_list->data);
20      }
21    g_list_free (_gdk_input_windows);
22 +
23 +  _gdk_quartz_release_symbolic_hotkeys ();
24  }
25
26  gboolean
27 diff --git a/gdk/quartz/gdkkeys-quartz.c b/gdk/quartz/gdkkeys-quartz.c
28 index e81ea4d..746881b 100644
29 --- a/gdk/quartz/gdkkeys-quartz.c
30 +++ b/gdk/quartz/gdkkeys-quartz.c
31 @@ -55,6 +55,7 @@
32  #include <AppKit/NSEvent.h>
33  #include "gdk.h"
34  #include "gdkkeysyms.h"
35 +#include "gdkprivate-quartz.h"
36
37  #define NUM_KEYCODES 128
38  #define KEYVALS_PER_KEYCODE 4
39 @@ -65,6 +66,7 @@ static GdkKeymap *default_keymap = NULL;
40   * TThere is 1 keyval per modifier (Nothing, Shift, Alt, Shift+Alt);
41   */
42  static guint *keyval_array = NULL;
43 +static CFArrayRef global_hotkeys = NULL;
44
45  static inline UniChar
46  macroman2ucs (unsigned char c)
47 @@ -806,6 +808,24 @@ gdk_keymap_map_virtual_modifiers (GdkKeymap       *keymap,
48    return TRUE;
49  }
50
51 +void
52 +_gdk_quartz_update_symbolic_hotkeys ()
53 +{
54 +  _gdk_quartz_release_symbolic_hotkeys ();
55 +
56 +  CopySymbolicHotKeys (&global_hotkeys);
57 +}
58 +
59 +void
60 +_gdk_quartz_release_symbolic_hotkeys ()
61 +{
62 +  if (global_hotkeys != NULL)
63 +    {
64 +      CFRelease (global_hotkeys);
65 +      global_hotkeys = NULL;
66 +    }
67 +}
68 +
69  /* What sort of key event is this? Returns one of
70   * GDK_KEY_PRESS, GDK_KEY_RELEASE, GDK_NOTHING (should be ignored)
71   */
72 @@ -814,20 +834,19 @@ _gdk_quartz_keys_event_type (NSEvent *event)
73  {
74    unsigned short keycode = [event keyCode];
75    unsigned int flags = [event modifierFlags];
76 -  CFArrayRef global_keys = NULL;
77    unsigned int eventmods = (flags & NSCommandKeyMask ? cmdKey : 0) |
78                             (flags & NSAlternateKeyMask ? optionKey : 0) |
79                             (flags & NSControlKeyMask ? controlKey : 0) |
80                             (flags & NSShiftKeyMask ? shiftKey : 0);
81    int i;
82
83 -  if (CopySymbolicHotKeys (&global_keys) == noErr && global_keys != NULL)
84 +  if (global_hotkeys != NULL)
85      {
86 -      CFIndex length = CFArrayGetCount (global_keys);
87 +      CFIndex length = CFArrayGetCount (global_hotkeys);
88
89        for (i = 0; i < length; i++)
90         {
91 -         CFDictionaryRef key_info = CFArrayGetValueAtIndex (global_keys, i);
92 +         CFDictionaryRef key_info = CFArrayGetValueAtIndex (global_hotkeys, i);
93
94           CFNumberRef code = CFDictionaryGetValue (key_info, kHISymbolicHotKeyCode);
95           CFNumberRef mods = CFDictionaryGetValue (key_info, kHISymbolicHotKeyModifiers);
96 @@ -846,8 +865,6 @@ _gdk_quartz_keys_event_type (NSEvent *event)
97         }
98      }
99
100 -    CFRelease (global_keys);
101 -
102    switch ([event type])
103      {
104      case NSKeyDown:
105 diff --git a/gdk/quartz/gdkprivate-quartz.h b/gdk/quartz/gdkprivate-quartz.h
106 index f8b382d..0b0f66b 100644
107 --- a/gdk/quartz/gdkprivate-quartz.h
108 +++ b/gdk/quartz/gdkprivate-quartz.h
109 @@ -200,6 +200,8 @@ GdkImage *_gdk_quartz_image_copy_to_image (GdkDrawable *drawable,
110                                             gint         height);
111
112  /* Keys */
113 +void         _gdk_quartz_update_symbolic_hotkeys  ();
114 +void         _gdk_quartz_release_symbolic_hotkeys ();
115  GdkEventType _gdk_quartz_keys_event_type  (NSEvent   *event);
116  gboolean     _gdk_quartz_keys_is_modifier (guint      keycode);
117  void         _gdk_quartz_synthesize_null_key_event (GdkWindow *window);