Hi Semyon,

The fix is changed a bit because it was observed that the modifier keys plus 
alphabet keys were not working together. In the modified fix only Num keys are 
posted by AXUIElementPostKeyboardEvent and remaining keys are posted by 
CGPostKeyboardEvent/CGEventPost. The fix is explained in the comment in file 
CRobot.m.

Please review the new changes:
http://cr.openjdk.java.net/~mhalder/8155740/webrev.01/ 
<http://cr.openjdk.java.net/~mhalder/8155740/webrev.01/>


Answers to your questions:

What is difference between AXUIElementPostKeyboardEvent and 
CGEventCreateKeyboardEvent?

Difference as per the documentation:
        AXUIElementPostKeyboardEvent is similar to CGPostKeyboardEvent (which 
synthesizes a low-level keyboard event on the local machine), but it allows you 
to specify the target application as opposed to always sending the events to 
the active application. If the system-wide accessibility object is passed in 
the application parameter, the event is sent to the active application. 

Difference behaviour as per the implementation observed while debugging the 
code:
        
AXUIElementPostKeyboardEvent:
        AXUIElementPostKeyboardEvent posts 0 key code for all the modifier keys 
with key codes 16, 17,18, 20, 157 and also for newly added modifier key 
VK_ALT_GRAPH. But it posts correct key code for all the remaining keys.
        While debugging it was that for modifier keys keyDown and keyUp events 
are not generated, but flagsChanged event (flagsChanged: (NSEvent *)event) is 
generated. But for all other keys keyDown followed by keyUp events are 
generated.

CGEventCreateKeyboardEvent:
        CGEventCreateKeyboardEvent posts correct key code for all the keys 
except for numeric keys (numbers 0 to 9 on normal keyboard). 
CGEventCreateKeyboardEvent posts wrong key codes for the number keys 0 to 9. 
Instead of posting number key codes it posts Numpad key codes for the 
corresponding number key. For example Numpad0 key code is posted for number 0, 
Numpad1 key code is posted for number 1 and simillarly for remaining num keys.
        
Why the latter was commented? Does it mean that valid modifier keys have not 
been sent by AWT robot?

I didn’t get your question clearly. If you meant why in the current 
implementation the later part (fix using CGPostKeyboardEvent) of fix was 
commented.
        I am not very sure about it. As per the comment it is only clear that 
CGPostKeyboardEvent/CGEventPost would have been a better solution and I agree 
with that, perhaps reason could be related to the difference in behaviour 
observed while debugging the code as mentioned above.

Thanks,
Manajit

> Hi Manajit,
> 
> Just a few questions to clarify on the fix.
> What is difference between AXUIElementPostKeyboardEvent and 
> CGEventCreateKeyboardEvent?
        
> Why the latter was commented? Does it mean that valid modifier keys have not 
> been sent by AWT robot?
> 
> --Semyon
> 
> 
> On 5/12/2016 10:45 AM, Manajit Halder wrote:
>> Hi All,
>> 
>> Kindly review the fix for JDK9.
>> 
>> Bug: 
>> https://bugs.openjdk.java.net/browse/JDK-8155740 
>> <https://bugs.openjdk.java.net/browse/JDK-8155740>
>> 
>> Webrev: 
>> http://cr.openjdk.java.net/~mhalder/8155740/webrev.00/ 
>> <http://cr.openjdk.java.net/%7Emhalder/8155740/webrev.00/>
>> 
>> Issue: 
>> [macosx] robot.keyPress and robot.keyRelease do not generate key event for 
>> Alt-Graph key VK_ALT_GRAPH.
>> 
>> Cause: 
>> VK_ALT_GRAPH is a new key added to the Mac OS X platform and it is not 
>> mapped to any key on the OS X platform.
>> 
>> Fix: 
>> VK_ALT_GRAPH is mapped to right option (OSX_RightOption) key on Mac OS X.
>> 
>> Method Java_sun_lwawt_macosx_CRobot_keyEvent is modified for the following 
>> reason:
>> AXUIElementPostKeyboardEvent posts 0 key code for all  the modifier keys 
>> with key codes (16, 17,18, 20, 157) and also for newly added modifier key 
>> VK_ALT_GRAPH.
>> But it posts correct key code for all the other keys. On the other hand 
>> CGEventCreateKeyboardEvent posts correct key code for all the modifier keys 
>> and 
>> hence it is used to post modifier key events and 
>> AXUIElementPostKeyboardEvent is used to post all the remaining key events.
>> 
>> Regards,
>> Manajit
> 

Reply via email to