Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Commit

Permalink
From: Jjgod Jiang <gzjjgod@gmail.com>
Browse files Browse the repository at this point in the history
Date: Sat, 5 Sep 2009 17:32:28 +0800

Replace old Keyboard Layout APIs with new Text Input Sources APIs for 10.{5,6}
  • Loading branch information
slouken committed Sep 5, 2009
1 parent 4cce2bf commit 0b5009e
Showing 1 changed file with 23 additions and 1 deletion.
24 changes: 23 additions & 1 deletion src/video/cocoa/SDL_cocoakeyboard.m
Expand Up @@ -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;
}
Expand All @@ -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;
Expand All @@ -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);
Expand All @@ -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) {
Expand Down Expand Up @@ -449,6 +470,7 @@ - (void) doCommandBySelector:(SEL) myselector {}
SDL_SetKeymap(data->keyboard, 0, keymap, SDL_NUM_SCANCODES);
return;
}
#endif
}

void
Expand Down

0 comments on commit 0b5009e

Please sign in to comment.