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.
8 generate_motion_event (window);
10 + _gdk_quartz_update_symbolic_hotkeys ();
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);
21 g_list_free (_gdk_input_windows);
23 + _gdk_quartz_release_symbolic_hotkeys ();
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
32 #include <AppKit/NSEvent.h>
34 #include "gdkkeysyms.h"
35 +#include "gdkprivate-quartz.h"
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);
42 static guint *keyval_array = NULL;
43 +static CFArrayRef global_hotkeys = NULL;
46 macroman2ucs (unsigned char c)
47 @@ -806,6 +808,24 @@ gdk_keymap_map_virtual_modifiers (GdkKeymap *keymap,
52 +_gdk_quartz_update_symbolic_hotkeys ()
54 + _gdk_quartz_release_symbolic_hotkeys ();
56 + CopySymbolicHotKeys (&global_hotkeys);
60 +_gdk_quartz_release_symbolic_hotkeys ()
62 + if (global_hotkeys != NULL)
64 + CFRelease (global_hotkeys);
65 + global_hotkeys = NULL;
69 /* What sort of key event is this? Returns one of
70 * GDK_KEY_PRESS, GDK_KEY_RELEASE, GDK_NOTHING (should be ignored)
72 @@ -814,20 +834,19 @@ _gdk_quartz_keys_event_type (NSEvent *event)
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);
83 - if (CopySymbolicHotKeys (&global_keys) == noErr && global_keys != NULL)
84 + if (global_hotkeys != NULL)
86 - CFIndex length = CFArrayGetCount (global_keys);
87 + CFIndex length = CFArrayGetCount (global_hotkeys);
89 for (i = 0; i < length; i++)
91 - CFDictionaryRef key_info = CFArrayGetValueAtIndex (global_keys, i);
92 + CFDictionaryRef key_info = CFArrayGetValueAtIndex (global_hotkeys, i);
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)
100 - CFRelease (global_keys);
102 switch ([event type])
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,
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);