NAME¶
XmPrintToFile — Retrieves and saves data that would normally be
printed by the X Print Server.
SYNOPSIS¶
#include <Xm/Print.h>
XtEnumXmPrintToFile(
Display*dpy,
Stringfilename,
XPFinishProcfinish_proc,
XtPointerclient_data);
DESCRIPTION¶
XmPrintToFile hides the details of X display connection and
XpGetDocumentData to the Motif application programmer.
This function is a convenience routine that hides the details of the X and Xp
internals to the application programmer by calling the
XpGetDocumentData function with appropriate save and finish callbacks.
This is used in the context of X Printing when the user has specified the
"print-to-file" option from a regular Print Setup Dialog box.
XmPrintToFile first tries to open the given filename for writing and
returns
False if it can't. Else, it uses
XpGetDocumentData,
giving it a save proc that writes the data received in the file and a finish
proc that closes the file or removes it on an unsuccessful termination. It
calls
finish_proc at that point, passing it the argument received from
the Xp layer (
status == XPGetDocFinished means the file is valid and
was closed, otherwise the file was removed).
XmPrintToFile is non-blocking; if it returns successfully, it just means
the file was opened successfully, not that all the data was received.
- dpy
- Print display connection.
- filename
- Name of the file to put the print data in.
- finish_proc
- Called when all the data has been received.
- client_data
- Passed with the finish_proc.
RETURN VALUE¶
Returns
False if the filename could not be created or opened for writing,
True otherwise.
ERRORS/WARNINGS¶
Not applicable
EXAMPLES¶
A typical OK callback from a
DtPrintSetupBox:
PrintOKCallback(widget...)
/*-------------*/
{ int save_data = XPSpool;
pshell = XmPrintSetup (widget, pbs->print_screen,
"Print", NULL, 0);
XtAddCallback(pshell, XmNstartJobCallback, startJobCB, data);
if (pbs->destination == DtPRINT_TO_FILE)
save_data = XPGetData;
/* start job must precede XpGetDocumentData in XmPrintToFile */
XpStartJob(XtDisplay(pshell), save_data);
XFlush(XtDisplay(pshell)); /* maintain the sequence
between startjob and getdocument */
/* setup print to file */
if (pbs->destination == DtPRINT_TO_FILE)
XmPrintToFile(XtDisplay(pshell),
pbs->dest_info, FinishPrintToFile, NULL);
}
}
static void
startJobCB(Widget, XtPointer call_data, XtPointer client_data)
{
print(p); /* rendering happens here */
XpEndJob(XtDisplay(p->print_shell));
/* clean up */
XtDestroyWidget(p->print_shell);
XtCloseDisplay(XtDisplay(p->print_shell));
}
SEE ALSO¶
XmPrintSetup(3),
XmPrintShell(3),
XmRedisplayWidget(3),
XmPrintPopupPDM(3)