mirror of
https://github.com/openjdk/jdk.git
synced 2026-03-09 07:35:49 +00:00
8155740: [macosx] robot.keyPress and robot.keyRelease do not generate key event for Alt-Graph key VK_ALT_GRAPH
Reviewed-by: ssadetsky, serb
This commit is contained in:
parent
1357181c55
commit
76cbe40b08
@ -131,7 +131,7 @@ const keyTable[] =
|
||||
{0x3A, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_ALT}, // ****
|
||||
{0x3B, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_CONTROL}, // ****
|
||||
{0x3C, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_UNDEFINED},
|
||||
{0x3D, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_UNDEFINED},
|
||||
{0x3D, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_ALT_GRAPH},
|
||||
{0x3E, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_UNDEFINED},
|
||||
{0x3F, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_UNDEFINED}, // the 'fn' key on PowerBooks
|
||||
{0x40, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F17},
|
||||
@ -293,18 +293,18 @@ const nsKeyToJavaModifierTable[] =
|
||||
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
|
||||
},
|
||||
{
|
||||
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,
|
||||
@ -554,20 +554,20 @@ 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) {
|
||||
javaModifiers |= isExtMods ? cur->javaExtMask : cur->javaMask;
|
||||
if (cur->nsMask == NSAlternateKeyMask && leftAltKeyPressed == NO) {
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return javaModifiers;
|
||||
return javaModifiers;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@ -33,6 +33,7 @@
|
||||
#import "LWCToolkit.h"
|
||||
#import "sun_lwawt_macosx_CRobot.h"
|
||||
#import "java_awt_event_InputEvent.h"
|
||||
#import "java_awt_event_KeyEvent.h"
|
||||
#import "sizecalc.h"
|
||||
|
||||
// Starting number for event numbers generated by Robot.
|
||||
@ -258,26 +259,30 @@ JNIEXPORT void JNICALL
|
||||
Java_sun_lwawt_macosx_CRobot_keyEvent
|
||||
(JNIEnv *env, jobject peer, jint javaKeyCode, jboolean keyPressed)
|
||||
{
|
||||
/*
|
||||
* Well, using CGEventCreateKeyboardEvent/CGEventPost would have been
|
||||
* a better solution, however, it gives me all kinds of trouble and I have
|
||||
* no idea how to solve them without inserting delays between simulated
|
||||
* events. So, I've ended up disabling it and opted for another approach
|
||||
* that uses Accessibility API instead.
|
||||
*/
|
||||
CGKeyCode keyCode = GetCGKeyCode(javaKeyCode);
|
||||
AXUIElementRef elem = AXUIElementCreateSystemWide();
|
||||
AXUIElementPostKeyboardEvent(elem, (CGCharCode)0, keyCode, keyPressed);
|
||||
CFRelease(elem);
|
||||
|
||||
|
||||
#if 0
|
||||
CGEventRef event = CGEventCreateKeyboardEvent(NULL, keyCode, keyPressed);
|
||||
if (event != NULL) {
|
||||
CGEventPost(kCGSessionEventTap, event);
|
||||
CFRelease(event);
|
||||
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);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@ -53,6 +53,7 @@
|
||||
[NSNumber numberWithInt : OSX_Shift], [NSNumber numberWithInt : java_awt_event_KeyEvent_VK_SHIFT],
|
||||
[NSNumber numberWithInt : OSX_Control], [NSNumber numberWithInt : java_awt_event_KeyEvent_VK_CONTROL],
|
||||
[NSNumber numberWithInt : OSX_Option], [NSNumber numberWithInt : java_awt_event_KeyEvent_VK_ALT],
|
||||
[NSNumber numberWithInt : OSX_RightOption], [NSNumber numberWithInt : java_awt_event_KeyEvent_VK_ALT_GRAPH],
|
||||
[NSNumber numberWithInt : OSX_CapsLock], [NSNumber numberWithInt : java_awt_event_KeyEvent_VK_CAPS_LOCK],
|
||||
[NSNumber numberWithInt : OSX_Escape], [NSNumber numberWithInt : java_awt_event_KeyEvent_VK_ESCAPE],
|
||||
[NSNumber numberWithInt : OSX_kVK_Space], [NSNumber numberWithInt : java_awt_event_KeyEvent_VK_SPACE],
|
||||
|
||||
@ -22,15 +22,14 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
@test
|
||||
@bug 8149456 8147834 8150230
|
||||
@requires os.family == "mac"
|
||||
@summary KeyEvents for all keys
|
||||
@run main AllKeyCode
|
||||
*/
|
||||
@test
|
||||
@bug 8149456 8147834 8150230 8155740
|
||||
@requires os.family == "mac"
|
||||
@summary Tests key codes for all keys supported in Java for Mac OS X.
|
||||
@run main AllKeyCode
|
||||
*/
|
||||
|
||||
import java.awt.AWTException;
|
||||
import java.awt.GridBagLayout;
|
||||
import java.awt.Robot;
|
||||
import java.awt.event.KeyEvent;
|
||||
import java.awt.event.KeyListener;
|
||||
@ -149,7 +148,8 @@ public class AllKeyCode extends Frame {
|
||||
KeyEvent.VK_F17,
|
||||
KeyEvent.VK_F18,
|
||||
KeyEvent.VK_F19,
|
||||
KeyEvent.VK_F20
|
||||
KeyEvent.VK_F20,
|
||||
KeyEvent.VK_ALT_GRAPH
|
||||
};
|
||||
|
||||
keyPressedIndex = -1;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user