- return (int)(m_adjust->upper+0.5);
-};
-
-void wxScrollBar::SetPosition( const int viewStart )
-{
- float fpos = (float)viewStart;
- m_oldPos = fpos;
- if (fabs(fpos-m_adjust->value) < 0.2) return;
- m_adjust->value = fpos;
-
- gtk_signal_emit_by_name( GTK_OBJECT(m_adjust), "value_changed" );
-};
-
-void wxScrollBar::SetScrollbar( const int position, const int thumbSize, const int range, const int pageSize,
- const bool WXUNUSED(refresh) )
-{
- float fpos = (float)position;
- m_oldPos = fpos;
- float frange = (float)range;
- float fthumb = (float)thumbSize;
- float fpage = (float)pageSize;
-
- if ((fabs(fpos-m_adjust->value) < 0.2) &&
- (fabs(frange-m_adjust->upper) < 0.2) &&
- (fabs(fthumb-m_adjust->page_size) < 0.2) &&
- (fabs(fpage-m_adjust->page_increment) < 0.2))
- return;
-
- m_adjust->lower = 0.0;
- m_adjust->upper = frange;
- m_adjust->value = fpos;
- m_adjust->step_increment = 1.0;
- m_adjust->page_increment = (float)(wxMax(fpage-2,0));
- m_adjust->page_size = fthumb;
-
- gtk_signal_emit_by_name( GTK_OBJECT(m_adjust), "changed" );
-};
-
-// Backward compatibility
-int wxScrollBar::GetValue(void) const
-{
- return GetPosition();
-};
-
-void wxScrollBar::SetValue( const int viewStart )
-{
- SetPosition( viewStart );
-};
+ return (int)(m_adjust->upper+0.5);
+}
+
+void wxScrollBar::SetThumbPosition( int viewStart )
+{
+ if (m_isScrolling) return;
+
+ float fpos = (float)viewStart;
+ m_oldPos = fpos;
+ if (fabs(fpos-m_adjust->value) < 0.2) return;
+ m_adjust->value = fpos;
+
+ gtk_signal_disconnect_by_func( GTK_OBJECT(m_adjust),
+ (GtkSignalFunc) gtk_scrollbar_callback,
+ (gpointer) this );
+
+ gtk_signal_emit_by_name( GTK_OBJECT(m_adjust), "value_changed" );
+
+ gtk_signal_connect( GTK_OBJECT(m_adjust),
+ "value_changed",
+ (GtkSignalFunc) gtk_scrollbar_callback,
+ (gpointer) this );
+}
+
+void wxScrollBar::SetScrollbar( int position, int thumbSize, int range, int pageSize,
+ bool WXUNUSED(refresh) )
+{
+ float fpos = (float)position;
+ float frange = (float)range;
+ float fthumb = (float)thumbSize;
+ float fpage = (float)pageSize;
+
+ if ((fabs(frange-m_adjust->upper) < 0.2) &&
+ (fabs(fthumb-m_adjust->page_size) < 0.2) &&
+ (fabs(fpage-m_adjust->page_increment) < 0.2))
+ {
+ SetThumbPosition( position );
+ return;
+ }
+
+ m_oldPos = fpos;
+
+ m_adjust->lower = 0.0;
+ m_adjust->upper = frange;
+ m_adjust->value = fpos;
+ m_adjust->step_increment = 1.0;
+ m_adjust->page_increment = (float)(wxMax(fpage,0));
+ m_adjust->page_size = fthumb;
+
+ gtk_signal_emit_by_name( GTK_OBJECT(m_adjust), "changed" );
+}
+
+/* Backward compatibility */
+int wxScrollBar::GetValue() const
+{
+ return GetThumbPosition();
+}
+
+void wxScrollBar::SetValue( int viewStart )
+{
+ SetThumbPosition( viewStart );
+}