diff options
Diffstat (limited to 'gdk/quartz/gdkkeys-quartz.c')
-rw-r--r-- | gdk/quartz/gdkkeys-quartz.c | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/gdk/quartz/gdkkeys-quartz.c b/gdk/quartz/gdkkeys-quartz.c index a4df2cf933..0094102876 100644 --- a/gdk/quartz/gdkkeys-quartz.c +++ b/gdk/quartz/gdkkeys-quartz.c @@ -267,7 +267,7 @@ const static struct { }; static void -maybe_update_keymap (void) +update_keymap (void) { const void *chr_data = NULL; @@ -542,8 +542,6 @@ gdk_quartz_keymap_get_entries_for_keyval (GdkKeymap *keymap, GArray *keys_array; int i; - maybe_update_keymap (); - *n_keys = 0; keys_array = g_array_new (FALSE, FALSE, sizeof (GdkKeymapKey)); @@ -579,8 +577,6 @@ gdk_quartz_keymap_get_entries_for_keycode (GdkKeymap *keymap, int i; guint *p; - maybe_update_keymap (); - *n_entries = 0; if (hardware_keycode > NUM_KEYCODES) @@ -689,8 +685,6 @@ gdk_quartz_keymap_translate_keyboard_state (GdkKeymap *keymap, GdkModifierType bit; guint tmp_modifiers = 0; - maybe_update_keymap (); - if (keyval) *keyval = 0; if (effective_group) @@ -836,13 +830,35 @@ _gdk_quartz_keys_is_modifier (guint keycode) } static void +input_sources_changed_notification (CFNotificationCenterRef center, + void *observer, + CFStringRef name, + const void *object, + CFDictionaryRef userInfo) +{ + update_keymap (); +} + +static void gdk_quartz_keymap_init (GdkQuartzKeymap *keymap) { + update_keymap (); + CFNotificationCenterAddObserver (CFNotificationCenterGetDistributedCenter (), + keymap, + input_sources_changed_notification, + CFSTR ("AppleSelectedInputSourcesChangedNotification"), + NULL, + CFNotificationSuspensionBehaviorDeliverImmediately); } static void gdk_quartz_keymap_finalize (GObject *object) { + CFNotificationCenterRemoveObserver (CFNotificationCenterGetDistributedCenter (), + object, + CFSTR ("AppleSelectedInputSourcesChangedNotification"), + NULL); + G_OBJECT_CLASS (gdk_quartz_keymap_parent_class)->finalize (object); } |