// headers
// ----------------------------------------------------------------------------
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#pragma implementation "univscrarrow.h"
#endif
{ wxUP, wxDOWN }
};
- void (wxRenderer::*pfn)(wxDC&, wxDirection, const wxRect&, int) =
- scrollbarLike ? &wxRenderer::DrawScrollbarArrow
- : &wxRenderer::DrawArrow;
-
- (m_control->GetRenderer()->*pfn)
- (
- dc,
- arrowDirs[m_control->IsVertical()][arrow],
- rect,
- m_control->GetArrowState(arrow)
- );
+ if ( scrollbarLike )
+ m_control->GetRenderer()->DrawScrollbarArrow(
+ dc,
+ arrowDirs[m_control->IsVertical()][arrow],
+ rect,
+ m_control->GetArrowState(arrow));
+ else
+ m_control->GetRenderer()->DrawArrow(
+ dc,
+ arrowDirs[m_control->IsVertical()][arrow],
+ rect,
+ m_control->GetArrowState(arrow));
}
// ----------------------------------------------------------------------------
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
return TRUE;
}
}
- else if ( 1 ) //FIXME: m_control->ShouldPauseScrolling() )
+ else // if ( 1 ) FIXME: m_control->ShouldPauseScrolling() )
{
// we may want to stop it
if ( arrow != m_captureData->m_arrowPressed )
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
}