--- old/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTEvent.m 2016-04-06 19:38:32.000000000 +0530 +++ new/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTEvent.m 2016-04-06 19:38:32.000000000 +0530 @@ -282,12 +282,20 @@ //kCGSFlagsMaskAppleLeftAlternateKey, //kCGSFlagsMaskAppleRightAlternateKey, 58, - 61, + 0, java_awt_event_InputEvent_ALT_DOWN_MASK, java_awt_event_InputEvent_ALT_MASK, java_awt_event_KeyEvent_VK_ALT }, { + NSAlternateKeyMask, + 0, + 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, @@ -310,6 +318,8 @@ {0, 0, 0, 0, 0, 0} }; +static BOOL leftAltKeyPressed; + /* * Almost all unicode characters just go from NS to Java with no translation. * For the few exceptions, we handle it here with this small table. @@ -522,14 +532,20 @@ //} else if (changedNSFlags & cur->cgsRightMask) { // *javaKeyLocation = java_awt_event_KeyEvent_KEY_LOCATION_RIGHT; //} + if (eventKeyCode == cur->leftKeyCode) { + leftAltKeyPressed = YES; *javaKeyLocation = java_awt_event_KeyEvent_KEY_LOCATION_LEFT; } else if (eventKeyCode == cur->rightKeyCode) { *javaKeyLocation = java_awt_event_KeyEvent_KEY_LOCATION_RIGHT; + } else if (cur->nsMask == NSAlternateKeyMask) { + leftAltKeyPressed = NO; + continue; } *javaKeyType = (cur->nsMask & nsFlags) ? - java_awt_event_KeyEvent_KEY_PRESSED : - java_awt_event_KeyEvent_KEY_RELEASED; + java_awt_event_KeyEvent_KEY_PRESSED : + java_awt_event_KeyEvent_KEY_RELEASED; + break; } } @@ -545,10 +561,14 @@ for (cur = nsKeyToJavaModifierTable; cur->nsMask != 0; ++cur) { if ((cur->nsMask & nsFlags) != 0) { - javaModifiers |= isExtMods? cur->javaExtMask : cur->javaMask; + javaModifiers |= isExtMods ? cur->javaExtMask : cur->javaMask; + if (cur->nsMask == NSAlternateKeyMask && leftAltKeyPressed == NO) { + continue; + } + break; } } - + return javaModifiers; }