+    tlw->SetDefaultItem(this);
+
+    GTK_WIDGET_SET_FLAGS( m_widget, GTK_CAN_DEFAULT );
+    gtk_widget_grab_default( m_widget );
+
+    // resize for default border
+    gtk_button_style_set_callback( m_widget, NULL, this );
+}
+
+/* static */
+wxSize wxButtonBase::GetDefaultSize()
+{
+    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;
+}
+
+void wxButton::SetLabel( const wxString &lbl )