<AWT Dev> <AWT dev>[9] Review request for JDK-8155740: [macosx] robot.keyPress and robot.keyRelease do not generate key event for Alt-Graph key VK_ALT_GRAPH.
Semyon Sadetsky
semyon.sadetsky at oracle.com
Wed Jun 15 06:41:12 UTC 2016
OK, Thanks.
Looks good to me.
--Semyon
On 6/14/2016 9:48 PM, Manajit Halder wrote:
> Hi Semyon,
>
> Alignement is improved and it looks correct on Xcode and Netbeans.
> Please review the latest webrev:
>
> http://cr.openjdk.java.net/~mhalder/8155740/webrev.05/
> <http://cr.openjdk.java.net/%7Emhalder/8155740/webrev.05/>
>
> Thanks,
> Manajit
>
>> On 14-Jun-2016, at 3:17 pm, Semyon Sadetsky
>> <semyon.sadetsky at oracle.com <mailto:semyon.sadetsky at oracle.com>> wrote:
>>
>> Hi Manajit,
>>
>> Could you improve the alignment of lines 272-286?
>>
>> --Semyon
>>
>>
>> On 6/13/2016 2:29 PM, Manajit Halder wrote:
>>> Hi Semyon and Sergey,
>>>
>>> Code is modified as per the comment. Please review the modified webrev.
>>>
>>> http://cr.openjdk.java.net/~mhalder/8155740/webrev.04/
>>> <http://cr.openjdk.java.net/%7Emhalder/8155740/webrev.04/>
>>>
>>> webrev.02 did not work because -
>>> The input nsFlag (modifier value) passed to the function
>>> NsKeyModifiersToJavaModifiers was not correct. The calculation of
>>> modifierwas not wrong and hence wrong modifier values was returned
>>> from the method.
>>>
>>> Test cases run:
>>> Remaining two tests present in
>>> https://java.net/jira/browse/MACOSX_PORT passed with the fix.
>>> java/awt/Dialog/NestedDialogs/Modal/NestedModalDialogTest.java
>>> java/awt/Dialog/NestedDialogs/Modeless/NestedModelessDialogTest.java
>>>
>>> Thanks,
>>> Manajit
>>>
>>>> On 01-Jun-2016, at 11:24 pm, Semyon Sadetsky
>>>> <semyon.sadetsky at oracle.com <mailto:semyon.sadetsky at oracle.com>> wrote:
>>>>
>>>> Hi Manaji,
>>>>
>>>> Okay, back to werev.01.
>>>>
>>>> Could you remove the comment in lines 262-268 since you assume that
>>>> it is not true anymore and so
>>>> CGEventCreateKeyboardEvent/CGEventPost will not cause any troubles.
>>>>
>>>> Did you analyze why werev.02 fix did not pass those tests?
>>>>
>>>> --Semyon
>>>>
>>>>
>>>> On 6/1/2016 4:46 PM, Manajit Halder wrote:
>>>>> Hi Semyon and Sergey,
>>>>>
>>>>> After running the tests shared by Sergey I found that the second
>>>>> webrev (webrev.01) shared by me solves the problem.
>>>>>
>>>>> http://cr.openjdk.java.net/~mhalder/8155740/webrev.01/
>>>>> <http://cr.openjdk.java.net/%7Emhalder/8155740/webrev.01/>
>>>>>
>>>>> Following tests were present in
>>>>> https://java.net/jira/browse/MACOSX_PORT-621:
>>>>> closed/java/awt/KeyboardFocusmanager/ConsumeNextMnemonicKeyTypedTest/ConsumeNextMnemonicKeyTypedTest
>>>>> java/awt/Dialog/NestedDialogs/Modal/NestedModalDialogTest.java
>>>>> java/awt/Dialog/NestedDialogs/Modeless/NestedModelessDialogTest.java
>>>>>
>>>>> But only first test (which is now present as part of open code)
>>>>> could be performed and the remaining tests were not found in the
>>>>> present code.
>>>>> The first test fails due to another issue (JDK-8156460), whose fix
>>>>> is in progress and will be send for after this issue. This fix
>>>>> (JDK-8155740) is not related to the failure of the first test case.
>>>>>
>>>>> The new location of the first test:
>>>>> java/awt/KeyboardFocusmanager/ConsumeNextMnemonicKeyTypedTest/ConsumeNextMnemonicKeyTypedTest
>>>>>
>>>>> Please review the webrev.01.
>>>>>
>>>>> Thanks,
>>>>> Manajit
>>>>>
>>>>>> On 26-May-2016, at 1:05 pm, Semyon Sadetsky
>>>>>> <semyon.sadetsky at oracle.com <mailto:semyon.sadetsky at oracle.com>>
>>>>>> wrote:
>>>>>>
>>>>>> On 5/24/2016 2:09 PM, Manajit Halder wrote:
>>>>>>
>>>>>>> Hi Semyon,
>>>>>>>
>>>>>>> It is not clear in the comment what was the problem, but it
>>>>>>> looks like the problem was observed just by
>>>>>>> using CGEventCreateKeyboardEvent/CGEventPost. In my case I don’t
>>>>>>> see any issues just by using the fix. It posts all the key
>>>>>>> events and all the key events are tested in the test file
>>>>>>> modified along with the fix.
>>>>>> If you found the comment is not actual anymore, why did you
>>>>>> preserve it?
>>>>>>
>>>>>> --Semyon
>>>>>>>
>>>>>>> Apart from the unknown problem mentioned in the existing comment
>>>>>>> this fix has following advantages:
>>>>>>>
>>>>>>> * Key codes for modifier key are required to distinguish
>>>>>>> between Alt and Alt-Gr key, which is not possible by using
>>>>>>> existing solution as it doesn’t post key codes for modifier
>>>>>>> keys. And also keys can’t be distinguished base on modifier
>>>>>>> value, which is same for both keys (Alt and Alt-Gr).
>>>>>>> * As mentioned in the existing
>>>>>>> comment CGEventCreateKeyboardEvent/CGEventPost is a better
>>>>>>> solution.
>>>>>>> * Online search about keyboard simulation showed
>>>>>>> that CGEventCreateKeyboardEvent/CGEventPost is used to
>>>>>>> simulate key stores in most of the cases.
>>>>>>> * Tested the key codes, didn’t observe any problem.
>>>>>>>
>>>>>>>
>>>>>>> Regarding number keys not working
>>>>>>> with CGEventCreateKeyboardEvent/CGEventPost:
>>>>>>> Solved the problem by providing event source
>>>>>>> to CGEventCreateKeyboardEvent. Code is modified.
>>>>>>>
>>>>>>> Please review the modified code:
>>>>>>> http://cr.openjdk.java.net/~mhalder/8155740/webrev.02/
>>>>>>>
>>>>>>> Thanks,
>>>>>>> Manajit
>>>>>>>
>>>>>>>> On 20-May-2016, at 12:02 am, Semyon Sadetsky
>>>>>>>> <semyon.sadetsky at oracle.com> wrote:
>>>>>>>>
>>>>>>>> Hi Manajit,
>>>>>>>>
>>>>>>>> Before your fix all key codes wa sent using
>>>>>>>>
>>>>>>>> AXUIElementCreateSystemWide();
>>>>>>>>
>>>>>>>> and CGEventCreateKeyboardEvent was commented or excluded from
>>>>>>>> compilation:
>>>>>>>>
>>>>>>>> 274 #if 0
>>>>>>>> 275 CGEventRef event = CGEventCreateKeyboardEvent(NULL,
>>>>>>>> keyCode, keyPressed);
>>>>>>>> 276 if (event != NULL) {
>>>>>>>> 277 CGEventPost(kCGSessionEventTap, event);
>>>>>>>> 278 CFRelease(event);
>>>>>>>> 279 }
>>>>>>>> 280 #endif
>>>>>>>>
>>>>>>>> I just wonder why it was done. Maybe that was some other issue
>>>>>>>> fix. The comment above states:
>>>>>>>>
>>>>>>>> 262 * Well, using CGEventCreateKeyboardEvent/CGEventPost
>>>>>>>> would have been
>>>>>>>> 263 * a better solution, however, it gives me all kinds
>>>>>>>> of trouble and I have
>>>>>>>> 264 * no idea how to solve them without inserting delays
>>>>>>>> between simulated
>>>>>>>> 265 * events. So, I've ended up disabling it and opted
>>>>>>>> for another approach
>>>>>>>> 266 * that uses Accessibility API instead.
>>>>>>>>
>>>>>>>> I don't understand what trouble is mentioned in the comment
>>>>>>>> above. But in your fix you've put the
>>>>>>>> CGEventCreateKeyboardEvent back, may it return this trouble back?
>>>>>>>>
>>>>>>>> Also as I understand Numpad number keys did not work as well.
>>>>>>>> Could you add the corresponding test case since you provide a
>>>>>>>> fix this extra issue?
>>>>>>>>
>>>>>>>> --Semyon
>>>>>>>>
>>>>>>>>
>>>>>>>> On 5/13/2016 11:50 PM, Manajit Halder wrote:
>>>>>>>>> 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/_
>>>>>>>>> _
>>>>>>>>> _
>>>>>>>>>
>>>>>>>>> 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
>>>>>>>>>>> _
>>>>>>>>>>> _
>>>>>>>>>>> *Webrev*:
>>>>>>>>>>> http://cr.openjdk.java.net/~mhalder/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
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/awt-dev/attachments/20160615/bdb456b8/attachment-0001.html>
More information about the awt-dev
mailing list