X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1ed7a2064a525da8f84f40a1b8779ffcf8d08307..86b8b3ac31b49ba93907c6088aac11ddb54f22bc:/src/msw/timer.cpp diff --git a/src/msw/timer.cpp b/src/msw/timer.cpp index 4193755d71..fae7e00d87 100644 --- a/src/msw/timer.cpp +++ b/src/msw/timer.cpp @@ -118,22 +118,12 @@ IMPLEMENT_DYNAMIC_CLASS(wxTimerHiddenWindowModule, wxModule) // wxMSWTimerImpl class // ---------------------------------------------------------------------------- -wxMSWTimerImpl::wxMSWTimerImpl(wxTimer *timer) -:wxTimerImpl(timer) -{ - m_id = GetNewTimerId(this); -} - -wxMSWTimerImpl::~wxMSWTimerImpl() -{ - TimerMap().erase(m_id); -} - bool wxMSWTimerImpl::Start(int milliseconds, bool oneShot) { if ( !wxTimerImpl::Start(milliseconds, oneShot) ) return false; + m_id = GetNewTimerId(this); // SetTimer() normally returns just idTimer but this might change in the // future so use its return value to be safe UINT_PTR ret = ::SetTimer @@ -157,6 +147,8 @@ bool wxMSWTimerImpl::Start(int milliseconds, bool oneShot) void wxMSWTimerImpl::Stop() { ::KillTimer(wxTimerHiddenWindowModule::GetHWND(), m_id); + TimerMap().erase(m_id); + m_id = 0; } // ---------------------------------------------------------------------------- @@ -181,15 +173,17 @@ LRESULT APIENTRY _EXPORT wxTimerWndProc(HWND hWnd, UINT message, { wxTimerMap::iterator node = TimerMap().find(wParam); - wxCHECK_MSG( node != TimerMap().end(), 0, wxT("bogus timer id in wxTimerProc") ); + if ( node != TimerMap().end() ) + { + wxProcessTimer(*(node->second)); - wxProcessTimer(*(node->second)); - } - else - { - return ::DefWindowProc(hWnd, message, wParam, lParam); + return 0; + } + //else: Unknown timer, probably one of our timers that had fired just + // before being removed from the timers map by Stop(). } - return 0; + + return ::DefWindowProc(hWnd, message, wParam, lParam); } // ----------------------------------------------------------------------------