#include "wx/utils.h"
#endif
-#include "wx/gtk/private.h"
+#include <gtk/gtk.h>
//-----------------------------------------------------------------------------
// data
static void
gtk_value_changed(GtkSpinButton* spinbutton, wxSpinButton* win)
{
- if (g_isIdle) wxapp_install_idle_handler();
-
const double value = gtk_spin_button_get_value(spinbutton);
const int pos = int(value);
const int oldPos = win->m_pos;
- if (!win->m_hasVMT || g_blockEventsOnDrag || win->m_blockScrollEvent || pos == oldPos)
+ if (!win->m_hasVMT || g_blockEventsOnDrag || pos == oldPos)
{
win->m_pos = pos;
return;
!event.IsAllowed() )
{
/* program has vetoed */
- win->BlockScrollEvent();
+ // this will cause another "value_changed" signal,
+ // but because pos == oldPos nothing will happen
gtk_spin_button_set_value(spinbutton, oldPos);
- win->UnblockScrollEvent();
return;
}
long style,
const wxString& name)
{
- m_needParent = true;
-
wxSize new_size = size,
sizeBest = DoGetBestSize();
new_size.x = sizeBest.x; // override width always
{
wxCHECK_RET( (m_widget != NULL), wxT("invalid spin button") );
- BlockScrollEvent();
+ GtkDisableEvents();
gtk_spin_button_set_value((GtkSpinButton*)m_widget, value);
- UnblockScrollEvent();
+ m_pos = int(gtk_spin_button_get_value((GtkSpinButton*)m_widget));
+ GtkEnableEvents();
}
void wxSpinButton::SetRange(int minVal, int maxVal)
{
wxCHECK_RET( (m_widget != NULL), wxT("invalid spin button") );
- BlockScrollEvent();
+ GtkDisableEvents();
gtk_spin_button_set_range((GtkSpinButton*)m_widget, minVal, maxVal);
- UnblockScrollEvent();
+ m_pos = int(gtk_spin_button_get_value((GtkSpinButton*)m_widget));
+ GtkEnableEvents();
}
void wxSpinButton::OnSize( wxSizeEvent &WXUNUSED(event) )
gtk_widget_set_size_request( m_widget, m_width, m_height );
}
+void wxSpinButton::GtkDisableEvents() const
+{
+ g_signal_handlers_block_by_func(m_widget,
+ (gpointer)gtk_value_changed, (void*) this);
+}
+
+void wxSpinButton::GtkEnableEvents() const
+{
+ g_signal_handlers_unblock_by_func(m_widget,
+ (gpointer)gtk_value_changed, (void*) this);
+}
+
GdkWindow *wxSpinButton::GTKGetWindow(wxArrayGdkWindows& WXUNUSED(windows)) const
{
return GTK_SPIN_BUTTON(m_widget)->panel;