The window that had focus previously could be hidden now, but its parent could
be hidden as well so it's not enough to set focus to it but we need to loop
until we find a visible ancestor.
Closes #14230.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@71227
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
// It might happen that the window got reparented
if ( (*childLastFocused)->GetParent() == win )
{
// 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();
*childLastFocused = (*childLastFocused)->GetParent();
- if ( !*childLastFocused )
- break;
- if ( *childLastFocused )
+ if ( deepestVisibleWindow )
+ *childLastFocused = deepestVisibleWindow;
+
wxLogTrace(TRACE_FOCUS,
wxT("SetFocusToChild() => last child (0x%p)."),
(*childLastFocused)->GetHandle());
wxLogTrace(TRACE_FOCUS,
wxT("SetFocusToChild() => last child (0x%p)."),
(*childLastFocused)->GetHandle());