Widget shell = (Widget) client_data;
XtDestroyWidget(shell);
}
Since the dialog is not a predefined Motif dialog, the widget parameter to the callback routine is not the dialog, but
the PushButton that caused the callback to be invoked. This difference is subtle and it is often overlooked by
programmers who are breaking away from the predefined dialogs to build their own dialogs. We pass the DialogShell,
help_dialog, as client data to the callback routine, so that the callback can destroy the widget.
The More button is not used in the application, since we do not provide any additional help for the dialog. We create
the button as follows:
widget = XtVaCreateManagedWidget ("More",
xmPushButtonGadgetClass, form,
XmNsensitive, False,
XmNtopAttachment, XmATTACH_FORM,
XmNbottomAttachment, XmATTACH_FORM,
XmNleftAttachment, XmATTACH_POSITION,
XmNleftPosition, 3,
XmNrightAttachment, XmATTACH_POSITION,
XmNrightPosition, 4,
XmNshowAsDefault, False,
XmNdefaultButtonShadowThickness, 1,
NULL);
In this case, the XmNshowAsDefault resource is set to False. We have also set XmN-sensitive to False so
that the widget is insensitive to user input.
Once the buttons in the action area have been created, we need to fix the size of the action area. We manage the Form
and then we retrieve the height of one of the action area buttons, so that we can use the value as the minimum and
maximum height of the pane. We set the XmNpaneMaximum and XmNpaneMinimum constraint resources on the
Form, so that the PanedWindow ...