--- old/src/java.desktop/macosx/native/libawt_lwawt/awt/CRobot.m 2017-11-21 10:24:16.198650100 +0530 +++ new/src/java.desktop/macosx/native/libawt_lwawt/awt/CRobot.m 2017-11-21 10:24:15.241756100 +0530 @@ -260,9 +260,35 @@ (JNIEnv *env, jobject peer, jint javaKeyCode, jboolean keyPressed) { CGKeyCode keyCode = GetCGKeyCode(javaKeyCode); - CGEventRef event = CGEventCreateKeyboardEvent(NULL, keyCode, keyPressed); + + if (event != NULL) { + CGEventPost(kCGSessionEventTap, event); + CFRelease(event); + } +} + +/* + * Class: sun_lwawt_macosx_CRobot + * Method: keyEventUnicode + * Signature: (IZ)V + */ +JNIEXPORT void JNICALL +Java_sun_lwawt_macosx_CRobot_keyEventUnicode +(JNIEnv *env, jobject peer, jint unicodeKey, jboolean keyPressed) +{ + CGEventRef event; + UniChar uCh = unicodeKey; + + // create a null keyboard event + event = CGEventCreateKeyboardEvent(NULL, 0, keyPressed); + if (event != NULL) { + /* Note that application frameworks may ignore the Unicode string in a + keyboard event and do their own translation based on the + virtual keycode and perceived event state. + */ + CGEventKeyboardSetUnicodeString(event, 1, &uCh); CGEventPost(kCGSessionEventTap, event); CFRelease(event); } @@ -286,7 +312,7 @@ jint picHeight = height; CGRect screenRect = CGRectMake(picX / scale, picY / scale, - picWidth / scale, picHeight / scale); + picWidth / scale, picHeight / scale); CGImageRef screenPixelsImage = CGWindowListCreateImage(screenRect, kCGWindowListOptionOnScreenOnly, kCGNullWindowID, kCGWindowImageBestResolution);