]> git.saurik.com Git - wxWidgets.git/commitdiff
recursive tab processing
authorStefan Csomor <csomor@advancedconcepts.ch>
Tue, 13 Apr 2004 05:16:03 +0000 (05:16 +0000)
committerStefan Csomor <csomor@advancedconcepts.ch>
Tue, 13 Apr 2004 05:16:03 +0000 (05:16 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@26729 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/mac/carbon/app.cpp

index bee3132deb1a1dfc04d40ec93aad89fa009a43cb..914bf892d8e4fe594db4377e1b0d4bf16593789b 100644 (file)
@@ -1354,27 +1354,25 @@ bool wxApp::MacSendKeyDownEvent( wxWindow* focus , long keymessage , long modifi
         if ( handled && event.GetSkipped() )
             handled = false ;
     }
-    if ( !handled &&
-         (keyval == WXK_TAB) &&
-// CS: copied the change below from wxGTK
-// VZ: testing for wxTE_PROCESS_TAB shouldn't be done here the control may
-//     have this style, yet choose not to process this particular TAB in which
-//     case TAB must still work as a navigational character
-#if 0
-         (!focus->HasFlag(wxTE_PROCESS_TAB)) &&
-#endif
-         (focus->GetParent()) &&
-         (focus->GetParent()->HasFlag( wxTAB_TRAVERSAL)) )
+    if ( !handled && (keyval == WXK_TAB) )
     {
-        wxNavigationKeyEvent new_event;
-        new_event.SetEventObject( focus );
-        new_event.SetDirection( !event.ShiftDown() );
-        /* CTRL-TAB changes the (parent) window, i.e. switch notebook page */
-        new_event.SetWindowChange( event.ControlDown() );
-        new_event.SetCurrentFocus( focus );
-        handled = focus->GetEventHandler()->ProcessEvent( new_event );
-        if ( handled && new_event.GetSkipped() )
-            handled = false ;
+        wxWindow* iter = focus->GetParent() ;
+        while( iter && !handled )
+        {
+            if ( iter->HasFlag( wxTAB_TRAVERSAL ) )
+            {
+                wxNavigationKeyEvent new_event;
+                new_event.SetEventObject( focus );
+                new_event.SetDirection( !event.ShiftDown() );
+                /* CTRL-TAB changes the (parent) window, i.e. switch notebook page */
+                new_event.SetWindowChange( event.ControlDown() );
+                new_event.SetCurrentFocus( focus );
+                handled = focus->GetParent()->GetEventHandler()->ProcessEvent( new_event );
+                if ( handled && new_event.GetSkipped() )
+                    handled = false ;
+            }
+            iter = iter->GetParent() ;
+        }
     }
     // backdoor handler for default return and command escape
     if ( !handled && (!focus->IsKindOf(CLASSINFO(wxControl) ) || !focus->MacCanFocus() ) )