X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c9d59ee7e0cbe4acae6153adafb5ddce9a4e65dd..4c420a80e0fb11511b235411875ba5d3e0eb8492:/src/common/containr.cpp?ds=sidebyside diff --git a/src/common/containr.cpp b/src/common/containr.cpp index 3d55aa14a9..84ca21a7cc 100644 --- a/src/common/containr.cpp +++ b/src/common/containr.cpp @@ -40,6 +40,10 @@ #include "wx/scrolbar.h" #endif +#ifdef __WXMSW__ + #include "wx/radiobut.h" +#endif + // ============================================================================ // implementation // ============================================================================ @@ -287,13 +291,50 @@ void wxControlContainer::HandleOnNavigationKey( wxNavigationKeyEvent& event ) wxWindow *child = node->GetData(); - if ( child->AcceptsFocusFromKeyboard() ) +#ifdef __WXMSW__ + bool is_not_msw_rb = !m_winLastFocused || + !wxIsKindOf(m_winLastFocused,wxRadioButton); +#else + static const bool is_not_msw_rb = true; +#endif + + if ( child->AcceptsFocusFromKeyboard() && is_not_msw_rb ) { // if we're setting the focus to a child panel we should prevent it // from giving it to the child which had the focus the last time // and instead give it to the first/last child depending from which // direction we're coming event.SetEventObject(m_winParent); + +#ifdef __WXMSW__ + // we need to hop to the next activated + // radio button, not just the next radio + // button under MSW + if (wxIsKindOf(child,wxRadioButton)) + { + wxRadioButton *rb = (wxRadioButton*) child; + if (!rb->GetValue()) + { + for (;;) + { + wxWindowList::compatibility_iterator node = children.Find( child ); + if (forward) + node = node->GetNext(); + else + node = node->GetPrevious(); + if (!node) + return; // this would probably an error + child = node->GetData(); + if (!wxIsKindOf(child,wxRadioButton)) + continue; + rb = (wxRadioButton*) child; + if (rb->GetValue()) + break; + } + } + } +#endif // __WXMSW__ + // disable propagation for this call as otherwise the event might // bounce back to us. wxPropagationDisabler disableProp(event);