X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/94e0018723919fe2ca2f5b5f0a42804c16dbf3a1..5804d539bea1e01b3eef05e4cd3f46de5d5fb6a9:/src/common/containr.cpp?ds=sidebyside diff --git a/src/common/containr.cpp b/src/common/containr.cpp index 2fda844c96..8490cc5b9f 100644 --- a/src/common/containr.cpp +++ b/src/common/containr.cpp @@ -653,17 +653,27 @@ bool wxSetFocusToChild(wxWindow *win, wxWindow **childLastFocused) // It might happen that the window got reparented if ( (*childLastFocused)->GetParent() == win ) { - // And it also could have become hidden in the meanwhile, in this - // case focus its parent instead. - while ( !(*childLastFocused)->IsShown() ) + // And it also could have become hidden in the meanwhile + // We want to focus on the deepest widget visible + wxWindow *deepestVisibleWindow = NULL; + + while ( *childLastFocused ) { + if ( (*childLastFocused)->IsShown() ) + { + if ( !deepestVisibleWindow ) + deepestVisibleWindow = *childLastFocused; + } + else + deepestVisibleWindow = NULL; + *childLastFocused = (*childLastFocused)->GetParent(); - if ( !*childLastFocused ) - break; } - if ( *childLastFocused ) + if ( deepestVisibleWindow ) { + *childLastFocused = deepestVisibleWindow; + wxLogTrace(TRACE_FOCUS, wxT("SetFocusToChild() => last child (0x%p)."), (*childLastFocused)->GetHandle());