Don't infinitely recurse when setting the child focus. Without

this, nested panels/scrolled windows that work fine on wxGTK, wxMSW
can cause infinite recursion on wxMac


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@26868 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Julian Smart 2004-04-19 14:41:06 +00:00
parent 422a142bc2
commit b33f7651ae
2 changed files with 14 additions and 1 deletions

View File

@ -92,6 +92,9 @@ protected:
// a temporary override of m_winDefault, use the latter if NULL
wxWindow *m_winTmpDefault;
// a guard against infinite recursion
bool m_inSetFocus;
DECLARE_NO_COPY_CLASS(wxControlContainer)
};

View File

@ -51,6 +51,7 @@ wxControlContainer::wxControlContainer(wxWindow *winParent)
m_winLastFocused =
m_winTmpDefault =
m_winDefault = NULL;
m_inSetFocus = false;
}
bool wxControlContainer::AcceptsFocus() const
@ -341,6 +342,11 @@ bool wxControlContainer::DoSetFocus()
wxLogTrace(_T("focus"), _T("SetFocus on wxPanel 0x%08lx."),
(unsigned long)m_winParent->GetHandle());
if (m_inSetFocus)
return true;
m_inSetFocus = 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
@ -364,7 +370,11 @@ bool wxControlContainer::DoSetFocus()
win = win->GetParent();
}
return SetFocusToChild();
bool ret = SetFocusToChild();
m_inSetFocus = false;
return ret;
}
void wxControlContainer::HandleOnFocus(wxFocusEvent& event)