<AWT Dev> [10] Review request for 8155197: Focus transition issue

Alexey Ivanov alexey.ivanov at oracle.com
Fri Oct 6 19:35:04 UTC 2017


Hi Dmitry,

Looks fine to me too.


Regards,
Alexey

On 05/10/2017 15:27, Dmitry Markov wrote:
> Hi Sergey,
>> On 4 Oct 2017, at 19:27, Sergey Bylokhov <sergey.bylokhov at oracle.com 
>> <mailto:sergey.bylokhov at oracle.com>> wrote:
>>
>> On 10/4/17 03:25, Dmitry Markov wrote:
>>> Good catch!
>>> Actually we check restoreFocusTo before its usage, (i.e. we compare 
>>> restoreFocusTo with most resent focus owner for the window; most 
>>> recent focus owner is visible and focusable, otherwise it is removed 
>>> from recent focus owners map).
>>> So the checks before assignment are not really necessary. I updated 
>>> the fix (reverted it to the previous version). Please find webrev 
>>> here:http://cr.openjdk.java.net/~dmarkov/8155197/webrev.03/ 
>>> <http://cr.openjdk.java.net/%7Edmarkov/8155197/webrev.03/>
>>
>> isn't the "restoreFocusTo = toFocus;" also redundant?
>> If we tried to restore the focus synchronously in Window1 (Actually 
>> we tried to post FocusEvent.Cause.ROLLBACK) and we found that the 
>> native window was changed to Window2 then why we should post ROLLBACK 
>> then the focus will be moved back to Window1? I assume that we never 
>> post ROLLBACK to the Window1 because when the Window2 will got the 
>> focus it will reset restoreFocusTo.
>> It is up to you to check it, it looks fine to me as-is.
> Most likely you are right. However if you do not mind I would prefer 
> to keep it as is.
>
> Thanks,
> Dmitry
>>
>>> Thanks,
>>> Dmitry
>>>> On 3 Oct 2017, at 18:30, Sergey Bylokhov 
>>>> <sergey.bylokhov at oracle.com 
>>>> <mailto:sergey.bylokhov at oracle.com><mailto:sergey.bylokhov at oracle.com>> 
>>>> wrote:
>>>>
>>>> Hi, Dmitry.
>>>> If this check is valid then probably the same check should be added 
>>>> to restoreFocus()? before:
>>>> #173 restoreFocusTo = toFocus;
>>>>
>>>> But as it was mentioned before, the component can become 
>>>> non-visible/non-focusable at any point, for example after this 
>>>> check but before the assignment. And instead of data validation 
>>>> before assignment we should check them before use. As far as I 
>>>> understand we already do this, all usages of restoreFocusTo are a 
>>>> checks == or != to some other component which is visible and 
>>>> focusable, isn't it?
>>>>
>>>> On 10/3/17 08:23, Dmitry Markov wrote:
>>>>> Hi Semyon,
>>>>> I have updated the fix based on your suggestion. The new version 
>>>>> is locatedathttp://cr.openjdk.java.net/~dmarkov/8155197/webrev.02/ 
>>>>> <athttp://cr.openjdk.java.net/%7Edmarkov/8155197/webrev.02/>
>>>>> Also I slightly modified the test to simplify it.
>>>>> Thanks,
>>>>> Dmitry
>>>>>> On 2 Oct 2017, at 18:32, Semyon Sadetsky 
>>>>>> <semyon.sadetsky at oracle.com <mailto:semyon.sadetsky at oracle.com> 
>>>>>> <mailto:semyon.sadetsky at oracle.com><mailto:semyon.sadetsky at oracle.com>> 
>>>>>> wrote:
>>>>>>
>>>>>> Hi Dmitry,
>>>>>>
>>>>>>>> Actually the parent frame doesn't own the input focus when the 
>>>>>>>> issue happens. The focus is on the dialog already and when 
>>>>>>>> FOCUS_GAINED event comes for the dialog the KFM discovers that 
>>>>>>>> the dialog should not have the focus and rejects it in line 588 
>>>>>>>> of the DefaultKeyboardFocusManager:
>>>>>>>>
>>>>>>>> restoreFocus(fe, newFocusedWindow);
>>>>>>>>
>>>>>>>> This happens when the dialog became non-focusable (non-visible) 
>>>>>>>> after the focus request is sent, but before the corresponding 
>>>>>>>> FOCUS_GAINED event is handled on the EDT. In this case the 
>>>>>>>> focus is directly restored to the previously focused window 
>>>>>>>> which doesn't have the focus at this moment and input focus 
>>>>>>>> cannot be requested to one of its components synchronously.
>>>>>>>> Please confirm whether you agree on the root cause of the bug.
>>>>>>>>
>>>>>>> You are right. I agree with your evaluation.
>>>>>> Thanks.
>>>>>> Before setting the restoreFocusTo to toFocus in line 190 I would 
>>>>>> recheck for toFocus.isShowing() && toFocus.canBeFocusOwner() once 
>>>>>> again because the component can be made non-focusable concurrently.
>>>>>>
>>>>>> --Semyon
>>>>>>
>>>>>>
>>>>
>>>>
>>>> --
>>>> Best regards, Sergey.
>>
>>
>> --
>> Best regards, Sergey.
>



More information about the awt-dev mailing list