Hi Manajit, Following are my inputs: CRobot.m : Line 359 : retval not needed alphabetical objC header list convention not followed. Line 36 should be placed at line 32 CRobotKeyCode.m : Line 171: retval not needed. use else block for cases undefined. Use non-Swing implementations for test case.
With Regards, Avik Niyogi > On 09-Mar-2016, at 2:52 pm, Manajit Halder <manajit.hal...@oracle.com> wrote: > > Hi All, > > Kindly review the fix for JDK9. > > Bug: > https://bugs.openjdk.java.net/browse/JDK-8149456 > <https://bugs.openjdk.java.net/browse/JDK-8149456> > > Webrev: > http://cr.openjdk.java.net/~arapte/manajit/8149456/webrev.00/ > <http://cr.openjdk.java.net/~arapte/manajit/8149456/webrev.00/> > > Issue: > [macosx] robot.keyPress do not generate key events (keyPressed and > keyReleased) for function keys F13 to F19. > > Cause: > robot.keyPress(keyCode) passes java key code for the particular key > pressed to native side (MacOS X). On the MacOS corresponding key code matched > and returned to java side. But as per the current implementation keys with > java key code below 222 returns a valid key code form MacOS X and for all > java key codes above 222 MacOS don’t have any valid key code to return and it > returns a default value 127 (undefined) for all of them including function > keys F13 to F20. The java key codes for keys F13 to F19 is in range 61440 to > 61447. > > Fix: > Create a dictionary of java keys and OS X keys with: > key: java key > value: OS X key > > Use the macros defined as macros in header java_awt_event_KeyEvent.h for java > keys > Define integer constants for OS X keys as shown below: > > const static int OSX_kVK_ANSI_A = 0x00; > const static int OSX_kVK_ANSI_S = 0x01; > const static int OSX_kVK_ANSI_D = 0x02; > const static int OSX_kVK_ANSI_F = 0x03; > > Problem in modifying/extending current fix: > Why the current fix can’t be extended/modified to support keys F13 to > F20. > > 1) The current fix creates an array with array index as java key and array > value as corresponding OS X key. > static const unsigned char javaToMacKeyCode[] = { > 127, // 0 0 VK_UNDEFINED No_Equivalent > 127, // 1 0x1 Not_Used > 127, // 2 0x2 Not_Used > > Here 0, 1 and 2 are the java keys and 127, 127 and 127 are the corresponding > key values in OS X for the same key. > The array can’t be modified to add support for F13 to F20 because their > corresponding values are 61440 to 61447. > It won’t be a good solution to extended the array with index 61440 to 61447. > > 2) The current fix creates an array using a pearl script. The pearl script > uses hardcoded values of java keys and OS X keys. > Also the Pearl script is not checked in to the java codebase. > > 3) The current fix not modifiable and not readable. > > Time comparisons between with and without fix in milliseconds: > The time comparison is done by taking the time diff in milliseconds > before and after calling robot keypress for all the keys using the test code > written for the fix. > Time diff taken for 5 test runs: > > With fix: 1658, 1698, 1705, 1453 and 1516 > Without fix: 1523, 1579, 1690, 1648 and 1504 > > Note: > The following java keys are not matched in the current fix because of > the following reasons: > 1) They are already matched with their corresponding keys on > Mac OS. > 2) There are no defined keys on Mac OS with the same > functionality for PRINTSCREEN, SCROLL LOCK and PAUSE. > 3) The following java keys are not defined in keyTable in > AWTEvent.m file. > > java_awt_event_KeyEvent_VK_PRINTSCREEN > java_awt_event_KeyEvent_VK_SCROLL_LOCK > java_awt_event_KeyEvent_VK_PAUSE > > In the previous fix these keys were matched to OSX_F14, OSX_F13 and > OSX_F15 respectively. > > > Regards, > Manajit >