+      long style, const wxValidator& validator, const wxString &name )
+{
+    m_needParent = TRUE;
+    m_acceptsFocus = TRUE;
+
+    if (!PreCreation( parent, pos, size ) ||
+        !CreateBase( parent, id, pos, size, style, validator, name ))
+    {
+        wxFAIL_MSG( wxT("wxButton creation failed") );
+        return FALSE;
+    }
+
+/*
+    wxString label2( label );
+    for (size_t i = 0; i < label2.Len(); i++)
+    {
+        if (label2.GetChar(i) == wxT('&'))
+        label2.SetChar(i,wxT('_'));
+    }
+
+    GtkWidget *accel_label = gtk_accel_label_new( label2.mb_str() );
+    gtk_widget_show( accel_label );
+
+    m_widget = gtk_button_new();
+    gtk_container_add( GTK_CONTAINER(m_widget), accel_label );
+
+    gtk_accel_label_set_accel_widget( GTK_ACCEL_LABEL(accel_label), m_widget );
+
+    guint accel_key = gtk_label_parse_uline (GTK_LABEL(accel_label), label2.mb_str() );
+    gtk_accel_label_refetch( GTK_ACCEL_LABEL(accel_label) );
+
+    wxControl::SetLabel( label );
+*/
+
+#ifdef __WXGTK20__
+    m_widget = gtk_button_new_with_mnemonic("");
+#else
+    m_widget = gtk_button_new_with_label("");
+#endif
+
+    float x_alignment = 0.5;
+    if (HasFlag(wxBU_LEFT))
+        x_alignment = 0.0;
+    else if (HasFlag(wxBU_RIGHT))
+        x_alignment = 1.0;
+
+    float y_alignment = 0.5;
+    if (HasFlag(wxBU_TOP))
+        y_alignment = 0.0;
+    else if (HasFlag(wxBU_BOTTOM))
+        y_alignment = 1.0;
+
+#if __WXGTK24__
+    if (!gtk_check_version(2,4,0))
+    {
+        gtk_button_set_alignment(GTK_BUTTON(m_widget), x_alignment, y_alignment);
+    }
+    else
+#endif
+    {
+        if (GTK_IS_MISC(BUTTON_CHILD(m_widget)))
+            gtk_misc_set_alignment (GTK_MISC (BUTTON_CHILD (m_widget)),
+                                x_alignment, y_alignment);
+    }
+
+    SetLabel(label);
+
+    if (style & wxNO_BORDER)
+       gtk_button_set_relief( GTK_BUTTON(m_widget), GTK_RELIEF_NONE );
+
+    gtk_signal_connect_after( GTK_OBJECT(m_widget), "clicked",
+      GTK_SIGNAL_FUNC(gtk_button_clicked_callback), (gpointer*)this );
+
+    gtk_signal_connect_after( GTK_OBJECT(m_widget), "style_set",
+      GTK_SIGNAL_FUNC(gtk_button_style_set_callback), (gpointer*) this );
+      
+    m_parent->DoAddChild( this );
+
+    PostCreation(size);
+
+    return true;
+}
+    
+
+void wxButton::SetDefault()
+{
+    wxWindow *parent = GetParent();
+    wxCHECK_RET( parent, _T("button without parent?") );
+
+    parent->SetDefaultItem(this);
+    
+    GTK_WIDGET_SET_FLAGS( m_widget, GTK_CAN_DEFAULT );
+    gtk_widget_grab_default( m_widget );
+
+    SetSize( m_x, m_y, m_width, m_height );
+}
+
+/* static */
+wxSize wxButtonBase::GetDefaultSize()
+{
+#ifdef __WXGTK20__
+    static wxSize size = wxDefaultSize;
+    if (size == wxDefaultSize)
+    {
+        // NB: Default size of buttons should be same as size of stock
+        //     buttons as used in most GTK+ apps. Unfortunately it's a little
+        //     tricky to obtain this size: stock button's size may be smaller
+        //     than size of button in GtkButtonBox and vice versa,
+        //     GtkButtonBox's minimal button size may be smaller than stock
+        //     button's size. We have to retrieve both values and combine them.
+
+        GtkWidget *wnd = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+        GtkWidget *box = gtk_hbutton_box_new();
+        GtkWidget *btn = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
+        gtk_container_add(GTK_CONTAINER(box), btn);
+        gtk_container_add(GTK_CONTAINER(wnd), box);
+        GtkRequisition req;
+        gtk_widget_size_request(btn, &req);
+
+        gint minwidth, minheight;
+        gtk_widget_style_get(box,
+                             "child-min-width", &minwidth,
+                             "child-min-height", &minheight,
+                             NULL);
+
+        size.x = wxMax(minwidth, req.width);
+        size.y = wxMax(minheight, req.height);
+        
+        gtk_widget_destroy(wnd);
+    }
+    return size;
+#else
+    return wxSize(80,26);
+#endif
+}
+
+void wxButton::SetLabel( const wxString &lbl )