- m_value = m_max;
- }
-
- wxScrollEvent event(scrollEvent, m_windowId);
-
- event.SetPosition(m_value);
- event.SetEventObject( this );
- GetEventHandler()->ProcessEvent(event);
+ 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 );
+ }