X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8b9518ee4a9cb8f6d4934afaed07aea011ec5ab1..a38b83c353cce75329b2c53c0eaa4ad0f500ccf1:/src/generic/panelg.cpp diff --git a/src/generic/panelg.cpp b/src/generic/panelg.cpp index 05bd8acb9d..c26d67adbe 100644 --- a/src/generic/panelg.cpp +++ b/src/generic/panelg.cpp @@ -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; } +