diff options
author | Roland Mainz <roland.mainz@nrubsig.org> | 2005-04-11 01:06:15 +0000 |
---|---|---|
committer | Roland Mainz <roland.mainz@nrubsig.org> | 2005-04-11 01:06:15 +0000 |
commit | 8b721c45d8f8681e59ca145d1ed3839d1b312a99 (patch) | |
tree | c5117a575640dcf2981190fae2d415ac85aded6c | |
parent | 3d9fdcb47537e924e7426d64d838c00414ec58ff (diff) |
xc/programs/Xserver/Xprint/attributes.csco_port_update-baseXORG-6_8_99_9XORG-6_8_99_8XORG-6_8_99_7XORG-6_8_99_6XORG-6_8_99_5XORG-6_8_99_4XORG-6_8_99_3XORG-6_8_99_14XORG-6_8_99_13XORG-6_8_99_12XORG-6_8_99_11XORG-6_8_99_10
xc/programs/glxgears/glxgears.c
xc/programs/xdbedizzy/xdbedizzy.c
xc/programs/xedit/Imakefile
xc/programs/xedit/Xedit-xprint.ad
xc/programs/xedit/util.c
xc/programs/xedit/xedit.h
xc/programs/xlogo/print.c
xc/programs/xlogo/xlogo.c
xc/programs/xlogo/xlogo.h
xc/programs/xman/Imakefile
xc/programs/xman/print.h
xc/programs/xmore/Imakefile
xc/programs/xmore/print.c
xc/programs/xmore/print.h
xc/programs/xmore/printdialog.c
xc/programs/xphelloworld/xpawhelloworld/xpawhelloworld.c
xc/programs/xphelloworld/xphelloworld/xphelloworld.c
xc/programs/xphelloworld/xpsimplehelloworld/xpsimplehelloworld.c
xc/programs/xphelloworld/xpxmhelloworld/xpxmhelloworld.c
//bugs.freedesktop.org/show_bug.cgi?id=790) attachment #2379
(https://bugs.freedesktop.org/attachment.cgi?id=2379) Implement support
client+Xserver support for passing output (stdout+stderr) of the
spooler command started by the Xprint server back to the application
using the "xp-spooler-command-results" XPJobAttr attribute
(applications can fetch the attribute value after the XPEndJobNotify
event was received; more details can be found in
http://xprint.mozdev.org/docs/dtprint_fspec.ps).
-rw-r--r-- | print.c | 39 | ||||
-rw-r--r-- | print.h | 8 | ||||
-rw-r--r-- | printdialog.c | 8 |
3 files changed, 46 insertions, 9 deletions
@@ -32,6 +32,9 @@ in this Software without prior written authorization from The Open Group. #define Assertion(expr, msg) { if (!(expr)) { Error msg } } #define Log(x) { if(True) printf x; } +#ifdef XEDIT +#include "xedit.h" +#endif /* XEDIT */ #include "print.h" #include <X11/Xaw/Form.h> #include <X11/Xaw/Label.h> @@ -181,13 +184,36 @@ PageSetupCB(Widget widget, XtPointer client_data, XtPointer call_data) static void FinishPrinting(AppPrintData *p) { + char *scr; + if (p->printtofile_handle) { if (XpuWaitForPrintFileChild(p->printtofile_handle) != XPGetDocFinished) { - fprintf(stderr, "%s: Error while printing to file.\n", apd->programname); + PrintMsg(("Error while printing to file.\n")); } p->printtofile_handle = NULL; - } + } + + /* Job completed, check if there are any messages from the spooler command */ + scr = XpGetOneAttribute(p->pdpy, p->pcontext, XPJobAttr, "xp-spooler-command-results"); + if( scr ) + { + if( strlen(scr) > 0 ) + { + const char *msg = XpuCompoundTextToXmb(p->pdpy, scr); + if( msg ) + { + PrintMsg(("Spooler command returned:\n%s", msg)); + XpuFreeXmbString(msg); + } + else + { + PrintMsg(("Spooler command returned (unconverted):\n%s", scr)); + } + } + XFree((void *)scr); + } + if (p->printshell) { XtDestroyWidget(p->printshell); p->printshell = NULL; @@ -288,7 +314,7 @@ void DoPrintTextSource(const char *programname, apd->pdpyDestroyCallback = pdpyDestroyCB; if (apd->isPrinting) { - fprintf(stderr, "%s: Already busy with printing.\n", apd->programname); + PrintMsg(("Already busy with printing.\n")); return; } @@ -303,7 +329,7 @@ void DoPrintTextSource(const char *programname, /* Get default printer resolution */ if (XpuGetResolution(pdpy, pcontext, &dpi_x, &dpi_y) != 1) { - fprintf(stderr, "%s: No default resolution for printer.\n", apd->programname); + PrintMsg(("No default resolution for printer.\n")); XpuClosePrinterDisplay(pdpy, pcontext); return; } @@ -390,17 +416,18 @@ void DoPrintTextSource(const char *programname, apd->isPrinting = True; if (toFile) { - printf("%s: Printing to file '%s'...\n", apd->programname, toFile); + PrintMsg(("Printing to file '%s'...\n", toFile)); apd->printtofile_handle = XpuStartJobToFile(pdpy, pcontext, toFile); if (!apd->printtofile_handle) { perror("XpuStartJobToFile failure"); + PrintMsg(("Printing failed: XpuStartJobToFile\n")); apd->isPrinting = False; return; } } else { - printf("%s: Printing to printer...\n", apd->programname); + PrintMsg(("Printing to printer...\n")); XpuStartJobToSpooler(pdpy); } } @@ -35,6 +35,14 @@ in this Software without prior written authorization from The Open Group. #include <X11/Xaw/Cardinals.h> #include <X11/XprintUtil/xprintutil.h> +#if defined(XMORE) +#define PrintMsg(x) { printf("xmore: "); printf x ; } +#elif defined(XEDIT) +#define PrintMsg(x) { XeditPrintf x ; } +#else +#error unknown application +#endif + /* Prototypes */ void DoPrintTextSource(const char *programname, Widget textsource, diff --git a/printdialog.c b/printdialog.c index 3642c07..50d2a88 100644 --- a/printdialog.c +++ b/printdialog.c @@ -44,6 +44,9 @@ in this Software without prior written authorization from The Open Group. #include <X11/extensions/XKBbells.h> #endif /* XKB */ +#ifdef XEDIT +#include "xedit.h" +#endif /* XEDIT */ #include "printdialog.h" #include "printdialogprivates.h" #include "print.h" @@ -1024,9 +1027,8 @@ createprintdialogchildren(Widget w) } else { - XtAppWarning(XtWidgetToApplicationContext(w), - "No Xprint servers could be found. " - "Check whether the XPSERVERLIST environment variable contains any valid Xprint server(s)."); + PrintMsg(("No Xprint servers could be found.\n" + "Check whether the XPSERVERLIST environment variable contains any valid Xprint server(s).\n")); } n = 0; |