Don't set focus to hidden window in wxSetFocusToChild().
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
This commit is contained in:
parent
34a9a3528f
commit
6ca243fc75
@ -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());
|
||||
|
Loading…
Reference in New Issue
Block a user