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:
parent
422a142bc2
commit
b33f7651ae
@ -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)
|
||||
};
|
||||
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user