X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/76a5e5d21ee1a6230d777ce0209b2df4c6075f0f..6d6da89ccb7a6aae5cfefe66147a7055ab0854d6:/src/mac/timer.cpp diff --git a/src/mac/timer.cpp b/src/mac/timer.cpp index e2693c3e8a..debf409696 100644 --- a/src/mac/timer.cpp +++ b/src/mac/timer.cpp @@ -22,6 +22,11 @@ IMPLEMENT_ABSTRACT_CLASS(wxTimer, wxObject) #ifdef __WXMAC__ #include "wx/mac/private.h" #endif +#ifndef __DARWIN__ +#include +#endif + +#include "wx/dynarray.h" typedef struct MacTimerInfo { @@ -38,20 +43,33 @@ static pascal void MacTimerProc( TMTask * t ) wxMacAddEvent( tm->m_table , wxProcessTimer, 0 , (void*) tm->m_timer , TRUE ) ; } +wxArrayPtrVoid gTimersInProcess ; + static void wxProcessTimer( unsigned long event , void *data ) { if ( !data ) return ; wxTimer* timer = (wxTimer*) data ; + if ( timer->IsOneShot() ) timer->Stop() ; + gTimersInProcess.Add( timer ) ; + timer->Notify(); - if ( timer->m_info->m_task.tmAddr && !timer->IsOneShot() ) + int index = gTimersInProcess.Index( timer ) ; + + if ( index != wxNOT_FOUND ) { - PrimeTime( (QElemPtr) &timer->m_info->m_task , timer->GetInterval() ) ; + gTimersInProcess.RemoveAt( index ) ; + + if ( !timer->IsOneShot() && timer->m_info->m_task.tmAddr ) + { + PrimeTime( (QElemPtr) &timer->m_info->m_task , timer->GetInterval() ) ; + } + } } @@ -76,6 +94,9 @@ wxTimer::~wxTimer() Stop(); delete m_info ; m_info = NULL ; + int index = gTimersInProcess.Index( this ) ; + if ( index != wxNOT_FOUND ) + gTimersInProcess.RemoveAt( index ) ; } bool wxTimer::Start(int milliseconds,bool mode)