]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk1/spinctrl.cpp
Distrib corrections,
[wxWidgets.git] / src / gtk1 / spinctrl.cpp
index 7b40f4ccbea4bb90353206055d76b99cadb5977a..7f04c114797b07ffdd02e73cba22c554b9eb9d65 100644 (file)
@@ -85,6 +85,10 @@ static void gtk_spinctrl_callback( GtkWidget *WXUNUSED(widget), wxSpinCtrl *win
 
 IMPLEMENT_DYNAMIC_CLASS(wxSpinCtrl,wxControl)
 
+BEGIN_EVENT_TABLE(wxSpinCtrl, wxControl)
+    EVT_CHAR(wxSpinCtrl::OnChar)
+END_EVENT_TABLE()
+
 bool wxSpinCtrl::Create(wxWindow *parent, wxWindowID id,
                         const wxString& value,
                         const wxPoint& pos,  const wxSize& size,
@@ -93,6 +97,7 @@ bool wxSpinCtrl::Create(wxWindow *parent, wxWindowID id,
                         const wxString& name)
 {
     m_needParent = TRUE;
+    m_acceptsFocus = TRUE;
 
     wxSize new_size = size;
     if (new_size.y == -1)
@@ -165,7 +170,7 @@ void wxSpinCtrl::SetValue( const wxString& value )
     else
     {
         // invalid number - set text as is (wxMSW compatible)
-        gtk_entry_set_text( GTK_ENTRY(m_widget), value.c_str() );
+        gtk_entry_set_text( GTK_ENTRY(m_widget), value.mbc_str() );
     }
 }
 
@@ -205,6 +210,27 @@ void wxSpinCtrl::SetRange(int minVal, int maxVal)
     SetFocus();
 }
 
+void wxSpinCtrl::OnChar( wxKeyEvent &event )
+{
+    wxCHECK_RET( m_widget != NULL, wxT("invalid spin ctrl") );
+
+    if (event.KeyCode() == WXK_RETURN)
+    {
+        wxWindow *top_frame = m_parent;
+        while (top_frame->GetParent() && !(top_frame->GetParent()->m_isFrame))
+            top_frame = top_frame->GetParent();
+       GtkWindow *window = GTK_WINDOW(top_frame->m_widget);
+       
+       if (window->default_widget)
+        {
+            gtk_widget_activate (window->default_widget);
+           return;
+       }
+    }
+
+    event.Skip();
+}
+
 bool wxSpinCtrl::IsOwnGtkWindow( GdkWindow *window )
 {
     return GTK_SPIN_BUTTON(m_widget)->panel == window;