]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/panelg.cpp
Turned wxIcon inline constructors to real constructors
[wxWidgets.git] / src / generic / panelg.cpp
index 809cb7c569b8a92ab59fba655d0e58b79539b393..c58841ba5c0f1e91058699e185114bdf158837d1 100644 (file)
@@ -91,8 +91,13 @@ void wxPanel::OnNavigationKey(wxNavigationKeyEvent& event)
   // first of all, find the window which currently has the focus
   wxNode *node = GetChildren()->First();
   wxWindow *winFocus = event.GetCurrentFocus();
-  if ( winFocus == NULL )
-    winFocus = wxWindow::FindFocus();
+  
+  // @@@ no FindFocus() in wxGTK
+  #ifndef __WXGTK__
+    if ( winFocus == NULL )
+      winFocus = wxWindow::FindFocus();
+  #endif
+  
   while ( node != NULL ) {
     if ( node->Data() == winFocus )
       break;
@@ -123,15 +128,24 @@ bool wxPanel::SetFocusToNextChild(wxNode *node, bool bForward)
 
     bFound = WIN(node)->AcceptsFocus();
   }
+#if 0 // to restore when it will really work (now it's triggered all the time)
   else {
     // just to be sure it's the right one
     wxASSERT( WIN(node)->AcceptsFocus() );
   }
+#endif // 0
 
   // find the next child which accepts focus
+  bool bParentWantsIt = TRUE;
   while ( !bFound ) {
     node = bForward ? node->Next() : node->Previous();
     if ( node == NULL ) {
+      if ( !bParentWantsIt ) {
+        // we've already been here which means that we've done a whole
+        // cycle without success - get out from the infinite loop
+        return FALSE;
+      }
+
       // ask parent if he doesn't want to advance focus to the next panel
       if ( GetParent() != NULL ) {
         wxNavigationKeyEvent event;
@@ -143,6 +157,9 @@ bool wxPanel::SetFocusToNextChild(wxNode *node, bool bForward)
           return TRUE;
       }
 
+      // a sentinel to avoid infinite loops
+      bParentWantsIt = FALSE;
+
       // wrap around
       node = bForward ? children->First() : children->Last();
     }
@@ -155,4 +172,4 @@ bool wxPanel::SetFocusToNextChild(wxNode *node, bool bForward)
   #undef WIN
 
   return TRUE;
-}
\ No newline at end of file
+}