X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/67bd5bad041419c4714d09749737d5ea9876a47d..a51fb6427c1036779a67b92ff0976c0a735ab0c3:/src/msw/frame.cpp diff --git a/src/msw/frame.cpp b/src/msw/frame.cpp index 857089ffb1..6723824373 100644 --- a/src/msw/frame.cpp +++ b/src/msw/frame.cpp @@ -727,18 +727,35 @@ void wxFrame::OnActivate(wxActivateEvent& event) // restore focus to the child which was last focused wxLogTrace(_T("focus"), _T("wxFrame %08x activated."), m_hWnd); - wxSetFocusToChild(this, &m_winLastFocused); + wxWindow *parent = m_winLastFocused ? m_winLastFocused->GetParent() + : NULL; + if ( !parent ) + { + parent = this; + } + + wxSetFocusToChild(parent, &m_winLastFocused); } - else + else // deactivating { - // remember the last focused child + // remember the last focused child if it is our child m_winLastFocused = FindFocus(); - while ( m_winLastFocused ) + + // so we NULL it out if it's a child from some other frame + wxWindow *win = m_winLastFocused; + while ( win ) { - if ( GetChildren().Find(m_winLastFocused) ) + if ( win->IsTopLevel() ) + { + if ( win != this ) + { + m_winLastFocused = NULL; + } + break; + } - m_winLastFocused = m_winLastFocused->GetParent(); + win = win->GetParent(); } wxLogTrace(_T("focus"),