Use RIAA wrapper for wxSpinCtrl event disabling in wxGTK.
The use of wxSpinCtrlEventDisabler class ensures that we never forget to reenable the events after disabling them. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74633 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -79,6 +79,8 @@ protected:
|
|||||||
// override this and return true.
|
// override this and return true.
|
||||||
virtual bool UseGTKStyleBase() const { return true; }
|
virtual bool UseGTKStyleBase() const { return true; }
|
||||||
|
|
||||||
|
friend class wxSpinCtrlEventDisabler;
|
||||||
|
|
||||||
DECLARE_EVENT_TABLE()
|
DECLARE_EVENT_TABLE()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -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
|
// wxSpinCtrlGTKBase
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -207,18 +231,16 @@ void wxSpinCtrlGTKBase::SetValue( const wxString& value )
|
|||||||
}
|
}
|
||||||
|
|
||||||
// invalid number - set text as is (wxMSW compatible)
|
// invalid number - set text as is (wxMSW compatible)
|
||||||
GtkDisableEvents();
|
wxSpinCtrlEventDisabler disable(this);
|
||||||
gtk_entry_set_text( GTK_ENTRY(m_widget), wxGTK_CONV( value ) );
|
gtk_entry_set_text( GTK_ENTRY(m_widget), wxGTK_CONV( value ) );
|
||||||
GtkEnableEvents();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxSpinCtrlGTKBase::DoSetValue( double value )
|
void wxSpinCtrlGTKBase::DoSetValue( double value )
|
||||||
{
|
{
|
||||||
wxCHECK_RET( (m_widget != NULL), wxT("invalid spin button") );
|
wxCHECK_RET( (m_widget != NULL), wxT("invalid spin button") );
|
||||||
|
|
||||||
GtkDisableEvents();
|
wxSpinCtrlEventDisabler disable(this);
|
||||||
gtk_spin_button_set_value( GTK_SPIN_BUTTON(m_widget), value);
|
gtk_spin_button_set_value( GTK_SPIN_BUTTON(m_widget), value);
|
||||||
GtkEnableEvents();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxSpinCtrlGTKBase::SetSnapToTicks(bool snap_to_ticks)
|
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") );
|
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);
|
gtk_spin_button_set_range( GTK_SPIN_BUTTON(m_widget), minVal, maxVal);
|
||||||
GtkEnableEvents();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxSpinCtrlGTKBase::DoSetIncrement(double inc)
|
void wxSpinCtrlGTKBase::DoSetIncrement(double inc)
|
||||||
{
|
{
|
||||||
wxCHECK_RET( m_widget, "invalid spin button" );
|
wxCHECK_RET( m_widget, "invalid spin button" );
|
||||||
|
|
||||||
GtkDisableEvents();
|
wxSpinCtrlEventDisabler disable(this);
|
||||||
|
|
||||||
// Preserve the old page value when changing just the increment.
|
// Preserve the old page value when changing just the increment.
|
||||||
double page = 10*inc;
|
double page = 10*inc;
|
||||||
gtk_spin_button_get_increments( GTK_SPIN_BUTTON(m_widget), NULL, &page);
|
gtk_spin_button_get_increments( GTK_SPIN_BUTTON(m_widget), NULL, &page);
|
||||||
|
|
||||||
gtk_spin_button_set_increments( GTK_SPIN_BUTTON(m_widget), inc, page);
|
gtk_spin_button_set_increments( GTK_SPIN_BUTTON(m_widget), inc, page);
|
||||||
GtkEnableEvents();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxSpinCtrlGTKBase::GtkDisableEvents() const
|
void wxSpinCtrlGTKBase::GtkDisableEvents() const
|
||||||
@@ -471,9 +491,8 @@ void wxSpinCtrlDouble::SetDigits(unsigned digits)
|
|||||||
{
|
{
|
||||||
wxCHECK_RET( m_widget, "invalid spin button" );
|
wxCHECK_RET( m_widget, "invalid spin button" );
|
||||||
|
|
||||||
GtkDisableEvents();
|
wxSpinCtrlEventDisabler disable(this);
|
||||||
gtk_spin_button_set_digits( GTK_SPIN_BUTTON(m_widget), digits);
|
gtk_spin_button_set_digits( GTK_SPIN_BUTTON(m_widget), digits);
|
||||||
GtkEnableEvents();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // wxUSE_SPINCTRL
|
#endif // wxUSE_SPINCTRL
|
||||||
|
Reference in New Issue
Block a user