X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0e16e5c3b40ea20f14e66ac7530766fac19aa983..e77cba1a9c2085b15789bbdc3d38697c4670d2a7:/src/msw/timer.cpp diff --git a/src/msw/timer.cpp b/src/msw/timer.cpp index a82534c492..9442d09a5b 100644 --- a/src/msw/timer.cpp +++ b/src/msw/timer.cpp @@ -38,7 +38,7 @@ // define a hash containing all the timers: it is indexed by timer id and // contains the corresponding timer -WX_DECLARE_HASH_MAP(unsigned long, wxMSWTimerImpl *, wxIntegerHash, wxIntegerEqual, +WX_DECLARE_HASH_MAP(WPARAM, wxMSWTimerImpl *, wxIntegerHash, wxIntegerEqual, wxTimerMap); // instead of using a global here, wrap it in a static function as otherwise it @@ -122,6 +122,11 @@ bool wxMSWTimerImpl::Start(int milliseconds, bool oneShot) // check that SetTimer() didn't reuse an existing id: according to the MSDN // this can happen and this would be catastrophic to us as we rely on ids // uniquely identifying the timers because we use them as keys in the hash + // + // notice that this also happens if the same id is reused for multiple + // timers: this used to work in previous versions but was never supported + // and absolutely shouldn't be done, use wxID_ANY to assign an id to the + // timer automatically or ensure that all your timers have unique ids if ( TimerMap().find(m_id) != TimerMap().end() ) { wxLogError(_("Timer creation failed.")); @@ -168,7 +173,7 @@ LRESULT APIENTRY _EXPORT wxTimerWndProc(HWND hWnd, UINT message, { if ( message == WM_TIMER ) { - wxTimerMap::iterator node = TimerMap().find((unsigned long)wParam); + wxTimerMap::iterator node = TimerMap().find(wParam); wxCHECK_MSG( node != TimerMap().end(), 0, wxT("bogus timer id in wxTimerProc") ); @@ -192,8 +197,10 @@ const wxChar *wxTimerHiddenWindowModule::ms_className = NULL; bool wxTimerHiddenWindowModule::OnInit() { - ms_hwnd = NULL; - ms_className = NULL; + // do not initialize ms_hwnd to ms_className to NULL here: it may happen + // that our GetHWND() is called before the modules are initialized if a + // timer is created from wxApp-derived class ctor and in this case we + // shouldn't overwrite it return true; }