Listing 7: A version of PrintDialog using addCallback

//
// Note that we don't need any
// static functions, pointer
// passsing, or casting on
// anything.

#include "Callback.h"

class PrintDialog {
   Widget okButton;
   Widget cancelButton;
   Widget printerList;

   char *printerName;

public:
    PrintDialog(Widget parent);

    void okCallback(Widget,
                    XtPointer,
                    XtPointer);
};

PrintDialog::PrintDialog(Widget parent)
{
    ...
    okButton = XmCreatePushButton(parent,
                                  "OK",
                                  NULL,
                                  0);
    addCallback(this,
                okCallback, okButton,
                XmNactivateCallback
                NULL);
    ...
}

void PrintDialog::okCallback(Widget w,
                             XtPointer user_data,
                             XtPointer call_data)
{

    cout << "Selected Printer: " << printerName << endl;
}

int main()
{
    ...
    PrintDialog *pd = new PrintDialog(parent);
    ...
}
//End of File