// focus handling
// ----------------------------------------------------------------------------
-void wxControlContainer::DoSetFocus()
+bool wxControlContainer::DoSetFocus()
{
wxLogTrace(_T("focus"), _T("SetFocus on wxPanel 0x%08x."),
m_winParent->GetHandle());
//
// RR: Removed for now. Let's see what happens..
- if ( !SetFocusToChild() )
+ // if our child already has focus, don't take it away from it
+ wxWindow *win = wxWindow::FindFocus();
+ while ( win )
{
- m_winParent->SetFocus();
+ if ( win == m_winParent )
+ return TRUE;
+
+ if ( win->IsTopLevel() )
+ {
+ // don't look beyond the first top level parent - useless and
+ // unnecessary
+ break;
+ }
+
+ win = win->GetParent();
}
+
+ return SetFocusToChild();
}
void wxControlContainer::HandleOnFocus(wxFocusEvent& event)