X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9e691f46b2ec1b5dbbff2e51131e3c532e688a89..cd318cd31b8fd9876af7ba5f4878b90f446bd0f5:/src/gtk/slider.cpp diff --git a/src/gtk/slider.cpp b/src/gtk/slider.cpp index a5fbd38b54..27f9bdd393 100644 --- a/src/gtk/slider.cpp +++ b/src/gtk/slider.cpp @@ -7,10 +7,13 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "slider.h" #endif +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + #include "wx/slider.h" #if wxUSE_SLIDER @@ -131,10 +134,7 @@ bool wxSlider::Create(wxWindow *parent, wxWindowID id, m_adjust = gtk_range_get_adjustment( GTK_RANGE(m_widget) ); - gtk_signal_connect( GTK_OBJECT(m_adjust), - "value_changed", - (GtkSignalFunc) gtk_slider_callback, - (gpointer) this ); + GtkEnableEvents(); SetRange( minValue, maxValue ); SetValue( value ); @@ -166,7 +166,11 @@ void wxSlider::SetValue( int value ) m_adjust->value = fpos; + GtkDisableEvents(); + gtk_signal_emit_by_name( GTK_OBJECT(m_adjust), "value_changed" ); + + GtkEnableEvents(); } void wxSlider::SetRange( int minValue, int maxValue ) @@ -185,7 +189,11 @@ void wxSlider::SetRange( int minValue, int maxValue ) m_adjust->step_increment = 1.0; m_adjust->page_increment = ceil((fmax-fmin) / 10.0); + GtkDisableEvents(); + gtk_signal_emit_by_name( GTK_OBJECT(m_adjust), "changed" ); + + GtkEnableEvents(); } int wxSlider::GetMin() const @@ -206,7 +214,11 @@ void wxSlider::SetPageSize( int pageSize ) m_adjust->page_increment = fpage; + GtkDisableEvents(); + gtk_signal_emit_by_name( GTK_OBJECT(m_adjust), "changed" ); + + GtkEnableEvents(); } int wxSlider::GetPageSize() const @@ -222,7 +234,11 @@ void wxSlider::SetThumbLength( int len ) m_adjust->page_size = flen; + GtkDisableEvents(); + gtk_signal_emit_by_name( GTK_OBJECT(m_adjust), "changed" ); + + GtkEnableEvents(); } int wxSlider::GetThumbLength() const @@ -242,14 +258,15 @@ int wxSlider::GetLineSize() const bool wxSlider::IsOwnGtkWindow( GdkWindow *window ) { GtkRange *range = GTK_RANGE(m_widget); +#ifdef __WXGTK20__ + return (range->event_window == window); +#else return ( (window == GTK_WIDGET(range)->window) -#ifndef __WXGTK20__ || (window == range->trough) || (window == range->slider) || (window == range->step_forw) - || (window == range->step_back) -#endif // GTK+ 1.x - ); + || (window == range->step_back) ); +#endif } void wxSlider::ApplyWidgetStyle() @@ -258,4 +275,19 @@ void wxSlider::ApplyWidgetStyle() gtk_widget_set_style( m_widget, m_widgetStyle ); } +void wxSlider::GtkDisableEvents() +{ + gtk_signal_disconnect_by_func( GTK_OBJECT(m_adjust), + GTK_SIGNAL_FUNC(gtk_slider_callback), + (gpointer) this ); +} + +void wxSlider::GtkEnableEvents() +{ + gtk_signal_connect( GTK_OBJECT (m_adjust), + "value_changed", + GTK_SIGNAL_FUNC(gtk_slider_callback), + (gpointer) this ); +} + #endif