- // we set the focus to the child that accepts the focus. this
- // doesn't really have to be done in "realize" but why not?
+ // We need to set the focus to some child. Either, this
+ // has been done already or will be done in the next
+ // idle cycle, or we will set it ourselves.
+
+ if (g_delayedFocus)
+ {
+ if (wxGetTopLevelParent(g_delayedFocus))
+ return;
+ else
+ g_delayedFocus = NULL;
+ }
+
+ wxWindow *currentFocus = wxWindow::FindFocus();
+ if (currentFocus)
+ {
+ // I am not sure if this ever can happen,
+ // since the TLW is just about to get
+ // created and its children probably don't
+ // have any focus.
+ if (wxGetTopLevelParent(currentFocus) == win)
+ return;
+ }
+
+ // We set the focus to the child that accepts the focus.