X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f6bcfd974ef26faf6f91a62cac09827e09463fd1..16d38102e8ad5534d185cc532b9aa8077a75e0a4:/src/gtk/spinctrl.cpp diff --git a/src/gtk/spinctrl.cpp b/src/gtk/spinctrl.cpp index db68c07d70..0b9e68f89e 100644 --- a/src/gtk/spinctrl.cpp +++ b/src/gtk/spinctrl.cpp @@ -18,6 +18,8 @@ #include "wx/utils.h" +#include "wx/textctrl.h" // for wxEVT_COMMAND_TEXT_UPDATED + #include #include @@ -51,6 +53,31 @@ static void gtk_spinctrl_callback( GtkWidget *WXUNUSED(widget), wxSpinCtrl *win wxCommandEvent event( wxEVT_COMMAND_SPINCTRL_UPDATED, win->GetId()); event.SetEventObject( win ); + + // note that we don't use wxSpinCtrl::GetValue() here because it would + // adjust the value to fit into the control range and this means that we + // would never be able to enter an "invalid" value in the control, even + // temporarily - and trying to enter 10 into the control which accepts the + // values in range 5..50 is then, ummm, quite challenging (hint: you can't + // enter 1!) (VZ) + event.SetInt( (int)ceil(win->m_adjust->value) ); + win->GetEventHandler()->ProcessEvent( event ); +} + +//----------------------------------------------------------------------------- +// "changed" +//----------------------------------------------------------------------------- + +static void +gtk_spinctrl_text_changed_callback( GtkWidget *WXUNUSED(widget), wxSpinCtrl *win ) +{ + if (!win->m_hasVMT) return; + + if (g_isIdle) + wxapp_install_idle_handler(); + + wxCommandEvent event( wxEVT_COMMAND_TEXT_UPDATED, win->GetId() ); + event.SetEventObject( win ); event.SetInt( win->GetValue() ); win->GetEventHandler()->ProcessEvent( event ); } @@ -125,6 +152,9 @@ void wxSpinCtrl::GtkDisableEvents() GTK_SIGNAL_FUNC(gtk_spinctrl_callback), (gpointer) this ); + gtk_signal_disconnect_by_func( GTK_OBJECT(m_widget), + GTK_SIGNAL_FUNC(gtk_spinctrl_text_changed_callback), + (gpointer) this ); } void wxSpinCtrl::GtkEnableEvents() @@ -133,6 +163,11 @@ void wxSpinCtrl::GtkEnableEvents() "value_changed", GTK_SIGNAL_FUNC(gtk_spinctrl_callback), (gpointer) this ); + + gtk_signal_connect( GTK_OBJECT(m_widget), + "changed", + GTK_SIGNAL_FUNC(gtk_spinctrl_text_changed_callback), + (gpointer)this); } int wxSpinCtrl::GetMin() const