From b50e81c696f97c5ca8c4d1375cb79fc2192a57e2 Mon Sep 17 00:00:00 2001 From: Jaakko Salli Date: Tue, 21 Oct 2008 14:35:17 +0000 Subject: [PATCH] Added workaround for wxGTK tab traversal problem git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@56479 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/propgrid/propgrid.cpp | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/src/propgrid/propgrid.cpp b/src/propgrid/propgrid.cpp index 4e790e7525..a7522f7c16 100644 --- a/src/propgrid/propgrid.cpp +++ b/src/propgrid/propgrid.cpp @@ -4963,19 +4963,51 @@ void wxPropertyGrid::HandleKeyEvent( wxKeyEvent &event, bool fromChild ) if ( keycode == WXK_TAB ) { + wxWindow* mainControl; + + if ( HasInternalFlag(wxPG_FL_IN_MANAGER) ) + mainControl = GetParent(); + else + mainControl = this; + if ( !event.ShiftDown() ) { if ( !editorFocused && m_wndEditor ) + { DoSelectProperty( m_selected, wxPG_SEL_FOCUS ); + } else + { + // Tab traversal workaround for platforms on which + // wxWindow::Navigate() may navigate into first child + // instead of next sibling. Does not work perfectly + // in every scenario (for instance, when property grid + // is either first or last control). + #if defined(__WXGTK__) + wxWindow* sibling = mainControl->GetNextSibling(); + if ( sibling ) + sibling->SetFocusFromKbd(); + #else Navigate(wxNavigationKeyEvent::IsForward); + #endif + } } else { if ( editorFocused ) + { UnfocusEditor(); + } else + { + #if defined(__WXGTK__) + wxWindow* sibling = mainControl->GetPrevSibling(); + if ( sibling ) + sibling->SetFocusFromKbd(); + #else Navigate(wxNavigationKeyEvent::IsBackward); + #endif + } } return; -- 2.45.2