#include	<Xm/PushB.h>
#include	<Xm/MessageB.h>
#include	<Xm/RowColumn.h>

Widget top, dialog;
void pushCB(Widget w, int action, XtPointer s);

enum { POP_DEFAULT, POP_OVERMAIN, POP_200 };
String pb_labels[] = {
    "Popup default",
    "Popup over main window",
    "Popup at (200,200)",
};

int
main(int ac, char *av[])
{
    XtAppContext app;
    int pb_num = XtNumber(pb_labels);
    Widget rc, pb[pb_num];
    int i;

    top = XtAppInitialize(&app, "Sample",
		      NULL, 0, &ac, av, NULL, NULL, 0);
    rc = XmCreateRowColumn(top, "rc", NULL, 0);
    XtManageChild(rc);

    for (i = 0; i < pb_num; i++) {
	pb[i] = XmCreatePushButton(rc, pb_labels[i], NULL, 0);
	XtAddCallback(pb[i], XmNactivateCallback,
		      (XtCallbackProc)pushCB, (XtPointer)i);
    }
    XtManageChildren(pb, pb_num);

    dialog = XmCreateMessageDialog(top, "box1", NULL, 0);

    XtRealizeWidget(top);
    XtAppMainLoop(app);
}

void
pushCB(Widget w, int action, XtPointer s)
{
    Position mainx, mainy;

    switch (action) {
    case POP_DEFAULT:
	XtVaSetValues(dialog,
		      XmNdefaultPosition, True,
		      NULL);
	break;
    case POP_OVERMAIN:
	XtVaGetValues(top,
		      XmNx, &mainx, XmNy, &mainy,
		      NULL);
	XtVaSetValues(dialog,
		      XmNx, mainx, XmNy, mainy,
		      XmNdefaultPosition, False,
		      NULL);
	break;
    case POP_200:
	XtVaSetValues(dialog,
		      XmNx, 200, XmNy, 200,
		      XmNdefaultPosition, False,
		      NULL);
	break;
    }
    XtManageChild(dialog);
}
