Fix keyboard key codes to return Unicode characters instead of ASCII
characters
This commit is contained in:
parent
6b15398855
commit
d3254e00f3
|
@ -281,11 +281,15 @@ final class MacOSXNativeKeyboard extends EventQueue {
|
||||||
return -1;
|
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);
|
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);
|
handleKey(key_code, (byte)0, character, nanos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -274,10 +274,13 @@ static MacOSXPeerInfo *peer_info;
|
||||||
}
|
}
|
||||||
long time = [event timestamp] * 1000000000;
|
long time = [event timestamp] * 1000000000;
|
||||||
jclass keyboard_class = (*env)->GetObjectClass(env, _parent->jkeyboard);
|
jclass keyboard_class = (*env)->GetObjectClass(env, _parent->jkeyboard);
|
||||||
jmethodID keydown = (*env)->GetMethodID(env, keyboard_class, "keyPressed", "(IIJ)V");
|
jmethodID keydown = (*env)->GetMethodID(env, keyboard_class, "keyPressed", "(ILjava/lang/String;J)V");
|
||||||
const char* charbuf = [[event characters] cStringUsingEncoding:NSASCIIStringEncoding];
|
|
||||||
int charcode = (charbuf == nil) ? 0 : charbuf[0];
|
// convert key characters from NSString to jstring
|
||||||
(*env)->CallVoidMethod(env, _parent->jkeyboard, keydown, [event keyCode], charcode, time);
|
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 {
|
- (void)keyUp:(NSEvent *)event {
|
||||||
|
@ -287,10 +290,13 @@ static MacOSXPeerInfo *peer_info;
|
||||||
}
|
}
|
||||||
long time = [event timestamp] * 1000000000;
|
long time = [event timestamp] * 1000000000;
|
||||||
jclass keyboard_class = (*env)->GetObjectClass(env, _parent->jkeyboard);
|
jclass keyboard_class = (*env)->GetObjectClass(env, _parent->jkeyboard);
|
||||||
jmethodID keyup = (*env)->GetMethodID(env, keyboard_class, "keyReleased", "(IIJ)V");
|
jmethodID keyup = (*env)->GetMethodID(env, keyboard_class, "keyReleased", "(ILjava/lang/String;J)V");
|
||||||
const char* charbuf = [[event characters] cStringUsingEncoding:NSASCIIStringEncoding];
|
|
||||||
int charcode = (charbuf == nil) ? 0 : charbuf[0];
|
// convert key characters from NSString to jstring
|
||||||
(*env)->CallVoidMethod(env, _parent->jkeyboard, keyup, [event keyCode], charcode, time);
|
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 {
|
- (void)flagsChanged:(NSEvent *)event {
|
||||||
|
@ -322,12 +328,12 @@ static MacOSXPeerInfo *peer_info;
|
||||||
|
|
||||||
jmethodID keyMethod;
|
jmethodID keyMethod;
|
||||||
if (([event modifierFlags] & mask) == mask) {
|
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 {
|
} 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 {
|
- (void)mouseButtonState:(NSEvent *)event :(int)button :(int)state {
|
||||||
|
|
Loading…
Reference in New Issue