<AWT Dev> [8] Review request for JDK-8020209: [macosx] Mac OS X key event confusion for "COMMAND PLUS" (plan B)
Sergey Bylokhov
Sergey.Bylokhov at oracle.com
Mon Oct 21 05:36:23 PDT 2013
Hi, Leonid.
Thie fix looks good. Let's hope that in this area we will have no more bugs.
On 21.10.2013 15:26, Leonid Romanov wrote:
> Here is an updated version of the fix with the expanded comment:
>
> http://cr.openjdk.java.net/~leonidr/8020209/webrev.03/
> <http://cr.openjdk.java.net/%7Eleonidr/8020209/webrev.03/>
>
> On 17.10.2013, at 21:48, Anthony Petrov <anthony.petrov at oracle.com
> <mailto:anthony.petrov at oracle.com>> wrote:
>
>> Thanks for the clarifications. They sound good to me.
>>
>> Regarding NSApp instance, your understanding is correct. Although I'm
>> not sure if this is a good idea to tell embedders to fix their code
>> in this case. But I'm sort of OK with the current approach for now.
>>
>> So, I'd like to see the final version of the fix with an updated
>> comment, and then I approve it.
>>
>> --
>> best regards,
>> Anthony
>>
>> On 10/16/2013 11:19 PM, Leonid Romanov wrote:
>>>
>>> On Oct 16, 2013, at 9:37 PM, Anthony Petrov
>>> <anthony.petrov at oracle.com <mailto:anthony.petrov at oracle.com>> wrote:
>>>
>>>> Hi Leonid,
>>>>
>>>> The problem with overriding NSApplication -sendEvent: is that you
>>>> can't be sure AWT is running with the NSApplicationAWT instance. If
>>>> using SWT, FX, or otherwise embedding AWT into another application,
>>>> the NSApp will point to an instance of another application class,
>>>> and your sendEvent: will never be called. I'd suggest to avoid
>>>> using this method altogether if possible.
>>>
>>> Do I understand you correctly that in case of AWT embedding NSApp
>>> could be some NSApplication subclass other than NSApplicationAWT? If
>>> so, then this hypothetical subclass might have the very same code
>>> I've added to NSApplicationAWT since it's the most common approach
>>> for solving the problem of missing NSKeyUp events. In this case, our
>>> attempt to solve it in some other way will only make things worse:
>>> we might end up with duplicate NSKeyUp events.
>>> So, my suggestions is to leave that code as it is and if embedders
>>> complain about aforementioned problem, tell them to fix it on theirs
>>> app level, as we've done it in our NSApplicationAWT.
>>>
>>>>
>>>> I see that webrev.01 also includes the changes in
>>>> NSApplicationAWT.m. Is this really necessary for that version of
>>>> the fix?
>>>>
>>>> I recall in your original review request you stated that the code
>>>> currently consists of multiple workarounds, and adding another one
>>>> could just bring more regressions or unexpected behaviors. So I'd
>>>> actually prefer the version .01.
>>>
>>> So do I. There are circumstances beyond my control that prevent me
>>> from landing the fix into JDK 8 GA. However, I still see .01 as the
>>> definitive version of the fix, and planning to include it into JDK 8
>>> Update 1/JDK 9 (I'll file a separate bug for it). Version .02 is a
>>> not a long term solution for me.
>>>
>>>
>>>>
>>>> Anyway, here's a couple of comments regarding the new fix:
>>>>
>>>> src/macosx/native/sun/awt/AWTView.m
>>>>> 313 NSUInteger modFlags = [event modifierFlags] &
>>>>> 314 (NSCommandKeyMask | NSAlternateKeyMask |
>>>>> NSShiftKeyMask | NSControlKeyMask);
>>>>> 315 if (modFlags == NSCommandKeyMask) {
>>>>
>>>> Do I understand correctly that OS X is fine with e.g.
>>>> Shift+Cmd+'+', and only Cmd+'+' is causing a problem?
>>>
>>> Yep.
>>>
>>>>
>>>>> 311 // Workaround for 8020209: special case for "Cmd =" and
>>>>> "Cmd ."
>>>>> 312 // because Cocoa calls performKeyEquivalent twice for
>>>>> these keystrokes
>>>>
>>>> Interesting that you say that Cocoa sends multiple events and I'd
>>>> guess one wants to filter some events out. However, at line 320 you
>>>> call performKeyEquivalent yourself. Is this like the third call or
>>>> something? Or the comment seems to be misleading otherwise.
>>>
>>> Ok, looks like I need to extend the comment. Cocoa calls
>>> -performKeyEquivalent twice only if we return NO from the first
>>> -performKeyEquivalent call. Normally, what happens when
>>> performKeyEquivalent returns NO is that Cocoa calls
>>> -performKeyEquivalent for the next responder in the responders
>>> chain, until it finds the one which would return YES. "Cmd =" and
>>> "Cmd ." key strokes, however, are really unusual: if we and all
>>> other responders in the chain return NO, then Cocoa will construct
>>> another NSEvent and call -performKeyEquivalent for that event.
>>> Returning YES from the -performKeyEquivalent prevents that. However,
>>> this means that Cocoa won't call -performKeyEquivalent for the menu
>>> bar, so we have to do it manually.
>>>
>>>>
>>>> --
>>>> best regards,
>>>> Anthony
>>>>
>>>> On 10/16/2013 08:53 PM, Leonid Romanov wrote:
>>>>> Hello,
>>>>> This is plan B version of the fix for JDK-8020209: [macosx] Mac OS
>>>>> X key event confusion for "COMMAND PLUS". The previous, proper
>>>>> version of the fix has been reviewed here:
>>>>> http://mail.openjdk.java.net/pipermail/awt-dev/2013-September/005441.html
>>>>> Unfortunately, I can't proceed with that version because there are
>>>>> some difficulties with submitting private JDK 8 build to Apple for
>>>>> approval. Since we are short on time and I want to fix this bug
>>>>> in JDK 8, I've had to use a workaround.
>>>>>
>>>>> Bug: https://bugs.openjdk.java.net/browse/JDK-8020209
>>>>> webrev: http://cr.openjdk.java.net/~leonidr/8020209/webrev.02/
>>>>>
>>>>> Thanks,
>>>>> Leonid.
>>>>>
>>>>>
>>>>>
>>>
>
--
Best regards, Sergey.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/awt-dev/attachments/20131021/ac9f02c6/attachment.html
More information about the awt-dev
mailing list