]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/panelg.cpp
fixed the vsprintf() problem once and for all
[wxWidgets.git] / src / generic / panelg.cpp
index 05bd8acb9d9a8eac79905d1eed5ff628f54f2c3f..c26d67adbe789f290627d7ebbea66785ac58d641 100644 (file)
@@ -49,9 +49,10 @@ bool wxPanel::Create(wxWindow *parent, wxWindowID id,
   bool ret = wxWindow::Create(parent, id, pos, size, style, name);
 
   if ( ret ) {
+#ifndef __WXGTK__
     SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE));
-    SetDefaultBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE));
     SetFont(wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT));
+#endif
   }
 
   return ret;
@@ -73,7 +74,6 @@ void wxPanel::SetFocus()
 void wxPanel::OnSysColourChanged(wxSysColourChangedEvent& event)
 {
     SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE));
-    SetDefaultBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE));
     Refresh();
 
     // Propagate the event to the non-top-level children
@@ -93,7 +93,7 @@ void wxPanel::OnNavigationKey(wxNavigationKeyEvent& event)
   wxWindow *winFocus = event.GetCurrentFocus();
   
   // @@@ no FindFocus() in wxGTK
-  #ifndef __GTK__
+  #ifndef __WXGTK__
     if ( winFocus == NULL )
       winFocus = wxWindow::FindFocus();
   #endif
@@ -112,9 +112,6 @@ void wxPanel::OnNavigationKey(wxNavigationKeyEvent& event)
 // set focus to the next child which accepts it (or first/last if node == NULL)
 bool wxPanel::SetFocusToNextChild(wxNode *node, bool bForward)
 {
-       // Added by JACS since this seems to cause an infinite loop.
-       return FALSE;
-
   // @@ using typed list would be better...
   #define WIN(node) ((wxWindow *)(node->Data()))
 
@@ -131,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;
@@ -151,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();
     }
@@ -164,3 +173,4 @@ bool wxPanel::SetFocusToNextChild(wxNode *node, bool bForward)
 
   return TRUE;
 }
+