]> git.saurik.com Git - wxWidgets.git/commitdiff
fixed crash in wxSpinButton (patch 646214)
authorVadim Zeitlin <vadim@wxwidgets.org>
Wed, 9 Jul 2003 21:38:05 +0000 (21:38 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Wed, 9 Jul 2003 21:38:05 +0000 (21:38 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@21812 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/univ/scrarrow.cpp

index 22f42060b7892644308dd1f6d2c4a42916a36d3f..48d669cf0d928bbbc197f50712b3a9b7e8b970d7 100644 (file)
@@ -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
     }