--- old/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTEvent.m 2016-06-19 23:37:31.000000000 +0530 +++ new/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTEvent.m 2016-06-19 23:37:31.000000000 +0530 @@ -277,6 +277,16 @@ 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, @@ -293,17 +303,7 @@ 61, java_awt_event_InputEvent_ALT_DOWN_MASK | java_awt_event_InputEvent_ALT_GRAPH_DOWN_MASK, java_awt_event_InputEvent_ALT_MASK | java_awt_event_InputEvent_ALT_GRAPH_MASK, - java_awt_event_KeyEvent_VK_ALT - }, - { - NSCommandKeyMask, - //kCGSFlagsMaskAppleLeftCommandKey, - //kCGSFlagsMaskAppleRightCommandKey, - 55, - 54, - java_awt_event_InputEvent_META_DOWN_MASK, - java_awt_event_InputEvent_META_MASK, - java_awt_event_KeyEvent_VK_META + java_awt_event_KeyEvent_VK_ALT | java_awt_event_KeyEvent_VK_ALT_GRAPH }, // NSNumericPadKeyMask { @@ -319,6 +319,7 @@ }; static BOOL leftAltKeyPressed; +static BOOL altGRPressed = NO; /* * Almost all unicode characters just go from NS to Java with no translation. @@ -554,16 +555,24 @@ */ 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; + + if (cur->nsMask == NSAlternateKeyMask) { + if (leftAltKeyPressed == YES) { + javaModifiers |= isExtMods? cur->javaExtMask : cur->javaMask; + if (altGRPressed == NO) + break; + } else { + leftAltKeyPressed = YES; + altGRPressed = YES; + continue; + } } - break; + javaModifiers |= isExtMods ? cur->javaExtMask : cur->javaMask; } }