X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/233d6db53af2e70c15836e369013cae56cd6febc..6811c2f3e3e8afc1872280dfd1464565a3ddb306:/src/os2/timer.cpp diff --git a/src/os2/timer.cpp b/src/os2/timer.cpp index 1bd868202c..e01bedb552 100644 --- a/src/os2/timer.cpp +++ b/src/os2/timer.cpp @@ -9,6 +9,10 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// +#ifdef __GNUG__ + #pragma implementation "timer.h" +#endif + // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -51,8 +55,8 @@ void wxTimer::Init() wxTimer::~wxTimer() { - Stop(); wxTimer::Stop(); + wxTimerList.DeleteObject(this); } @@ -65,7 +69,7 @@ void wxTimer::Notify() // wxCHECK_RET( m_owner, _T("wxTimer::Notify() should be overridden.") ); - wxTimerEvent vEvent( m_ulId + wxTimerEvent vEvent( m_idTimer ,m_milli ); @@ -85,14 +89,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 @@ -112,7 +125,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; @@ -148,8 +168,8 @@ ULONG wxTimerProc( wxNode* pNode = wxTimerList.Find((ULONG)nIdTimer); wxCHECK_MSG(pNode, 0, wxT("bogus timer id in wxTimerProc") ); - - wxProcessTimer(*(wxTimer *)pNode->Data()); + if (pNode) + wxProcessTimer(*(wxTimer *)pNode->GetData()); return 0; }