]> git.saurik.com Git - wxWidgets.git/commitdiff
Added workaround for wxGTK tab traversal problem
authorJaakko Salli <jaakko.salli@dnainternet.net>
Tue, 21 Oct 2008 14:35:17 +0000 (14:35 +0000)
committerJaakko Salli <jaakko.salli@dnainternet.net>
Tue, 21 Oct 2008 14:35:17 +0000 (14:35 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@56479 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/propgrid/propgrid.cpp

index 4e790e752528c0ee84bf3220d2d35694f979265d..a7522f7c1652739632fac724cacb46e83ab45fe5 100644 (file)
@@ -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;