+void wxSpinButton::MacHandleValueChanged( int inc )
+{
+ wxEventType scrollEvent = wxEVT_NULL;
+ int oldValue = m_value;
+
+ m_value = oldValue + inc;
+
+ if (m_value < m_min)
+ {
+ if ( m_windowStyle & wxSP_WRAP )
+ m_value = m_max;
+ else
+ m_value = m_min;
+ }
+
+ if (m_value > m_max)
+ {
+ if ( m_windowStyle & wxSP_WRAP )
+ m_value = m_min;
+ else
+ m_value = m_max;
+ }
+
+ if ( m_value - oldValue == -1 )
+ scrollEvent = wxEVT_SCROLL_LINEDOWN;
+ else if ( m_value - oldValue == 1 )
+ scrollEvent = wxEVT_SCROLL_LINEUP;
+ else
+ scrollEvent = wxEVT_SCROLL_THUMBTRACK;
+
+ // Do not send an event if the value has not actually changed
+ // (Also works for wxSpinCtrl)
+ if ( m_value == oldValue )
+ return;
+
+ wxSpinEvent event( scrollEvent, m_windowId );
+
+ event.SetPosition( m_value );
+ event.SetEventObject( this );
+ if ((GetEventHandler()->ProcessEvent( event )) && !event.IsAllowed())
+ m_value = oldValue;
+
+ m_peer->SetValue( m_value );
+
+ // always send a thumbtrack event
+ if (scrollEvent != wxEVT_SCROLL_THUMBTRACK)
+ {
+ scrollEvent = wxEVT_SCROLL_THUMBTRACK;
+ wxSpinEvent event2( scrollEvent, GetId() );
+ event2.SetPosition( m_value );
+ event2.SetEventObject( this );
+ GetEventHandler()->ProcessEvent( event2 );
+ }
+}