]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk1/spinctrl.cpp
wxLocale now uses wxEncodingConverter (must be explicitly enabled)
[wxWidgets.git] / src / gtk1 / spinctrl.cpp
index 766b1c58ae6c5a98b7f2f455eaac30ae27b65ec2..80f42b1354cd1deedb56687820334290a9e0783e 100644 (file)
@@ -101,11 +101,7 @@ bool wxSpinCtrl::Create(wxWindow *parent, wxWindowID id,
     gtk_spin_button_set_wrap( GTK_SPIN_BUTTON(m_widget),
                               (int)(m_windowStyle & wxSP_WRAP) );
 
     gtk_spin_button_set_wrap( GTK_SPIN_BUTTON(m_widget),
                               (int)(m_windowStyle & wxSP_WRAP) );
 
-    gtk_signal_connect( GTK_OBJECT (m_adjust),
-                        "value_changed",
-                        (GtkSignalFunc) gtk_spinctrl_callback,
-                        (gpointer) this );
-
+    GtkEnableEvents();
     m_parent->DoAddChild( this );
 
     PostCreation();
     m_parent->DoAddChild( this );
 
     PostCreation();
@@ -119,6 +115,22 @@ bool wxSpinCtrl::Create(wxWindow *parent, wxWindowID id,
     return TRUE;
 }
 
     return TRUE;
 }
 
+void wxSpinCtrl::GtkDisableEvents()
+{
+    gtk_signal_disconnect_by_func( GTK_OBJECT(m_adjust),
+                        GTK_SIGNAL_FUNC(gtk_spinctrl_callback),
+                        (gpointer) this );
+
+}
+
+void wxSpinCtrl::GtkEnableEvents()
+{
+    gtk_signal_connect( GTK_OBJECT (m_adjust),
+                        "value_changed",
+                        GTK_SIGNAL_FUNC(gtk_spinctrl_callback),
+                        (gpointer) this );
+}
+
 int wxSpinCtrl::GetMin() const
 {
     wxCHECK_MSG( (m_widget != NULL), 0, wxT("invalid spin button") );
 int wxSpinCtrl::GetMin() const
 {
     wxCHECK_MSG( (m_widget != NULL), 0, wxT("invalid spin button") );
@@ -153,7 +165,9 @@ void wxSpinCtrl::SetValue( const wxString& value )
     else
     {
         // invalid number - set text as is (wxMSW compatible)
     else
     {
         // invalid number - set text as is (wxMSW compatible)
+        GtkDisableEvents();
         gtk_entry_set_text( GTK_ENTRY(m_widget), value.mbc_str() );
         gtk_entry_set_text( GTK_ENTRY(m_widget), value.mbc_str() );
+        GtkEnableEvents();
     }
 }
 
     }
 }
 
@@ -167,7 +181,9 @@ void wxSpinCtrl::SetValue( int value )
 
     m_adjust->value = fpos;
 
 
     m_adjust->value = fpos;
 
+    GtkDisableEvents();
     gtk_signal_emit_by_name( GTK_OBJECT(m_adjust), "value_changed" );
     gtk_signal_emit_by_name( GTK_OBJECT(m_adjust), "value_changed" );
+    GtkEnableEvents();
 }
 
 void wxSpinCtrl::SetRange(int minVal, int maxVal)
 }
 
 void wxSpinCtrl::SetRange(int minVal, int maxVal)