<AWT Dev> [8] Review Request for 8010009 : [macosx] Unable type into online word games on MacOSX

Dmitry Cherepanov dmitry.cherepanov at oracle.com
Wed Apr 3 02:13:09 PDT 2013


Hi Petr,

Looks fine to me too. Just a minor suggestion. If we're going to update 
CEmbeddedFrame.handleKeyEvent, could you please also remove another 
version of handleKeyEvent (with comment "REMIND: delete ..."). The 
plugin doesn't use this version now and it's safe to delete this piece 
of code.

Dmitry

On 4/2/2013 8:19 PM, Anthony Petrov wrote:
> Thanks for the clarifications, Petr. The fix looks fine to me, then.
>
> -- 
> best regards,
> Anthony
>
> On 4/2/2013 20:00, Petr Pchelko wrote:
>> Thank you for the review, Anthony.
>>
>>>  It may happen that a user presses several keys at once, each will 
>>> generate a PRESSED event. But the RELEASED event will only be sent 
>>> for the lastKeyPressCode. Could you test this case please and see if 
>>> we should do anything about it?
>> There are 2 cases:
>> 1. You click 2 buttons really fast.  Then events come as Key1 pressed 
>> -> Text input for key 1 -> key2 pressed -> text input for key 2. 2. 
>> You press and hold key 1 -> press key 2 -> release key 2 -> release 
>> key 1. In this case the browser sends keyPressed events only for the 
>> key pressed last.
>> Safary handles both cases well. Firefox sends an additional 
>> keyReleased event for one of the keys. I suppose it is a bug in 
>> Firefox, because specification says, that if we return 2 in response 
>> to keyDown event we will not get a keyReleased event.
>> To conclude: I've tested it quite extensively and multiple keys are 
>> handled well, except an issue in Firefox.
>>
>>> I'm also concerned that synthesizing the RELEASED event in 
>>> handleKeyEvent() is guarded with a needsKeyReleased (and the event 
>>> might have already been sent for the lastKeyPressCode from there), 
>>> however, there's no such check in handleInputEvent() and we send it 
>>> unconditionally. So it looks a little unbalanced.
>> The KEY_RELEASED event is synthesized in handleKeyEvent() only when 
>> both needsKeyTyped and needsKeyReleased flags are true. This is only 
>> true when we hold a key in Firefox. Firefox has a strange 
>> implementation in this case, which depends on a button:
>> 1. For a, i, o, etc. These are the buttons which have some non-latin 
>> symbols like à or ł. We get a cycle of KEY_PRESSED and then nothing. 
>> There is a bug: a special out-of-line box is showing up in the wrong 
>> place and TextInputEvent does not come if you choose a symbol from a 
>> popup. I think it would be better to fix it as a separate issue.
>> 2. For buttons which does not have associated non-latin symbols: We 
>> constantly get KEY_PRESSED and then nothing. 3. For SPACE and ENTER: 
>> these buttons stop the composition, so we get a cycle of 
>> KEY_PRESSED->TEXT_INPUT->KEY_PRESSED->TEXT_INPUT->.... This is worked 
>> around in handleKeyEvent()
>>
>> So, as you see generation of KEY_RELEASED in handleKeyEvent() and 
>> hadleInputEvent() never goes together. The only exception is an 
>> additional keyReleased event sent by Firefox. However, as I've said, 
>> I think it's a Firefox bug.
>>
>> With best regards. Petr.
>>
>>> Hi Petr,
>>>
>>> The changes in handleKeyEvent() look good to me.
>>>
>>> However, I'm not so sure about the handleInputEvent() synthesizing 
>>> the RELEASED event. It may happen that a user presses several keys 
>>> at once, each will generate a PRESSED event. But the RELEASED event 
>>> will only be sent for the lastKeyPressCode. Could you test this case 
>>> please and see if we should do anything about it? I'm also concerned 
>>> that synthesizing the RELEASED event in handleKeyEvent() is guarded 
>>> with a needsKeyReleased (and the event might have already been sent 
>>> for the lastKeyPressCode from there), however, there's no such check 
>>> in handleInputEvent() and we send it unconditionally. So it looks a 
>>> little unbalanced.
>>>
>>> -- 
>>> best regards,
>>> Anthony
>>>
>>> On 4/2/2013 18:00, Petr Pchelko wrote:
>>>> Hello, thank you for the review.
>>>> I have updated the fix, the new version is available at:
>>>> http://cr.openjdk.java.net/~pchelko/80010009/
>>>> Dmitry wrote:
>>>>> One comment - perhaps it'd be better to synthesize one UP event. 
>>>>> According to the spec, the Plugin doesn't receive DOWN/UP events 
>>>>> associated with composition - the Plugin receive one DOWN event 
>>>>> and returns kNPEventStartIME to start composition and we should 
>>>>> probably synthesize one UP event for consistency.
>>>> Yes, you are certainly right, I have updated the fix for this.
>>>> Anthony wrote:
>>>>> Have you investigated the -isARepeat flag and whether we want to 
>>>>> do the same in JDK?
>>>> No, I did not. However, now I have checked this up and updated the 
>>>> fix. The was an additional issue with a repeat: space and enter 
>>>> keys stopped the composition instantly, so we've received 
>>>> duplicated KEY_TYPED events in Firefox. Now this is fixed. The new 
>>>> version of the fix also affects only applet case as 
>>>> needsKeyReleased flag is always false for normal windows.
>>>> With best regards. Petr.
>>>> On Apr 2, 2013, at 1:23 PM, Dmitry Cherepanov wrote:
>>>>> Hi Petr,
>>>>>
>>>>> Looks fine to me, thanks for fixing this.
>>>>>
>>>>> One comment - perhaps it'd be better to synthesize one UP event. 
>>>>> According to the spec, the Plugin doesn't receive DOWN/UP events 
>>>>> associated with composition - the Plugin receive one DOWN event 
>>>>> and returns kNPEventStartIME to start composition and we should 
>>>>> probably synthesize one UP event for consistency.
>>>>>
>>>>> And it seems like Glass works the same way - synthesize one UP 
>>>>> event associated with composition:
>>>>>
>>>>> GlassEmbeddedWindow+Npapi.m (_1dispatchCocoaNpapiTextInputEvent 
>>>>> function)
>>>>>
>>>>>      if ([chars length] == 1) {
>>>>>          
>>>>> Java_com_sun_glass_events_mac_NpapiEvent__1dispatchCocoaNpapiKeyEvent( 
>>>>>
>>>>>              env, jNpapiClass, jPtr, 
>>>>> com_sun_glass_events_mac_NpapiEvent_NPCocoaEventKeyUp,
>>>>>              0, jText, jText, JNI_FALSE, 0, JNI_FALSE);
>>>>>      }
>>>>>
>>>>> Dmitry
>>>>>
>>>>> Petr Pchelko wrote:
>>>>>> Hello, AWT team.
>>>>>>
>>>>>> Please review the fix for the following issue:
>>>>>> http://bugs.sun.com/view_bug.do?bug_id=8010009
>>>>>> The fix is available at:
>>>>>> http://cr.openjdk.java.net/~pchelko/8010009/webrev.00/ 
>>>>>> <http://cr.openjdk.java.net/%7Epchelko/8010009/webrev.00/>
>>>>>>
>>>>>> The problem occurred because we use input methods for plugin 
>>>>>> keyboard input. So when the text from the input method comes only 
>>>>>> KEY_TYPED events were synthesized. Now we also synthesize 
>>>>>> KEY_RELEASED events. Additionally, the last keyCode should be 
>>>>>> stored because some swing code relies on the keyCode for the 
>>>>>> KEY_RELEASED event.
>>>>>>
>>>>>> There still are 2 issues around this:
>>>>>> 1. Firefox has a very strange behavior when user types extremely 
>>>>>> fast.  KeyReleased events come from the browser, while they 
>>>>>> should not according to the NPAPI specification.  I suppose it is 
>>>>>> a bug in Firefox. I did not add any workaround for this issue, 
>>>>>> because I there is no way to add it safely. The workaround could 
>>>>>> possible break the existing code. So I suppose it is better to 
>>>>>> file a bug to Mozilla.
>>>>>> 2. The game from Pogo does not expect some possible combinations 
>>>>>> of events coming and skips squares if you type for example  "  
>>>>>> 'r  " . This should probably be filed to Pogo Games.
>>>>>>
>>>>>> With best regards. Petr.
>>>>>>
>>




More information about the awt-dev mailing list