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