+ 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);