diff --git a/vcl/source/window/dlgctrl.cxx b/vcl/source/window/dlgctrl.cxx index 4394513..5b76d78 100644 --- a/vcl/source/window/dlgctrl.cxx +++ b/vcl/source/window/dlgctrl.cxx @@ -848,7 +848,43 @@ bool Window::ImplDlgCtrl( const KeyEvent& rKEvt, bool bKeyInput ) nType = GetDlgWindowType::Next; nGetFocusFlags |= GetFocusFlags::Forward; } +SAL_WARN("DEBUG","--- Calling ImplGetDlgWindow giving index["<GetType() == WindowType::RADIOBUTTON && nLastIndex != nNewIndex && i != nNewIndex ) + { + RadioButton* pRadio = static_cast(pWindow); + std::vector > aGroup(pRadio->GetRadioButtonGroup(/*bIncludeThis=*/false)); +SAL_WARN("DEBUG","--- next window is radiobox. i["<IsRadioCheckEnabled()<<"] isChecked?["<IsChecked()<<"]"); + + if ( !aGroup.size() ) //only one button in group + break; + + if ( pRadio->IsChecked() ) + break; + + nLastIndex = nNewIndex; + vcl::Window* pLastWindow = pWindow; + pWindow = ImplGetDlgWindow( nNewIndex, nType, nFormStart, nFormEnd, &nNewIndex ); +SAL_WARN("DEBUG","------ next window["<GetType() == WindowType::RADIOBUTTON )<<"] NewIndex["<GetType() == WindowType::RADIOBUTTON ) + { + pRadio = static_cast(pWindow); + auto aMember(std::find(aGroup.begin(), aGroup.end(), VclPtr(pRadio))); +SAL_WARN("DEBUG","------ next radiobutton isMember["<<(aMember != aGroup.end())<<"] isChecked["<IsChecked()<<"]"); + if (aMember == aGroup.end()) + pWindow = nullptr; + } + else + pWindow = nullptr; + + if ( !pWindow ) + { + pWindow = pLastWindow; + nNewIndex = nLastIndex; + } + } +SAL_WARN("DEBUG","---selected window index["<