X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0e04ef47f695b057dfe4c907e63497ae7ff05572..4cae9a20a89d127601f68873681cfdaa7fe484d5:/src/gtk/app.cpp diff --git a/src/gtk/app.cpp b/src/gtk/app.cpp index 20050e11b6..a1bdce64aa 100644 --- a/src/gtk/app.cpp +++ b/src/gtk/app.cpp @@ -42,7 +42,9 @@ #endif #include -#ifdef __VMS +#if defined(__DARWIN__) +// FIXME: select must be used instead of poll (GD) +#elif defined(__VMS) # include #else # include @@ -245,7 +247,14 @@ static gint wxapp_poll_func( GPollFD *ufds, guint nfds, gint timeout ) wxMutexGuiLeave(); g_mainThreadLocked = TRUE; +#ifdef __DARWIN__ + // FIXME: poll is not available under Darwin/Mac OS X and this needs + // to be implemented using select instead (GD) + // what about other BSD derived systems? + res = -1; +#else res = poll( (struct pollfd*) ufds, nfds, timeout ); +#endif wxMutexGuiEnter(); g_mainThreadLocked = FALSE; @@ -486,12 +495,37 @@ bool wxApp::SendIdleEvents() wxWindow* win = node->GetData(); if (SendIdleEvents(win)) needMore = TRUE; + node = node->GetNext(); } + node = wxTopLevelWindows.GetFirst(); + while (node) + { + wxWindow* win = node->GetData(); + CallInternalIdle( win ); + + node = node->GetNext(); + } return needMore; } +bool wxApp::CallInternalIdle( wxWindow* win ) +{ + win->OnInternalIdle(); + + wxNode* node = win->GetChildren().First(); + while (node) + { + wxWindow* win = (wxWindow*) node->Data(); + CallInternalIdle( win ); + + node = node->Next(); + } + + return TRUE; +} + bool wxApp::SendIdleEvents( wxWindow* win ) { bool needMore = FALSE; @@ -501,8 +535,6 @@ bool wxApp::SendIdleEvents( wxWindow* win ) win->GetEventHandler()->ProcessEvent(event); - win->OnInternalIdle(); - if (event.MoreRequested()) needMore = TRUE;