Fix keyboard key codes to return Unicode characters instead of ASCII

characters
This commit is contained in:
kappaOne 2013-10-13 15:45:08 +01:00
parent 6b15398855
commit d3254e00f3
2 changed files with 23 additions and 13 deletions

View File

@ -281,11 +281,15 @@ final class MacOSXNativeKeyboard extends EventQueue {
return -1;
}
public void keyPressed(int key_code, int character, long nanos) {
public void keyPressed(int key_code, String chars, long nanos) {
// use only first character of chars returned for key press
int character = (chars == null) ? 0 : (int)chars.charAt(0);
handleKey(key_code, (byte)1, character, nanos);
}
public void keyReleased(int key_code, int character, long nanos) {
public void keyReleased(int key_code, String chars, long nanos) {
// use only first character of chars returned for key release
int character = (chars == null) ? 0 : (int)chars.charAt(0);
handleKey(key_code, (byte)0, character, nanos);
}

View File

@ -274,10 +274,13 @@ static MacOSXPeerInfo *peer_info;
}
long time = [event timestamp] * 1000000000;
jclass keyboard_class = (*env)->GetObjectClass(env, _parent->jkeyboard);
jmethodID keydown = (*env)->GetMethodID(env, keyboard_class, "keyPressed", "(IIJ)V");
const char* charbuf = [[event characters] cStringUsingEncoding:NSASCIIStringEncoding];
int charcode = (charbuf == nil) ? 0 : charbuf[0];
(*env)->CallVoidMethod(env, _parent->jkeyboard, keydown, [event keyCode], charcode, time);
jmethodID keydown = (*env)->GetMethodID(env, keyboard_class, "keyPressed", "(ILjava/lang/String;J)V");
// convert key characters from NSString to jstring
const char *unichars = [[event characters] UTF8String];
jstring characters = (*env)->NewStringUTF(env, unichars);
(*env)->CallVoidMethod(env, _parent->jkeyboard, keydown, [event keyCode], characters, time);
}
- (void)keyUp:(NSEvent *)event {
@ -287,10 +290,13 @@ static MacOSXPeerInfo *peer_info;
}
long time = [event timestamp] * 1000000000;
jclass keyboard_class = (*env)->GetObjectClass(env, _parent->jkeyboard);
jmethodID keyup = (*env)->GetMethodID(env, keyboard_class, "keyReleased", "(IIJ)V");
const char* charbuf = [[event characters] cStringUsingEncoding:NSASCIIStringEncoding];
int charcode = (charbuf == nil) ? 0 : charbuf[0];
(*env)->CallVoidMethod(env, _parent->jkeyboard, keyup, [event keyCode], charcode, time);
jmethodID keyup = (*env)->GetMethodID(env, keyboard_class, "keyReleased", "(ILjava/lang/String;J)V");
// convert key characters from NSString to jstring
const char *unichars = [[event characters] UTF8String];
jstring characters = (*env)->NewStringUTF(env, unichars);
(*env)->CallVoidMethod(env, _parent->jkeyboard, keyup, [event keyCode], characters, time);
}
- (void)flagsChanged:(NSEvent *)event {
@ -322,12 +328,12 @@ static MacOSXPeerInfo *peer_info;
jmethodID keyMethod;
if (([event modifierFlags] & mask) == mask) {
keyMethod = (*env)->GetMethodID(env, keyboard_class, "keyPressed", "(IIJ)V");
keyMethod = (*env)->GetMethodID(env, keyboard_class, "keyPressed", "(ILjava/lang/String;J)V");
} else {
keyMethod = (*env)->GetMethodID(env, keyboard_class, "keyReleased", "(IIJ)V");
keyMethod = (*env)->GetMethodID(env, keyboard_class, "keyReleased", "(ILjava/lang/String;J)V");
}
(*env)->CallVoidMethod(env, _parent->jkeyboard, keyMethod, [event keyCode], 0, time);
(*env)->CallVoidMethod(env, _parent->jkeyboard, keyMethod, [event keyCode], NULL, time);
}
- (void)mouseButtonState:(NSEvent *)event :(int)button :(int)state {