From 0b5009e3cb599f4b7ff4f9ad7c04e51b1b6367e8 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Sat, 5 Sep 2009 09:55:25 +0000 Subject: [PATCH] From: Jjgod Jiang Date: Sat, 5 Sep 2009 17:32:28 +0800 Replace old Keyboard Layout APIs with new Text Input Sources APIs for 10.{5,6} --- src/video/cocoa/SDL_cocoakeyboard.m | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/video/cocoa/SDL_cocoakeyboard.m b/src/video/cocoa/SDL_cocoakeyboard.m index f9b01f302..2d981aa1c 100644 --- a/src/video/cocoa/SDL_cocoakeyboard.m +++ b/src/video/cocoa/SDL_cocoakeyboard.m @@ -351,14 +351,22 @@ - (void) doCommandBySelector:(SEL) myselector {} static void UpdateKeymap(SDL_VideoData *data) { +#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1050 + TISInputSourceRef key_layout; +#else KeyboardLayoutRef key_layout; +#endif const void *chr_data; int i; SDL_scancode scancode; SDLKey keymap[SDL_NUM_SCANCODES]; /* See if the keymap needs to be updated */ +#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1050 + key_layout = TISCopyCurrentKeyboardLayoutInputSource(); +#else KLGetCurrentKeyboardLayout(&key_layout); +#endif if (key_layout == data->key_layout) { return; } @@ -367,7 +375,15 @@ - (void) doCommandBySelector:(SEL) myselector {} SDL_GetDefaultKeymap(keymap); /* Try Unicode data first (preferred as of Mac OS X 10.5) */ +#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1050 + CFDataRef uchrDataRef = TISGetInputSourceProperty(key_layout, kTISPropertyUnicodeKeyLayoutData); + if (uchrDataRef) + chr_data = CFDataGetBytePtr(uchrDataRef); + else + goto cleanup; +#else KLGetKeyboardLayoutProperty(key_layout, kKLuchrData, &chr_data); +#endif if (chr_data) { UInt32 keyboard_type = LMGetKbdType(); OSStatus err; @@ -385,7 +401,8 @@ - (void) doCommandBySelector:(SEL) myselector {} } dead_key_state = 0; - err = UCKeyTranslate (chr_data, i, kUCKeyActionDown, + err = UCKeyTranslate ((UCKeyboardLayout *) chr_data, + i, kUCKeyActionDown, 0, keyboard_type, kUCKeyTranslateNoDeadKeysMask, &dead_key_state, 8, &len, s); @@ -400,6 +417,10 @@ - (void) doCommandBySelector:(SEL) myselector {} return; } +#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1050 +cleanup: + CFRelease(key_layout); +#else /* Fall back to older style key map data */ KLGetKeyboardLayoutProperty(key_layout, kKLKCHRData, &chr_data); if (chr_data) { @@ -449,6 +470,7 @@ - (void) doCommandBySelector:(SEL) myselector {} SDL_SetKeymap(data->keyboard, 0, keymap, SDL_NUM_SCANCODES); return; } +#endif } void