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 > >