X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1d043598b7e6baae2e0a472a4133b8d60f0f45ec..437a8892a107139e9f808f0a11792a56a55b4e25:/src/unix/timerunx.cpp diff --git a/src/unix/timerunx.cpp b/src/unix/timerunx.cpp index 158736fcb3..d6ee503df5 100644 --- a/src/unix/timerunx.cpp +++ b/src/unix/timerunx.cpp @@ -134,10 +134,12 @@ bool wxTimerScheduler::GetNext(wxUsecClock_t *remaining) const return true; } -void wxTimerScheduler::NotifyExpired() +bool wxTimerScheduler::NotifyExpired() { if ( m_timers.empty() ) - return; + return false; + + bool notified = false; const wxUsecClock_t now = wxGetLocalTimeUsec(); @@ -172,13 +174,20 @@ void wxTimerScheduler::NotifyExpired() } else // reschedule the next timer expiration { - s->m_expiration += timer->GetInterval()*1000; + // always keep the expiration time in the future, i.e. base it on + // the current time instead of just offsetting it from the current + // expiration time because it could happen that we're late and the + // current expiration time is (far) in the past + s->m_expiration = now + timer->GetInterval()*1000; DoAddTimer(s); } // and finally notify the timer timer->Notify(); + notified = true; } + + return notified; } // ============================================================================