X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/80332672ab36153aa2424cff2a06b434287488c8..7d10ec93c4b0c4db9d4450bc39c6c127bfab57fe:/src/common/containr.cpp diff --git a/src/common/containr.cpp b/src/common/containr.cpp index bbc5d48b61..16fda35e9d 100644 --- a/src/common/containr.cpp +++ b/src/common/containr.cpp @@ -75,10 +75,8 @@ bool wxControlContainerBase::ShouldAcceptFocus() const wxWindow *child = node->GetData(); node = node->GetNext(); -#ifdef __WXMAC__ - if ( m_winParent->MacIsWindowScrollbar( child ) ) + if ( !m_winParent->IsClientAreaChild(child) ) continue; -#endif if ( child->CanAcceptFocus() ) return false; @@ -141,12 +139,16 @@ void wxControlContainer::SetLastFocus(wxWindow *win) } // propagate the last focus upwards so that our parent can set focus back - // to us if it loses it now and regains later - wxWindow *parent = m_winParent->GetParent(); - if ( parent ) + // to us if it loses it now and regains later; do *not* do this if we are + // a toplevel window (e.g. wxDialog) that has another frame as its parent + if ( !m_winParent->IsTopLevel() ) { - wxChildFocusEvent eventFocus(m_winParent); - parent->GetEventHandler()->ProcessEvent(eventFocus); + wxWindow *parent = m_winParent->GetParent(); + if ( parent ) + { + wxChildFocusEvent eventFocus(m_winParent); + parent->GetEventHandler()->ProcessEvent(eventFocus); + } } } @@ -654,11 +656,10 @@ bool wxSetFocusToChild(wxWindow *win, wxWindow **childLastFocused) wxWindow *child = node->GetData(); node = node->GetNext(); -#ifdef __WXMAC__ - if ( child->GetParent()->MacIsWindowScrollbar( child ) ) + // skip special windows: + if ( !win->IsClientAreaChild(child) ) continue; -#endif - + if ( child->CanAcceptFocusFromKeyboard() && !child->IsTopLevel() ) { #ifdef __WXMSW__