From: Vadim Zeitlin Date: Wed, 9 Jul 2003 21:38:05 +0000 (+0000) Subject: fixed crash in wxSpinButton (patch 646214) X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/f9bd9677e8ae8ed41622478b1e6fd3d834db19e1 fixed crash in wxSpinButton (patch 646214) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@21812 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/univ/scrarrow.cpp b/src/univ/scrarrow.cpp index 22f42060b7..48d669cf0d 100644 --- a/src/univ/scrarrow.cpp +++ b/src/univ/scrarrow.cpp @@ -170,7 +170,7 @@ bool wxScrollArrows::HandleMouseMove(const wxMouseEvent& event) const arrow = m_control->HitTest(event.GetPosition()); } - if ( m_captureData ) + if ( m_captureData && m_captureData->m_timerScroll) { // the mouse is captured, we may want to pause scrolling if it goes // outside the arrow or to resume it if we had paused it before @@ -246,11 +246,23 @@ bool wxScrollArrows::HandleMouse(const wxMouseEvent& event) const m_captureData->m_window = m_control->GetWindow(); m_captureData->m_window->CaptureMouse(); - // start scrolling - m_captureData->m_timerScroll = + // start scrolling + wxScrollArrowTimer *tmpTimerScroll = new wxScrollArrowTimer(m_control, arrow); - m_control->SetArrowFlag(arrow, wxCONTROL_PRESSED, TRUE); + // Because in some cases wxScrollArrowTimer can cause + // m_captureData to be destructed we need to test if it + // is still valid before using. + if (m_captureData) + { + m_captureData->m_timerScroll = tmpTimerScroll; + + m_control->SetArrowFlag(arrow, wxCONTROL_PRESSED, TRUE); + } + else + { + delete tmpTimerScroll; + } } //else: mouse already captured, nothing to do }