diff --git a/jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTEvent.m b/jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTEvent.m index 69fe7a90406..cedb68c56ca 100644 --- a/jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTEvent.m +++ b/jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTEvent.m @@ -277,6 +277,16 @@ const nsKeyToJavaModifierTable[] = java_awt_event_InputEvent_CTRL_MASK, java_awt_event_KeyEvent_VK_CONTROL }, + { + NSCommandKeyMask, + //kCGSFlagsMaskAppleLeftCommandKey, + //kCGSFlagsMaskAppleRightCommandKey, + 55, + 54, + java_awt_event_InputEvent_META_DOWN_MASK, + java_awt_event_InputEvent_META_MASK, + java_awt_event_KeyEvent_VK_META + }, { NSAlternateKeyMask, //kCGSFlagsMaskAppleLeftAlternateKey, @@ -295,16 +305,6 @@ const nsKeyToJavaModifierTable[] = java_awt_event_InputEvent_ALT_MASK | java_awt_event_InputEvent_ALT_GRAPH_MASK, java_awt_event_KeyEvent_VK_ALT | java_awt_event_KeyEvent_VK_ALT_GRAPH }, - { - NSCommandKeyMask, - //kCGSFlagsMaskAppleLeftCommandKey, - //kCGSFlagsMaskAppleRightCommandKey, - 55, - 54, - java_awt_event_InputEvent_META_DOWN_MASK, - java_awt_event_InputEvent_META_MASK, - java_awt_event_KeyEvent_VK_META - }, // NSNumericPadKeyMask { NSHelpKeyMask, @@ -319,6 +319,7 @@ const nsKeyToJavaModifierTable[] = }; static BOOL leftAltKeyPressed; +static BOOL altGRPressed = NO; /* * Almost all unicode characters just go from NS to Java with no translation. @@ -559,20 +560,28 @@ NsKeyModifiersToJavaKeyInfo(NSUInteger nsFlags, unsigned short eventKeyCode, */ jint NsKeyModifiersToJavaModifiers(NSUInteger nsFlags, BOOL isExtMods) { - jint javaModifiers = 0; - const struct _nsKeyToJavaModifier* cur; + jint javaModifiers = 0; + const struct _nsKeyToJavaModifier* cur; - for (cur = nsKeyToJavaModifierTable; cur->nsMask != 0; ++cur) { - if ((cur->nsMask & nsFlags) != 0) { - javaModifiers |= isExtMods ? cur->javaExtMask : cur->javaMask; - if (cur->nsMask == NSAlternateKeyMask && leftAltKeyPressed == NO) { - continue; - } - break; - } - } + for (cur = nsKeyToJavaModifierTable; cur->nsMask != 0; ++cur) { + if ((cur->nsMask & nsFlags) != 0) { + + if (cur->nsMask == NSAlternateKeyMask) { + if (leftAltKeyPressed == YES) { + javaModifiers |= isExtMods? cur->javaExtMask : cur->javaMask; + if (altGRPressed == NO) + break; + } else { + leftAltKeyPressed = YES; + altGRPressed = YES; + continue; + } + } + javaModifiers |= isExtMods ? cur->javaExtMask : cur->javaMask; + } + } - return javaModifiers; + return javaModifiers; } /* diff --git a/jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/CRobot.m b/jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/CRobot.m index 0de49711215..d3ee81c2175 100644 --- a/jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/CRobot.m +++ b/jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/CRobot.m @@ -261,27 +261,10 @@ Java_sun_lwawt_macosx_CRobot_keyEvent { CGKeyCode keyCode = GetCGKeyCode(javaKeyCode); - if ((javaKeyCode >= java_awt_event_KeyEvent_VK_0) && - (javaKeyCode <= java_awt_event_KeyEvent_VK_9)) - { - AXUIElementRef elem = AXUIElementCreateSystemWide(); - AXUIElementPostKeyboardEvent(elem, (CGCharCode)0, keyCode, keyPressed); - CFRelease(elem); - } else { - /* - * JDK-8155740: AXUIElementPostKeyboardEvent posts correct key codes for - * number keys whereas CGEventPost posts Numpad keys for corresponding - * number key. Hence AXUIElementPostKeyboardEvent is used for posting - * numbers and CGEventCreateKeyboardEvent/CGEventPost is used for other - * keys. - * Key code for modifier key is required to distinguish between ALT and - * ALT-GR key for fixing issue 8155740. - */ - CGEventRef event = CGEventCreateKeyboardEvent(NULL, keyCode, keyPressed); - if (event != NULL) { - CGEventPost(kCGSessionEventTap, event); - CFRelease(event); - } + CGEventRef event = CGEventCreateKeyboardEvent(NULL, keyCode, keyPressed); + if (event != NULL) { + CGEventPost(kCGSessionEventTap, event); + CFRelease(event); } }