X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3f66f6a5b3583b02c34854556eb83e3a808524ce..67afffcd05e53e20503b7b64215b6c272ac75e47:/src/gtk/spinctrl.cpp diff --git a/src/gtk/spinctrl.cpp b/src/gtk/spinctrl.cpp index e9063e1409..b036e0bdb0 100644 --- a/src/gtk/spinctrl.cpp +++ b/src/gtk/spinctrl.cpp @@ -76,6 +76,30 @@ gtk_changed(GtkSpinButton* spinbutton, wxSpinCtrl* win) } } +// ---------------------------------------------------------------------------- +// wxSpinCtrlEventDisabler: helper to temporarily disable GTK+ events +// ---------------------------------------------------------------------------- + +class wxSpinCtrlEventDisabler +{ +public: + wxEXPLICIT wxSpinCtrlEventDisabler(wxSpinCtrlGTKBase* spin) + : m_spin(spin) + { + m_spin->GtkDisableEvents(); + } + + ~wxSpinCtrlEventDisabler() + { + m_spin->GtkEnableEvents(); + } + +private: + wxSpinCtrlGTKBase* const m_spin; + + wxDECLARE_NO_COPY_CLASS(wxSpinCtrlEventDisabler); +}; + //----------------------------------------------------------------------------- // wxSpinCtrlGTKBase //----------------------------------------------------------------------------- @@ -207,18 +231,16 @@ void wxSpinCtrlGTKBase::SetValue( const wxString& value ) } // invalid number - set text as is (wxMSW compatible) - GtkDisableEvents(); + wxSpinCtrlEventDisabler disable(this); gtk_entry_set_text( GTK_ENTRY(m_widget), wxGTK_CONV( value ) ); - GtkEnableEvents(); } void wxSpinCtrlGTKBase::DoSetValue( double value ) { wxCHECK_RET( (m_widget != NULL), wxT("invalid spin button") ); - GtkDisableEvents(); + wxSpinCtrlEventDisabler disable(this); gtk_spin_button_set_value( GTK_SPIN_BUTTON(m_widget), value); - GtkEnableEvents(); } void wxSpinCtrlGTKBase::SetSnapToTicks(bool snap_to_ticks) @@ -245,23 +267,21 @@ void wxSpinCtrlGTKBase::DoSetRange(double minVal, double maxVal) { wxCHECK_RET( (m_widget != NULL), wxT("invalid spin button") ); - GtkDisableEvents(); + wxSpinCtrlEventDisabler disable(this); gtk_spin_button_set_range( GTK_SPIN_BUTTON(m_widget), minVal, maxVal); - GtkEnableEvents(); } void wxSpinCtrlGTKBase::DoSetIncrement(double inc) { wxCHECK_RET( m_widget, "invalid spin button" ); - GtkDisableEvents(); + wxSpinCtrlEventDisabler disable(this); // Preserve the old page value when changing just the increment. double page = 10*inc; gtk_spin_button_get_increments( GTK_SPIN_BUTTON(m_widget), NULL, &page); gtk_spin_button_set_increments( GTK_SPIN_BUTTON(m_widget), inc, page); - GtkEnableEvents(); } void wxSpinCtrlGTKBase::GtkDisableEvents() const @@ -471,6 +491,7 @@ void wxSpinCtrlDouble::SetDigits(unsigned digits) { wxCHECK_RET( m_widget, "invalid spin button" ); + wxSpinCtrlEventDisabler disable(this); gtk_spin_button_set_digits( GTK_SPIN_BUTTON(m_widget), digits); }