X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/aef35d0ef526c24dc4e7ff765e5f93304dc02df6..dc302518e6bf48326d202475bf78874fedcb2d9c:/src/common/containr.cpp diff --git a/src/common/containr.cpp b/src/common/containr.cpp index 368cee065d..4c3b90575d 100644 --- a/src/common/containr.cpp +++ b/src/common/containr.cpp @@ -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,16 @@ bool wxControlContainer::DoSetFocus() wxLogTrace(_T("focus"), _T("SetFocus on wxPanel 0x%08lx."), (unsigned long)m_winParent->GetHandle()); + // FIXME: this recursion protection is needed for wxMac, + // but on Windows (at least), it breaks focus handling. + // This needs to be investigated further. +#ifdef __WXMAC__ + if (m_inSetFocus) + return true; +#endif + + 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 @@ -351,7 +362,8 @@ bool wxControlContainer::DoSetFocus() if ( win == m_winParent ) { // our child already has focus, don't take it away from it - return TRUE; + m_inSetFocus = false; + return true; } if ( win->IsTopLevel() ) @@ -364,7 +376,11 @@ bool wxControlContainer::DoSetFocus() win = win->GetParent(); } - return SetFocusToChild(); + bool ret = SetFocusToChild(); + + m_inSetFocus = false; + + return ret; } void wxControlContainer::HandleOnFocus(wxFocusEvent& event)