X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/90c3bdac77fac8f7c788d6df93eaca01af825557..c9d9f242e45a5d8399d52f5709b560a63dd804fc:/src/generic/panelg.cpp diff --git a/src/generic/panelg.cpp b/src/generic/panelg.cpp index 809cb7c569..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 @@ -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,5 @@ bool wxPanel::SetFocusToNextChild(wxNode *node, bool bForward) #undef WIN return TRUE; -} \ No newline at end of file +} +