+        xmPushButtonWidgetClass,
+        parentWidget,
+        wxFont::GetFontTag(), m_font.GetFontTypeC(XtDisplay(parentWidget)),
+        XmNlabelString, text(),
+        XmNrecomputeSize, False,
+        // See comment for wxButton::SetDefault
+        // XmNdefaultButtonShadowThickness, 1,
+        NULL);
+
+    XtAddCallback ((Widget) m_mainWidget,
+                   XmNactivateCallback, (XtCallbackProc) wxButtonCallback,
+                   (XtPointer) this);
+
+    wxSize best = GetBestSize();
+    if( size.x != -1 ) best.x = size.x;
+    if( size.y != -1 ) best.y = size.y;
+
+    PostCreation();
+    AttachWidget (parent, m_mainWidget, (WXWidget) NULL,
+                  pos.x, pos.y, best.x, best.y);
+
+    return true;
+}
+
+void wxButton::SetDefaultShadowThicknessAndResize()
+{
+    Widget buttonWidget = (Widget)GetMainWidget();
+    bool managed = XtIsManaged( buttonWidget );
+    if( managed )
+        XtUnmanageChild( buttonWidget );
+
+    XtVaSetValues( buttonWidget,
+                   XmNdefaultButtonShadowThickness, 1,
+                   NULL );
+
+    if( managed )
+        XtManageChild( buttonWidget );
+
+    // this can't currently be done, because user code that calls SetDefault
+    // will break otherwise
+#if 0
+    wxSize best = GetBestSize(), actual = GetSize();
+    if( best.x < actual.x ) best.x = actual.x;
+    if( best.y < actual.y ) best.y = actual.y;
+
+    if( best != actual )
+        SetSize( best );
+#endif
+    InvalidateBestSize();
+}
+
+
+wxWindow *wxButton::SetDefault()
+{
+    wxWindow *oldDefault = wxButtonBase::SetDefault();
+
+    // We initially do not set XmNdefaultShadowThickness, to have
+    // small buttons.  Unfortunately, buttons are now mis-aligned. We
+    // try to correct this now -- setting this ressource to 1 for each
+    // button in the same row.  Because it's very hard to find
+    // wxButton in the same row, correction is straighforward: we set
+    // resource for all wxButton in this parent (but not sub panels)
+
+    wxWindow *parent = GetParent();
+    for (wxWindowList::compatibility_iterator node = parent->GetChildren().GetFirst ();
+         node; node = node->GetNext ())
+    {
+        wxWindow *win = node->GetData ();
+        wxButton *item = wxDynamicCast(win, wxButton);
+        if (item)
+            item->SetDefaultShadowThicknessAndResize();
+    }
+
+    XtVaSetValues ((Widget) parent->GetMainWidget(),
+                   XmNdefaultButton, (Widget) GetMainWidget(),
+                   NULL);