X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c7bfb76a2cf367dcdbff8f9a97e3250053a1adca..dcb6cbecc890c65e15ade46ca416b4c353bb7e8f:/src/common/containr.cpp diff --git a/src/common/containr.cpp b/src/common/containr.cpp index 2f702e6f1a..06ada8e7a2 100644 --- a/src/common/containr.cpp +++ b/src/common/containr.cpp @@ -316,7 +316,10 @@ wxRadioButton* wxGetSelectedButtonInGroup(wxRadioButton *btn) void wxControlContainer::HandleOnNavigationKey( wxNavigationKeyEvent& event ) { - wxWindow *parent = m_winParent->GetParent(); + // for a TLW we shouldn't involve the parent window, it has nothing to do + // with keyboard navigation inside this TLW + wxWindow *parent = m_winParent->IsTopLevel() ? NULL + : m_winParent->GetParent(); // the event is propagated downwards if the event emitter was our parent bool goingDown = event.GetEventObject() == parent; @@ -496,6 +499,14 @@ void wxControlContainer::HandleOnNavigationKey( wxNavigationKeyEvent& event ) wxWindow *child = node->GetData(); + // don't TAB to another TLW + if ( child->IsTopLevel() ) + { + node = forward ? node->GetNext() : node->GetPrevious(); + + continue; + } + #if defined(__WXMSW__) && wxUSE_RADIOBTN if ( event.IsFromTab() ) { @@ -521,24 +532,27 @@ void wxControlContainer::HandleOnNavigationKey( wxNavigationKeyEvent& event ) wxIsKindOf(m_winLastFocused, wxRadioButton) && !m_winLastFocused->HasFlag(wxRB_SINGLE) ) { + wxRadioButton * const + lastBtn = static_cast(m_winLastFocused); + // cursor keys don't navigate out of a radio button group so // find the correct radio button to focus if ( forward ) { - child = wxGetNextButtonInGroup((wxRadioButton*)m_winLastFocused); + child = wxGetNextButtonInGroup(lastBtn); if ( !child ) { // no next button in group, set it to the first button - child = wxGetFirstButtonInGroup((wxRadioButton*)m_winLastFocused); + child = wxGetFirstButtonInGroup(lastBtn); } } else { - child = wxGetPreviousButtonInGroup((wxRadioButton*)m_winLastFocused); + child = wxGetPreviousButtonInGroup(lastBtn); if ( !child ) { // no previous button in group, set it to the last button - child = wxGetLastButtonInGroup((wxRadioButton*)m_winLastFocused); + child = wxGetLastButtonInGroup(lastBtn); } }