Send EVT_SPIN_UP/DOWN events also when wxSpinButton value wraps around (wxOSX)

EVT_SPIN events should be sent at every value change, not only if it's changed by +/- 1.

See #17957.
This commit is contained in:
Artur Wieczorek 2017-09-22 15:28:12 +02:00
parent 3d5e84b229
commit a9843a7492
2 changed files with 18 additions and 21 deletions

View File

@ -78,11 +78,13 @@ public:
@beginEventEmissionTable{wxSpinEvent} @beginEventEmissionTable{wxSpinEvent}
@event{EVT_SPIN(id, func)} @event{EVT_SPIN(id, func)}
Generated whenever an arrow is pressed. Generated whenever pressing an arrow changed the spin button value.
@event{EVT_SPIN_UP(id, func)} @event{EVT_SPIN_UP(id, func)}
Generated when left/up arrow is pressed. Generated whenever pressing left/up arrow changed the spin button
value.
@event{EVT_SPIN_DOWN(id, func)} @event{EVT_SPIN_DOWN(id, func)}
Generated when right/down arrow is pressed. Generated whenever pressing right/down arrow changed the spin
button value.
@endEventTable @endEventTable
Note that if you handle both SPIN and UP or DOWN events, you will be notified Note that if you handle both SPIN and UP or DOWN events, you will be notified

View File

@ -96,6 +96,10 @@ void wxSpinButton::TriggerScrollEvent(wxEventType scrollEvent)
{ {
inc = -1; inc = -1;
} }
else
{
wxFAIL_MSG( "Unexpected event" );
}
// trigger scroll events // trigger scroll events
@ -119,32 +123,23 @@ void wxSpinButton::TriggerScrollEvent(wxEventType scrollEvent)
newValue = m_max; newValue = m_max;
} }
if ( newValue - oldValue == -1 )
scrollEvent = wxEVT_SCROLL_LINEDOWN;
else if ( newValue - oldValue == 1 )
scrollEvent = wxEVT_SCROLL_LINEUP;
else
scrollEvent = wxEVT_SCROLL_THUMBTRACK;
// Do not send an event if the value has not actually changed // Do not send an event if the value has not actually changed
// (Also works for wxSpinCtrl) // (Also works for wxSpinCtrl)
if ( newValue == oldValue ) if ( newValue == oldValue )
return; return;
if ( scrollEvent != wxEVT_SCROLL_THUMBTRACK ) wxSpinEvent event( scrollEvent, m_windowId );
{
wxSpinEvent event( scrollEvent, m_windowId );
event.SetPosition( newValue ); event.SetPosition( newValue );
event.SetEventObject( this ); event.SetEventObject( this );
if ((HandleWindowEvent( event )) && !event.IsAllowed()) if ((HandleWindowEvent( event )) && !event.IsAllowed())
newValue = oldValue; newValue = oldValue;
}
GetPeer()->SetValue( newValue ); SetValue( newValue );
// always send a thumbtrack event // send a thumbtrack event if EVT_SPIN_UP/DOWN wasn't vetoed
SendThumbTrackEvent() ; if ( newValue != oldValue )
SendThumbTrackEvent() ;
} }
#endif // wxUSE_SPINBTN #endif // wxUSE_SPINBTN