-bool wxControlContainer::DoSetFocus()
-{
- wxLogTrace(TRACE_FOCUS, _T("SetFocus on wxPanel 0x%p."),
- m_winParent->GetHandle());
-
- if (m_inSetFocus)
- return true;
-
- // when the panel gets the focus we move the focus to either the last
- // window that had the focus or the first one that can get it unless the
- // focus had been already set to some other child
-
- wxWindow *win = wxWindow::FindFocus();
- while ( win )
- {
- if ( win == m_winParent )
- {
- // our child already has focus, don't take it away from it
- return true;
- }
-
- if ( win->IsTopLevel() )
- {
- // don't look beyond the first top level parent - useless and
- // unnecessary
- break;
- }
-
- win = win->GetParent();
- }
-
- // protect against infinite recursion:
- m_inSetFocus = true;
-
- bool ret = SetFocusToChild();
-
- m_inSetFocus = false;
-
- return ret;
-}
-