Hi Semyon,

I have updated the fix based on your suggestion. The new version is located at 
http://cr.openjdk.java.net/~dmarkov/8155197/webrev.02/ 
<http://cr.openjdk.java.net/~dmarkov/8155197/webrev.02/>
Also I slightly modified the test to simplify it.

Thanks,
Dmitry
> On 2 Oct 2017, at 18:32, Semyon Sadetsky <semyon.sadet...@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
> 
> 

Reply via email to