7156316: [macosx] Ctrl+Space does generate Unknown keychar
Reviewed-by: alexsch, aniyogi
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformResponder.java Tue Jul 05 12:37:36 2016 +0300
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformResponder.java Tue Jul 05 16:20:00 2016 +0530
@@ -135,6 +135,7 @@
int jkeyCode = KeyEvent.VK_UNDEFINED;
int jkeyLocation = KeyEvent.KEY_LOCATION_UNKNOWN;
boolean postsTyped = false;
+ boolean spaceKeyTyped = false;
char testChar = KeyEvent.CHAR_UNDEFINED;
boolean isDeadChar = (chars!= null && chars.length() == 0);
@@ -151,6 +152,11 @@
} else {
if (chars != null && chars.length() > 0) {
testChar = chars.charAt(0);
+
+ //Check if String chars contains SPACE character.
+ if (chars.trim().isEmpty()) {
+ spaceKeyTyped = true;
+ }
}
char testCharIgnoringModifiers = charsIgnoringModifiers != null && charsIgnoringModifiers.length() > 0 ?
@@ -187,7 +193,7 @@
NSEvent.nsToJavaEventType(eventType);
}
- char javaChar = NSEvent.nsToJavaChar(testChar, modifierFlags);
+ char javaChar = NSEvent.nsToJavaChar(testChar, modifierFlags, spaceKeyTyped);
// Some keys may generate a KEY_TYPED, but we can't determine
// what that character is. That's likely a bug, but for now we
// just check for CHAR_UNDEFINED.
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/NSEvent.java Tue Jul 05 12:37:36 2016 +0300
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/NSEvent.java Tue Jul 05 16:20:00 2016 +0530
@@ -254,7 +254,7 @@
* There is a small number of NS characters that need to be converted
* into other characters before we pass them to AWT.
*/
- static native char nsToJavaChar(char nsChar, int modifierFlags);
+ static native char nsToJavaChar(char nsChar, int modifierFlags, boolean spaceKeyTyped);
static boolean isPopupTrigger(int jmodifiers) {
final boolean isRightButtonDown = ((jmodifiers & InputEvent.BUTTON3_DOWN_MASK) != 0);
--- a/jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTEvent.m Tue Jul 05 12:37:36 2016 +0300
+++ b/jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTEvent.m Tue Jul 05 16:20:00 2016 +0530
@@ -349,7 +349,7 @@
{0, 0, 0}
};
-unichar NsCharToJavaChar(unichar nsChar, NSUInteger modifiers)
+unichar NsCharToJavaChar(unichar nsChar, NSUInteger modifiers, BOOL spaceKeyTyped)
{
const struct _char *cur;
// Mask off just the keyboard modifiers from the event modifier mask.
@@ -382,6 +382,11 @@
return java_awt_event_KeyEvent_CHAR_UNDEFINED;
}
+ // nsChar receives value 0 when SPACE key is typed.
+ if (nsChar == 0 && spaceKeyTyped == YES) {
+ return java_awt_event_KeyEvent_VK_SPACE;
+ }
+
// otherwise return character unchanged
return nsChar;
}
@@ -757,13 +762,13 @@
*/
JNIEXPORT jint JNICALL
Java_sun_lwawt_macosx_NSEvent_nsToJavaChar
-(JNIEnv *env, jclass cls, jchar nsChar, jint modifierFlags)
+(JNIEnv *env, jclass cls, jchar nsChar, jint modifierFlags, jboolean spaceKeyTyped)
{
jchar javaChar = 0;
JNF_COCOA_ENTER(env);
- javaChar = NsCharToJavaChar(nsChar, modifierFlags);
+ javaChar = NsCharToJavaChar(nsChar, modifierFlags, spaceKeyTyped);
JNF_COCOA_EXIT(env);