- // not SetFocusFromKbd(): we're restoring focus back to the old
- // window and not setting it as the result of a kbd action
- (*childLastFocused)->SetFocus();
- return true;
+ while ( *childLastFocused )
+ {
+ if ( (*childLastFocused)->IsShown() )
+ {
+ if ( !deepestVisibleWindow )
+ deepestVisibleWindow = *childLastFocused;
+ }
+ else
+ deepestVisibleWindow = NULL;
+
+ *childLastFocused = (*childLastFocused)->GetParent();
+ }
+
+ if ( deepestVisibleWindow )
+ {
+ *childLastFocused = deepestVisibleWindow;
+
+ wxLogTrace(TRACE_FOCUS,
+ wxT("SetFocusToChild() => last child (0x%p)."),
+ (*childLastFocused)->GetHandle());
+
+ // not SetFocusFromKbd(): we're restoring focus back to the old
+ // window and not setting it as the result of a kbd action
+ (*childLastFocused)->SetFocus();
+ return true;
+ }