X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d90895ac118ad4546eed7ee4c358a3fe644a1ad7..491b5be8305968871bc289453ed088a70c3de044:/src/os2/timer.cpp diff --git a/src/os2/timer.cpp b/src/os2/timer.cpp index bca6302c87..d3c2fdff27 100644 --- a/src/os2/timer.cpp +++ b/src/os2/timer.cpp @@ -31,104 +31,109 @@ #include #include - // ---------------------------------------------------------------------------- // private functions // ---------------------------------------------------------------------------- wxList wxTimerList(wxKEY_INTEGER); -UINT wxTimerProc(HWND hwnd, WORD, int idTimer, DWORD); +ULONG wxTimerProc(HWND hwnd, ULONG, int nIdTimer, ULONG); // ---------------------------------------------------------------------------- // macros // ---------------------------------------------------------------------------- -#if !USE_SHARED_LIBRARY IMPLEMENT_ABSTRACT_CLASS(wxTimer, wxObject) -#endif -wxTimer::wxTimer() +void wxTimer::Init() { - milli = 0 ; - id = 0; - oneShot = FALSE; + m_ulId = 0; } wxTimer::~wxTimer() { Stop(); - + wxTimer::Stop(); wxTimerList.DeleteObject(this); } -bool wxTimer::Start(int milliseconds,bool mode) +bool wxTimer::Start( + int nMilliseconds +, bool bOneShot +) { - oneShot = mode; - if (milliseconds < 0) - milliseconds = lastMilli; - - wxCHECK_MSG( milliseconds > 0, FALSE, wxT("invalid value for timer timeour") ); + (void)wxTimerBase::Start( nMilliseconds + ,bOneShot + ); - lastMilli = milli = milliseconds; + wxCHECK_MSG( m_milli > 0L, FALSE, wxT("invalid value for timer") ); wxTimerList.DeleteObject(this); -// TODO: -/* - TIMERPROC wxTimerProcInst = (TIMERPROC) - MakeProcInstance((FARPROC)wxTimerProc, wxGetInstance()); - - id = SetTimer(NULL, (UINT)(id ? id : 1), - (UINT)milliseconds, wxTimerProcInst); -*/ - if (id > 0) - { - wxTimerList.Append(id, this); - return TRUE; + // + // Create a windowless timer + // + m_ulId = ::WinStartTimer( m_Hab + ,NULL + ,(m_ulId ? m_ulId : 1L) + ,(ULONG)nMilliseconds + ); + if (m_ulId > 0L) + { + wxTimerList.Append( m_ulId + ,this + ); + return(TRUE); } else { wxLogSysError(_("Couldn't create a timer")); - return FALSE; + return(FALSE); } } void wxTimer::Stop() { - if ( id ) + if ( m_ulId ) { -// KillTimer(NULL, (UINT)id); + ::WinStopTimer(m_Hab, NULL, m_ulId); wxTimerList.DeleteObject(this); } - id = 0; - milli = 0; + m_ulId = 0L; } // ---------------------------------------------------------------------------- // private functions // ---------------------------------------------------------------------------- -void wxProcessTimer(wxTimer& timer) +void wxProcessTimer( + wxTimer& rTimer +) { + // // Avoid to process spurious timer events - if ( timer.id == 0) + // + if (rTimer.m_ulId == 0L) return; - if ( timer.oneShot ) - timer.Stop(); + if (rTimer.IsOneShot()) + rTimer.Stop(); - timer.Notify(); + rTimer.Notify(); } -UINT wxTimerProc(HWND WXUNUSED(hwnd), WORD, int idTimer, DWORD) +ULONG wxTimerProc( + HWND WXUNUSED(hwnd) +, ULONG +, int nIdTimer +, ULONG +) { - wxNode *node = wxTimerList.Find((long)idTimer); - - wxCHECK_MSG( node, 0, wxT("bogus timer id in wxTimerProc") ); + wxNode* pNode = wxTimerList.Find((ULONG)nIdTimer); - wxProcessTimer(*(wxTimer *)node->Data()); + wxCHECK_MSG(pNode, 0, wxT("bogus timer id in wxTimerProc") ); + wxProcessTimer(*(wxTimer *)pNode->Data()); return 0; }