ProcessScrollEvent(win, wxEVT_SCROLL_THUMBRELEASE);
}
// Keep slider at an integral position
- win->BlockScrollEvent();
+ win->m_blockScrollEvent = true;
gtk_range_set_value(GTK_RANGE (win->m_widget), win->GetValue());
- win->UnblockScrollEvent();
+ win->m_blockScrollEvent = false;
}
}
}
wxSlider::wxSlider()
{
m_pos = 0;
- m_scrollEventType = 0;
+ m_scrollEventType = GTK_SCROLL_NONE;
m_needThumbRelease = false;
+ m_blockScrollEvent = false;
}
bool wxSlider::Create(wxWindow *parent,
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 ))
{
return false;
}
- m_pos = 0;
- m_scrollEventType = 0;
- m_needThumbRelease = false;
-
if (style & wxSL_VERTICAL)
m_widget = gtk_vscale_new( (GtkAdjustment *) NULL );
else
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)
- {
- BlockScrollEvent();
- gtk_range_set_value(GTK_RANGE (m_widget), value);
- UnblockScrollEvent();
- }
+ 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 )
{
- BlockScrollEvent();
+ m_blockScrollEvent = true;
gtk_range_set_range(GTK_RANGE (m_widget), minValue, maxValue);
gtk_range_set_increments(GTK_RANGE (m_widget), 1, (maxValue - minValue + 9) / 10);
- UnblockScrollEvent();
+ m_blockScrollEvent = false;
}
int wxSlider::GetMin() const
void wxSlider::SetPageSize( int pageSize )
{
- BlockScrollEvent();
+ m_blockScrollEvent = true;
gtk_range_set_increments(GTK_RANGE (m_widget), GetLineSize(), pageSize);
- UnblockScrollEvent();
+ m_blockScrollEvent = false;
}
int wxSlider::GetPageSize() const
void wxSlider::SetLineSize( int lineSize )
{
- BlockScrollEvent();
+ m_blockScrollEvent = true;
gtk_range_set_increments(GTK_RANGE (m_widget), lineSize, GetPageSize());
- UnblockScrollEvent();
+ m_blockScrollEvent = false;
}
int wxSlider::GetLineSize() const