X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9af42efda6c78093872a67180d43d5eeba261fee..d29505ac70e322732c0259c92dc8667e13cf746d:/src/unix/evtloopunix.cpp diff --git a/src/unix/evtloopunix.cpp b/src/unix/evtloopunix.cpp index 7f27c1c2a2..b439c4d466 100644 --- a/src/unix/evtloopunix.cpp +++ b/src/unix/evtloopunix.cpp @@ -85,14 +85,14 @@ void wxConsoleEventLoop::PipeIOHandler::WakeUp() void wxConsoleEventLoop::PipeIOHandler::OnReadWaiting() { // got wakeup from child thread: read all data available in pipe just to - // make it empty (evevn though we write one byte at a time from WakeUp(), + // make it empty (even though we write one byte at a time from WakeUp(), // it could have been called several times) char buf[4]; for ( ;; ) { const int size = read(GetReadFd(), buf, WXSIZEOF(buf)); - if ( size == 0 || (size == -1 && errno == EAGAIN) ) + if ( size == 0 || (size == -1 && (errno == EAGAIN || errno == EINTR)) ) { // nothing left in the pipe (EAGAIN is expected for an FD with // O_NONBLOCK) @@ -107,7 +107,9 @@ void wxConsoleEventLoop::PipeIOHandler::OnReadWaiting() } } - wxTheApp->ProcessPendingEvents(); + // writing to the wake up pipe will make wxConsoleEventLoop return from + // wxFDIODispatcher::Dispatch() it might be currently blocking in, nothing + // else needs to be done } // =========================================================================== @@ -144,7 +146,17 @@ wxConsoleEventLoop::wxConsoleEventLoop() bool wxConsoleEventLoop::Pending() const { - return wxTheApp->HasPendingEvents(); + if ( m_dispatcher->HasPending() ) + return true; + +#if wxUSE_TIMER + wxUsecClock_t nextTimer; + if ( wxTimerScheduler::Get().GetNext(&nextTimer) && + !wxMilliClockToLong(nextTimer) ) + return true; +#endif // wxUSE_TIMER + + return false; } bool wxConsoleEventLoop::Dispatch() @@ -167,15 +179,13 @@ int wxConsoleEventLoop::DispatchTimeout(unsigned long timeout) } #endif // wxUSE_TIMER - bool hadEvent = m_dispatcher->Dispatch(timeout); + bool hadEvent = m_dispatcher->Dispatch(timeout) > 0; #if wxUSE_TIMER if ( wxTimerScheduler::Get().NotifyExpired() ) hadEvent = true; #endif // wxUSE_TIMER - wxTheApp->ProcessPendingEvents(); - return hadEvent ? 1 : -1; }