X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/892b89f3b79a756ba3c278c605b79a6fa377d60f..44d130a35e7973911686d664bcf275a538990d52:/src/os2/timer.cpp diff --git a/src/os2/timer.cpp b/src/os2/timer.cpp index 54c26cbbeb..bb897e1f78 100644 --- a/src/os2/timer.cpp +++ b/src/os2/timer.cpp @@ -42,11 +42,9 @@ ULONG wxTimerProc(HWND hwnd, ULONG, int nIdTimer, ULONG); // macros // ---------------------------------------------------------------------------- -#if !USE_SHARED_LIBRARY IMPLEMENT_ABSTRACT_CLASS(wxTimer, wxObject) -#endif -wxTimer::wxTimer() +void wxTimer::Init() { m_ulId = 0; } @@ -54,10 +52,26 @@ wxTimer::wxTimer() wxTimer::~wxTimer() { Stop(); - + wxTimer::Stop(); wxTimerList.DeleteObject(this); } +void wxTimer::Notify() +{ + // + // The base class version generates an event if it has owner - which it + // should because otherwise nobody can process timer events, but it does + // not use the OS's ID, which OS/2 must have to figure out which timer fired + // + wxCHECK_RET( m_owner, _T("wxTimer::Notify() should be overridden.") ); + + wxTimerEvent vEvent( m_idTimer + ,m_milli + ); + + (void)m_owner->ProcessEvent(vEvent); +} // end of wxTimer::Notify + bool wxTimer::Start( int nMilliseconds , bool bOneShot @@ -71,14 +85,23 @@ bool wxTimer::Start( wxTimerList.DeleteObject(this); - // - // Create a windowless timer - // - m_ulId = ::WinStartTimer( m_Hab - ,NULL - ,(m_ulId ? m_ulId : 1L) - ,(ULONG)nMilliseconds - ); + wxWindow* pWin = NULL; + + if (m_owner) + { + pWin = (wxWindow*)m_owner; + m_ulId = ::WinStartTimer( m_Hab + ,pWin->GetHWND() + ,m_idTimer + ,(ULONG)nMilliseconds + ); + } + else + m_ulId = ::WinStartTimer( m_Hab + ,NULLHANDLE + ,0 + ,(ULONG)nMilliseconds + ); if (m_ulId > 0L) { wxTimerList.Append( m_ulId @@ -98,7 +121,14 @@ void wxTimer::Stop() { if ( m_ulId ) { - ::WinStopTimer(m_Hab, NULL, m_ulId); + if (m_owner) + { + wxWindow* pWin = (wxWindow*)m_owner; + + ::WinStopTimer(m_Hab, pWin->GetHWND(), m_ulId); + } + else + ::WinStopTimer(m_Hab, NULLHANDLE, m_ulId); wxTimerList.DeleteObject(this); } m_ulId = 0L;