{
wxScrollEvent event( evtType, win->GetId(), value, orient );
event.SetEventObject( win );
- win->GetEventHandler()->ProcessEvent( event );
+ win->HandleWindowEvent( event );
}
// but, in any case, except if we're dragging the slider (and so the change
{
wxScrollEvent event(wxEVT_SCROLL_CHANGED, win->GetId(), value, orient);
event.SetEventObject( win );
- win->GetEventHandler()->ProcessEvent( event );
+ win->HandleWindowEvent( event );
}
// and also generate a command event for compatibility
wxCommandEvent event( wxEVT_COMMAND_SLIDER_UPDATED, win->GetId() );
event.SetEventObject( win );
event.SetInt( value );
- win->GetEventHandler()->ProcessEvent( event );
+ win->HandleWindowEvent( event );
}
static inline wxEventType GtkScrollTypeToWx(int scrollType)
wxSlider::wxSlider()
{
m_pos = 0;
- m_scrollEventType = 0;
+ m_scrollEventType = GTK_SCROLL_NONE;
m_needThumbRelease = false;
m_blockScrollEvent = false;
}
const wxValidator& validator,
const wxString& name)
{
+ m_pos = value;
+ m_scrollEventType = GTK_SCROLL_NONE;
+
if (!PreCreation( parent, pos, size ) ||
!CreateBase( parent, id, pos, size, style, validator, name ))
{
g_signal_connect(m_widget, "move_slider", G_CALLBACK(gtk_move_slider), this);
g_signal_connect(m_widget, "format_value", G_CALLBACK(gtk_format_value), NULL);
g_signal_connect(m_widget, "value_changed", G_CALLBACK(gtk_value_changed), this);
- gulong handler_id;
- handler_id = g_signal_connect(
- m_widget, "event_after", G_CALLBACK(gtk_event_after), this);
+ gulong handler_id = g_signal_connect(m_widget, "event_after", G_CALLBACK(gtk_event_after), this);
g_signal_handler_block(m_widget, handler_id);
SetRange( minValue, maxValue );
- SetValue( value );
+
+ // don't call the public SetValue() as it won't do anything unless the
+ // value really changed
+ GTKSetValue( value );
m_parent->DoAddChild( this );
void wxSlider::SetValue( int value )
{
if (GetValue() != value)
- {
- m_blockScrollEvent = true;
- gtk_range_set_value(GTK_RANGE (m_widget), value);
- m_blockScrollEvent = false;
- }
+ GTKSetValue(value);
+}
+
+void wxSlider::GTKSetValue(int value)
+{
+ m_blockScrollEvent = true;
+ gtk_range_set_value(GTK_RANGE (m_widget), value);
+ m_blockScrollEvent = false;
}
void wxSlider::SetRange( int minValue, int maxValue )
{
m_blockScrollEvent = true;
+ if (minValue == maxValue)
+ maxValue++;
gtk_range_set_range(GTK_RANGE (m_widget), minValue, maxValue);
gtk_range_set_increments(GTK_RANGE (m_widget), 1, (maxValue - minValue + 9) / 10);
m_blockScrollEvent = false;