2
* $Xorg: printdialog.c,v 1.1 2004/05/12 02:05:54 gisburn Exp $
4
Copyright 2004 Roland Mainz <roland.mainz@nrubsig.org>
6
Permission to use, copy, modify, distribute, and sell this software and its
7
documentation for any purpose is hereby granted without fee, provided that
8
the above copyright notice appear in all copies and that both that
9
copyright notice and this permission notice appear in supporting
12
The above copyright notice and this permission notice shall be included in
13
all copies or substantial portions of the Software.
15
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
19
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
Except as contained in this notice, the name of The Open Group shall not be
23
used in advertising or otherwise to promote the sale, use or other dealings
24
in this Software without prior written authorization from The Open Group.
28
/* Force ANSI C prototypes from X11 headers */
31
#endif /* !FUNCPROTO */
33
#include <X11/StringDefs.h>
34
#include <X11/Intrinsic.h>
35
#include <X11/Shell.h>
36
#include <X11/Xaw/Form.h>
37
#include <X11/Xaw/Toggle.h>
38
#include <X11/Xaw/List.h>
39
#include <X11/Xaw/Command.h>
40
#include <X11/Xaw/AsciiText.h>
41
#include <X11/Xaw/Dialog.h>
44
#include <X11/extensions/XKBbells.h>
50
#include "printdialog.h"
51
#include "printdialogprivates.h"
58
/* Turn a NULL pointer string into an empty string */
59
#define NULLSTR(x) (((x)!=NULL)?(x):(""))
61
#define Error(x) { printf x ; exit(EXIT_FAILURE); }
62
#define Assertion(expr, msg) { if (!(expr)) { Error msg } }
64
# define Log(x) { if(True) printf x; }
66
# define Log(x) { if(False) printf x; }
69
/* Local prototypes */
70
static void do_beep(PrintDialogWidget pdw);
71
static void center_popup(Widget parent, Widget popup);
72
static void updateWidgetStates(PrintDialogWidget pdw);
73
static void printSetupClose(PrintDialogWidget pdw);
74
static void printSetupOKXtProc(Widget w, XtPointer client_data, XtPointer callData);
75
static void printSetupCancelXtProc(Widget w, XtPointer client_data, XtPointer callData);
76
static void printSetupJobCopiesXtProc(Widget w, XtPointer client_data, XtPointer callData);
77
static void printDialogDestXtProc(Widget w, XtPointer client_data, XtPointer callData);
78
static void printSelectFileXtProc(Widget w, XtPointer client_data, XtPointer callData);
79
static void printOKXtProc(Widget w, XtPointer client_data, XtPointer callData);
80
static void printSetupXtProc(Widget w, XtPointer client_data, XtPointer callData);
81
static void printFileSelectedXtProc(Widget w, XtPointer client_data, XtPointer callData);
82
static void buildFileDialog(PrintDialogWidget pdw);
83
static void closePrinterConnection(PrintDialogWidget pdw, Bool closeDisplay);
84
static Bool openPrinterConnection(PrintDialogWidget pdw);
85
static void destroyPrintSetupDialog(PrintDialogWidget pdw);
86
static Widget buildPrintSetupDialog(PrintDialogWidget pdw);
87
static String *xpprinterlist_to_widget_printerlist(XPPrinterList printerlist, int num_printers);
88
static String *xppaperlist_to_widget_paperlist(XpuMediumSourceSizeList paperlist, int num_papers);
89
static String *xpresolutionlist_to_widget_resolutionlist(XpuResolutionList reslist, int num_resolutions);
90
static String *xporientationlist_to_widget_orientationlist(XpuOrientationList orientationlist, int num_orientations);
91
static String *xpplexlist_to_widget_plexlist(XpuPlexList plexlist, int num_plex);
92
static String *xpcolorspacelist_to_widget_colorspacelist(XpuColorspaceList colorspacelist, int num_colorspaces);
93
static void printerSelectionPrinterSelectedXtProc(Widget w, XtPointer client_data, XtPointer callData);
94
static void printSelectPrinterXtProc(Widget w, XtPointer client_data, XtPointer callData);
95
static void printerSelectionClose(PrintDialogWidget pdw);
96
static void printerSelectionOKXtProc(Widget w, XtPointer client_data, XtPointer callData);
97
static void printerSelectionCancelXtProc(Widget w, XtPointer client_data, XtPointer callData);
98
static Bool buildPrinterSelectionDialog(PrintDialogWidget pdw);
99
static void destroyPrinterSelectionDialog(PrintDialogWidget pdw);
100
static void createprintdialogchildren(Widget w);
103
void do_beep(PrintDialogWidget pdw)
105
Log(("*** Beep!\n"));
107
XkbStdBell(XtDisplay((Widget)pdw), XtWindow((Widget)pdw), 0, XkbBI_MinorError);
109
XBell(XtDisplay((Widget)pdw), 0);
113
/* Center popup (on parent, not on screen - which would be a bad idea
114
* in the Xinerama case) */
116
void center_popup(Widget parent, Widget popup)
123
XtVaGetValues(parent,
132
x += (Position)width / 2;
133
y += (Position)height / 3;
142
void updateWidgetStates(PrintDialogWidget pdw)
144
PrintDialogPart *pdp = &pdw->printdialog;
146
/* Do not update anything if we will be destroyed */
147
if (pdw->core.being_destroyed)
150
if (pdp->printToFile == False) {
151
XtVaSetValues(pdp->main.printtoprinter, XtNstate, True, NULL);
152
XtVaSetValues(pdp->main.printtofile, XtNstate, False, NULL);
153
/* Disable the widgets which depend on print-to-file */
154
XtVaSetValues(pdp->main.filenamelabel, XtNsensitive, False, NULL);
155
XtVaSetValues(pdp->main.filename, XtNsensitive, False, NULL);
156
XtVaSetValues(pdp->main.selectfile, XtNsensitive, False, NULL);
160
XtVaSetValues(pdp->main.printtoprinter, XtNstate, False, NULL);
161
XtVaSetValues(pdp->main.printtofile, XtNstate, True, NULL);
162
/* Enable the widgets which depend on print-to-file */
163
XtVaSetValues(pdp->main.filenamelabel, XtNsensitive, True, NULL);
164
XtVaSetValues(pdp->main.filename, XtNsensitive, True, NULL);
165
XtVaSetValues(pdp->main.selectfile, XtNsensitive, True, NULL);
168
/* Update file name */
169
XtVaSetValues(pdp->main.filename, XtNlabel, pdp->filename?pdp->filename:"-", NULL);
171
/* General check whether we can print... */
172
pdp->canPrint = True;
173
if (pdp->printer_name == NULL) {
174
pdp->canPrint = False;
176
else if (strlen(pdp->printer_name) == 0) {
177
pdp->canPrint = False;
180
pdp->canReallyPrint = pdp->canPrint;
182
/* Some extra checks for print-to-file */
183
if (pdp->printToFile) {
184
if (pdp->filename == NULL) {
185
pdp->canReallyPrint = False;
187
else if (strlen(pdp->filename) == 0) {
188
pdp->canReallyPrint = False;
192
XtVaSetValues(pdp->main.ok, XtNsensitive, pdp->canReallyPrint, NULL);
193
XtVaSetValues(pdp->main.setup, XtNsensitive, pdp->canPrint, NULL);
197
printSetupClose(PrintDialogWidget pdw)
199
PrintDialogPart *pdp = &pdw->printdialog;
200
if (pdp->setup.popup) {
201
XtPopdown(pdp->setup.popup);
206
printSetupOKXtProc(Widget w, XtPointer client_data, XtPointer callData)
208
PrintDialogWidget pdw = (PrintDialogWidget)client_data;
209
PrintDialogPart *pdp = &pdw->printdialog;
211
XawListReturnStruct *lrs;
212
Log(("## printSetupOK: closing print setup!\n"));
214
/* Set copy count (if the value is invalid beep and return to the user ) */
215
XtVaGetValues(pdp->setup.jobcopies, XtNstring, &s, NULL);
218
if (c < 1 || c > 999) {
220
XtVaSetValues(pdp->setup.jobcopies, XtNstring, "1", NULL);
221
Log(("## printSetupOKXtProc: not a valid copy count value\n"));
225
/* Fix me: We should set the number of _job_ copies here, not _doc_ copies */
226
XpuSetDocumentCopies(pdp->pdpy, pdp->pcontext, c);
230
lrs = XawListShowCurrent(pdp->setup.paperlist);
231
if (lrs->list_index != XAW_LIST_NONE) {
232
Log(("selected paper is '%s'/'%d'\n", lrs->string, lrs->list_index));
233
Assertion(lrs->list_index < pdp->num_papers, (("Error: lrs->list_index < pdp->num_papers\n")));
234
XpuSetDocMediumSourceSize(pdp->pdpy, pdp->pcontext, &pdp->paperlist[lrs->list_index]);
239
lrs = XawListShowCurrent(pdp->setup.resolutionlist);
240
if (lrs->list_index != XAW_LIST_NONE) {
241
Log(("selected resolution is '%s'/'%d'\n", lrs->string, lrs->list_index));
242
Assertion(lrs->list_index < pdp->num_resolutions, (("Error: lrs->list_index < pdp->num_resolutions\n")));
243
XpuSetDocResolution(pdp->pdpy, pdp->pcontext, &pdp->resolutionlist[lrs->list_index]);
247
/* Set orientation */
248
lrs = XawListShowCurrent(pdp->setup.orientationlist);
249
if (lrs->list_index != XAW_LIST_NONE) {
250
Log(("selected orientation is '%s'/'%d'\n", lrs->string, lrs->list_index));
251
Assertion(lrs->list_index < pdp->num_orientations, (("Error: lrs->list_index < pdp->num_orientations\n")));
252
XpuSetDocOrientation(pdp->pdpy, pdp->pcontext, &pdp->orientationlist[lrs->list_index]);
257
lrs = XawListShowCurrent(pdp->setup.plexlist);
258
if (lrs->list_index != XAW_LIST_NONE) {
259
Log(("selected plex is '%s'/'%d'\n", lrs->string, lrs->list_index));
260
Assertion(lrs->list_index < pdp->num_plex, (("Error: lrs->list_index < pdp->num_plex\n")));
261
XpuSetDocPlex(pdp->pdpy, pdp->pcontext, &pdp->plexlist[lrs->list_index]);
266
lrs = XawListShowCurrent(pdp->setup.colorspacelist);
267
if (lrs->list_index != XAW_LIST_NONE) {
268
Log(("selected colorspace is '%s'/'%d'\n", lrs->string, lrs->list_index));
269
Assertion(lrs->list_index < pdp->num_colorspaces, (("Error: lrs->list_index < pdp->num_colorspaces\n")));
270
pdp->selected_colorspace = &pdp->colorspacelist[lrs->list_index];
274
printSetupClose(pdw);
278
printSetupCancelXtProc(Widget w, XtPointer client_data, XtPointer callData)
280
PrintDialogWidget pdw = (PrintDialogWidget)client_data;
281
Log(("## printSetupCancel: closing print setup!\n"));
283
printSetupClose(pdw);
287
printSetupJobCopiesXtProc(Widget w, XtPointer client_data, XtPointer callData)
289
PrintDialogWidget pdw = (PrintDialogWidget)client_data;
290
PrintDialogPart *pdp = &pdw->printdialog;
293
Log(("## printSetupJobCopiesXtProc!\n"));
295
/* Check whether the input is a valid number - and in the case of invalid input reset the value */
296
XtVaGetValues(pdp->setup.jobcopies, XtNstring, &string, NULL);
300
Bool isValidNumber = True;
302
/* First check for invalid characters... */
303
for( s = string ; *s != '\0' ; s++ ) {
305
isValidNumber = False;
310
/* .. and the do a range check... */
312
if (i < 1 || i > 999) {
313
isValidNumber = False;
316
if (!isValidNumber) {
318
XtVaSetValues(pdp->setup.jobcopies, XtNstring, "1", NULL);
319
Log(("## printSetupJobCopiesXtProc: not a valid number\n"));
325
printCancelXtProc(Widget w, XtPointer client_data, XtPointer callData)
327
PrintDialogWidget pdw = (PrintDialogWidget)client_data;
328
PrintDialogPart *pdp = &pdw->printdialog;
330
printSetupClose(pdw);
332
if (pdp->cancel_callback) {
333
Log(("printCancelXtProc: calling callback\n"));
334
XtCallCallbackList((Widget)pdw, pdp->cancel_callback, NULL);
339
printDialogDestXtProc(Widget w, XtPointer client_data, XtPointer callData)
341
PrintDialogWidget pdw = (PrintDialogWidget)client_data;
342
PrintDialogPart *pdp = &pdw->printdialog;
344
if (w == pdp->main.printtoprinter) {
345
pdp->printToFile = False;
347
else if (w == pdp->main.printtofile) {
348
pdp->printToFile = True;
352
Log(("printDialogDestXtProc: ERROR: Unknown widget.\n"));
355
updateWidgetStates(pdw);
359
printSelectFileXtProc(Widget w, XtPointer client_data, XtPointer callData)
361
PrintDialogWidget pdw = (PrintDialogWidget)client_data;
362
PrintDialogPart *pdp = &pdw->printdialog;
364
Log(("## printSelectFileXtProc!\n"));
366
if (!pdp->selectFile.shell) {
367
buildFileDialog(pdw);
370
center_popup((Widget)pdw, pdp->selectFile.shell);
372
XtPopup(pdp->selectFile.shell, XtGrabExclusive);
376
printOKXtProc(Widget w, XtPointer client_data, XtPointer callData)
378
PrintDialogWidget pdw = (PrintDialogWidget)client_data;
379
PrintDialogPart *pdp = &pdw->printdialog;
380
Log(("## printing!\n"));
383
Log(("printOKXtProc: no printer connection, opening one....\n"));
384
openPrinterConnection(pdw);
387
Log(("printOKXtProc: still no printer connection - BAD (this should never happen).\n"));
393
if (pdp->ok_callback) {
394
XawPrintDialogCallbackStruct pdcs;
396
Log(("printOKXtProc: calling callbacks...\n"));
397
memset(&pdcs, 0, sizeof(pdcs));
398
pdcs.pdpy = pdp->pdpy;
399
pdcs.pcontext = pdp->pcontext;
400
pdcs.printToFile = pdp->printToFile;
401
pdcs.printToFileName = (const char *)pdp->filename;
402
pdcs.colorspace = pdp->selected_colorspace;
403
XtCallCallbackList((Widget)pdw, pdp->ok_callback, &pdcs);
406
printSetupClose(pdw);
410
printSetupXtProc(Widget w, XtPointer client_data, XtPointer callData)
412
PrintDialogWidget pdw = (PrintDialogWidget)client_data;
413
PrintDialogPart *pdp = &pdw->printdialog;
415
Log(("## setup!\n"));
417
if (!pdp->setup.popup) {
418
if (buildPrintSetupDialog(pdw) == NULL) {
419
Log(("printSetupXtProc: buildPrintSetupDialog failure.\n"));
424
center_popup((Widget)pdw, pdp->setup.popup);
426
XtPopup(pdp->setup.popup, XtGrabExclusive);
430
printFileSelectedXtProc(Widget w, XtPointer client_data, XtPointer callData)
432
PrintDialogWidget pdw = (PrintDialogWidget)client_data;
433
PrintDialogPart *pdp = &pdw->printdialog;
434
const char *filename;
436
Log(("printFileSelectedXtProc: User selected file.\n"));
437
filename = XawDialogGetValueString(pdp->selectFile.dialog);
441
pdp->filename = strdup(filename);
443
XtPopdown(pdp->selectFile.shell);
445
updateWidgetStates(pdw);
449
void buildFileDialog(PrintDialogWidget pdw)
451
PrintDialogPart *pdp = &pdw->printdialog;
455
pdp->selectFile.shell = XtCreatePopupShell("selectfile",
456
transientShellWidgetClass,
457
(Widget)pdw, NULL, 0);
459
XtSetArg(args[n], XtNvalue, pdp->filename?pdp->filename:""); n++;
460
pdp->selectFile.dialog = XtCreateManagedWidget("dialog", dialogWidgetClass,
461
pdp->selectFile.shell, args, n);
462
XawDialogAddButton(pdp->selectFile.dialog, "Accept", printFileSelectedXtProc, pdw);
464
XtRealizeWidget(pdp->selectFile.shell);
468
void closePrinterConnection(PrintDialogWidget pdw, Bool closeDisplay)
470
PrintDialogPart *pdp = &pdw->printdialog;
472
Log(("# closePrinterConnection\n"));
474
destroyPrintSetupDialog(pdw);
476
if (pdp->paperlist) {
477
XpuFreeMediumSourceSizeList(pdp->paperlist);
478
pdp->paperlist = NULL;
481
if (pdp->widget_paperlist) {
482
free(pdp->widget_paperlist);
483
pdp->widget_paperlist = NULL;
486
if (pdp->resolutionlist) {
487
XpuFreeResolutionList(pdp->resolutionlist);
488
pdp->resolutionlist = NULL;
491
if (pdp->widget_resolutionlist) {
492
free(pdp->widget_resolutionlist);
493
pdp->widget_resolutionlist = NULL;
497
if (pdp->orientationlist) {
498
XpuFreeOrientationList(pdp->orientationlist);
499
pdp->orientationlist = NULL;
502
if (pdp->widget_orientationlist) {
503
free(pdp->widget_orientationlist);
504
pdp->widget_orientationlist = NULL;
508
XpuFreePlexList(pdp->plexlist);
509
pdp->plexlist = NULL;
512
if (pdp->widget_plexlist) {
513
free(pdp->widget_plexlist);
514
pdp->widget_plexlist = NULL;
517
if (pdp->colorspacelist) {
518
XpuFreeColorspaceList(pdp->colorspacelist);
519
pdp->colorspacelist = NULL;
522
if (pdp->widget_colorspacelist) {
523
free(pdp->widget_colorspacelist);
524
pdp->widget_colorspacelist = NULL;
526
pdp->selected_colorspace = NULL;
530
XpuClosePrinterDisplay(pdp->pdpy, pdp->pcontext);
533
pdp->pcontext = None;
536
updateWidgetStates(pdw);
540
Bool openPrinterConnection(PrintDialogWidget pdw)
542
PrintDialogPart *pdp = &pdw->printdialog;
544
Log(("# openPrinterConnection\n"));
546
/* Close any outstanding connection first... */
547
closePrinterConnection(pdw, True);
549
if (!pdp->printer_name) {
550
Log(("# error: openPrinterConnection: No printer name.\n"));
554
if (XpuGetPrinter(pdp->printer_name, &pdp->pdpy, &pdp->pcontext) == False) {
555
Log(("openPrinterConnection: could not open printer.\n"));
559
pdp->paperlist = XpuGetMediumSourceSizeList(pdp->pdpy, pdp->pcontext, &pdp->num_papers);
560
pdp->resolutionlist = XpuGetResolutionList(pdp->pdpy, pdp->pcontext, &pdp->num_resolutions);
561
pdp->orientationlist = XpuGetOrientationList(pdp->pdpy, pdp->pcontext, &pdp->num_orientations);
562
pdp->plexlist = XpuGetPlexList(pdp->pdpy, pdp->pcontext, &pdp->num_plex);
563
pdp->colorspacelist = XpuGetColorspaceList(pdp->pdpy, pdp->pcontext, &pdp->num_colorspaces);
565
pdp->widget_paperlist = xppaperlist_to_widget_paperlist(pdp->paperlist, pdp->num_papers);
566
pdp->widget_resolutionlist = xpresolutionlist_to_widget_resolutionlist(pdp->resolutionlist, pdp->num_resolutions);
567
pdp->widget_orientationlist = xporientationlist_to_widget_orientationlist(pdp->orientationlist, pdp->num_orientations);
568
pdp->widget_plexlist = xpplexlist_to_widget_plexlist(pdp->plexlist, pdp->num_plex);
569
pdp->widget_colorspacelist = xpcolorspacelist_to_widget_colorspacelist(pdp->colorspacelist, pdp->num_colorspaces);
571
updateWidgetStates(pdw);
577
#define DEFAULT_WIDTH 120
578
#undef DEFAULT_INFOLABEL_WIDTH
579
#define DEFAULT_INFOLABEL_WIDTH 250
582
void destroyPrintSetupDialog(PrintDialogWidget pdw)
584
PrintDialogPart *pdp = &pdw->printdialog;
586
if (pdp->setup.popup) {
587
XtDestroyWidget(pdp->setup.popup);
590
/* |XtDestroyWidget(pdp->setup.popup);| above will recursively destroy
591
* all children so we only have to reset the pointers here... */
592
pdp->setup.popup = NULL;
593
pdp->setup.form = NULL;
594
pdp->setup.paperlist = NULL;
595
pdp->setup.resolutionlist = NULL;
596
pdp->setup.orientationlist = NULL;
597
pdp->setup.plexlist = NULL;
598
pdp->setup.colorspacelist = NULL;
599
pdp->setup.ok = NULL;
600
pdp->setup.cancel = NULL;
604
Widget buildPrintSetupDialog(PrintDialogWidget pdw)
606
PrintDialogPart *pdp = &pdw->printdialog;
610
XpuSupportedFlags jobflags,
612
Bool canChangeJobCopies,
615
canChangeOrientation,
619
Log(("buildPrintSetupDialog: no printer connection, opening one....\n"));
620
openPrinterConnection(pdw);
623
Log(("buildPrintSetupDialog: still no printer connection - BAD.\n"));
629
/* Get flags which types of attributes can be modified */
630
jobflags = XpuGetSupportedDocAttributes(pdp->pdpy, pdp->pcontext);
631
docflags = XpuGetSupportedDocAttributes(pdp->pdpy, pdp->pcontext);
632
canChangeJobCopies = (jobflags & XPUATTRIBUTESUPPORTED_COPY_COUNT) == XPUATTRIBUTESUPPORTED_COPY_COUNT;
633
canChangePaperSize = (docflags & XPUATTRIBUTESUPPORTED_DEFAULT_MEDIUM) == XPUATTRIBUTESUPPORTED_DEFAULT_MEDIUM;
634
canChangeResolution = (docflags & XPUATTRIBUTESUPPORTED_DEFAULT_PRINTER_RESOLUTION) == XPUATTRIBUTESUPPORTED_DEFAULT_PRINTER_RESOLUTION;
635
canChangeOrientation = (docflags & XPUATTRIBUTESUPPORTED_CONTENT_ORIENTATION) == XPUATTRIBUTESUPPORTED_CONTENT_ORIENTATION;
636
canChangePlex = (docflags & XPUATTRIBUTESUPPORTED_PLEX) == XPUATTRIBUTESUPPORTED_PLEX;
639
XtSetArg(args[n], XtNallowShellResize, True); n++;
640
pdp->setup.popup = XtCreatePopupShell("setup", transientShellWidgetClass, (Widget)pdw, args, n);
643
pdp->setup.form = XtCreateManagedWidget("form", formWidgetClass, pdp->setup.popup, args, n);
646
listform = XtCreateManagedWidget("list", formWidgetClass, pdp->setup.form, args, n);
649
XtSetArg(args[n], XtNresizable, True); n++;
650
XtSetArg(args[n], XtNforceColumns, True); n++;
651
XtSetArg(args[n], XtNdefaultColumns, 1); n++;
652
XtSetArg(args[n], XtNsensitive, canChangePaperSize); n++;
653
XtSetArg(args[n], XtNlist, pdp->widget_paperlist); n++;
654
XtSetArg(args[n], XtNwidth, DEFAULT_WIDTH); n++;
655
pdp->setup.paperlist = XtCreateManagedWidget("paperlist", listWidgetClass, listform, args, n);
658
XtSetArg(args[n], XtNresizable, True); n++;
659
XtSetArg(args[n], XtNforceColumns, True); n++;
660
XtSetArg(args[n], XtNdefaultColumns, 1); n++;
661
XtSetArg(args[n], XtNsensitive, canChangeResolution); n++;
662
XtSetArg(args[n], XtNlist, pdp->widget_resolutionlist); n++;
663
XtSetArg(args[n], XtNwidth, DEFAULT_WIDTH); n++;
664
pdp->setup.resolutionlist = XtCreateManagedWidget("resolutionlist", listWidgetClass, listform, args, n);
667
XtSetArg(args[n], XtNresizable, True); n++;
668
XtSetArg(args[n], XtNforceColumns, True); n++;
669
XtSetArg(args[n], XtNdefaultColumns, 1); n++;
670
XtSetArg(args[n], XtNsensitive, canChangeOrientation); n++;
671
XtSetArg(args[n], XtNlist, pdp->widget_orientationlist); n++;
672
XtSetArg(args[n], XtNwidth, DEFAULT_WIDTH); n++;
673
pdp->setup.orientationlist = XtCreateManagedWidget("orientationlist", listWidgetClass, listform, args, n);
676
XtSetArg(args[n], XtNresizable, True); n++;
677
XtSetArg(args[n], XtNforceColumns, True); n++;
678
XtSetArg(args[n], XtNdefaultColumns, 1); n++;
679
XtSetArg(args[n], XtNsensitive, canChangePlex); n++;
680
XtSetArg(args[n], XtNlist, pdp->widget_plexlist); n++;
681
XtSetArg(args[n], XtNwidth, DEFAULT_WIDTH); n++;
682
pdp->setup.plexlist = XtCreateManagedWidget("plexlist", listWidgetClass, listform, args, n);
685
XtSetArg(args[n], XtNresizable, True); n++;
686
XtSetArg(args[n], XtNforceColumns, True); n++;
687
XtSetArg(args[n], XtNdefaultColumns, 1); n++;
688
XtSetArg(args[n], XtNsensitive, True); n++;
689
XtSetArg(args[n], XtNlist, pdp->widget_colorspacelist); n++;
690
XtSetArg(args[n], XtNwidth, DEFAULT_WIDTH); n++;
691
pdp->setup.colorspacelist = XtCreateManagedWidget("colorspacelist", listWidgetClass, listform, args, n);
694
XtSetArg(args[n], XtNborderWidth, 0); n++;
695
XtSetArg(args[n], XtNresizable, False); n++;
696
XtSetArg(args[n], XtNjustify, XtJustifyRight); n++;
697
XtSetArg(args[n], XtNwidth, DEFAULT_WIDTH); n++;
698
XtSetArg(args[n], XtNsensitive, canChangeJobCopies); n++;
699
pdp->setup.jobcopieslabel = XtCreateManagedWidget("jobcopieslabel", labelWidgetClass, listform, args, n);
702
XtSetArg(args[n], XtNstring, "1"); n++;
703
XtSetArg(args[n], XtNresizable, True); n++;
704
XtSetArg(args[n], XtNeditType, XawtextEdit); n++;
705
XtSetArg(args[n], XtNsensitive, canChangeJobCopies); n++;
706
pdp->setup.jobcopies = XtCreateManagedWidget("jobcopies", asciiTextWidgetClass, listform, args, n);
707
XtAddCallback(pdp->setup.jobcopies, XtNpositionCallback, printSetupJobCopiesXtProc, pdw);
710
pdp->setup.ok = XtCreateManagedWidget("ok", commandWidgetClass, pdp->setup.form, args, n);
711
XtAddCallback(pdp->setup.ok, XtNcallback, printSetupOKXtProc, pdw);
714
pdp->setup.cancel = XtCreateManagedWidget("cancel", commandWidgetClass, pdp->setup.form, args, n);
715
XtAddCallback(pdp->setup.cancel, XtNcallback, printSetupCancelXtProc, pdw);
717
XtRealizeWidget(pdp->setup.popup);
719
return pdp->setup.popup;
723
#define DEFAULT_WIDTH 150
726
String *xpprinterlist_to_widget_printerlist(XPPrinterList printerlist, int num_printers)
731
names = malloc(sizeof(String *) * (num_printers+1));
735
for(i = 0 ; i < num_printers ; i++)
736
names[i] = printerlist[i].name;
738
names[i] = NULL; /* Terminate the list */
744
String *xppaperlist_to_widget_paperlist(XpuMediumSourceSizeList paperlist, int num_papers)
749
names = malloc(sizeof(String *) * (num_papers+1));
753
for(i = 0 ; i < num_papers ; i++)
754
names[i] = (char *)paperlist[i].medium_name; /* FixMe: tray selection missing */
756
names[i] = NULL; /* Terminate the list */
762
String *xpresolutionlist_to_widget_resolutionlist(XpuResolutionList reslist, int num_resolutions)
767
names = malloc(sizeof(String *) * (num_resolutions+1));
771
for(i = 0 ; i < num_resolutions ; i++)
772
names[i] = (char *)reslist[i].name;
774
names[i] = NULL; /* Terminate the list */
780
String *xporientationlist_to_widget_orientationlist(XpuOrientationList orientationlist, int num_orientations)
785
names = malloc(sizeof(String *) * (num_orientations+1));
789
for(i = 0 ; i < num_orientations ; i++)
790
names[i] = (char *)orientationlist[i].orientation;
792
names[i] = NULL; /* Terminate the list */
798
String *xpplexlist_to_widget_plexlist(XpuPlexList plexlist, int num_plex)
803
names = malloc(sizeof(String *) * (num_plex+1));
807
for(i = 0 ; i < num_plex ; i++)
808
names[i] = (char *)plexlist[i].plex;
810
names[i] = NULL; /* Terminate the list */
816
String *xpcolorspacelist_to_widget_colorspacelist(XpuColorspaceList colorspacelist, int num_colorspaces)
821
names = malloc(sizeof(String *) * (num_colorspaces+1));
825
for(i = 0 ; i < num_colorspaces ; i++)
826
names[i] = (char *)colorspacelist[i].name;
828
names[i] = NULL; /* Terminate the list */
834
printerSelectionPrinterSelectedXtProc(Widget w, XtPointer client_data, XtPointer callData)
836
PrintDialogWidget pdw = (PrintDialogWidget)client_data;
837
PrintDialogPart *pdp = &pdw->printdialog;
838
XawListReturnStruct *lrs = (XawListReturnStruct *)callData;
841
Log(("## user selected a printer\n"));
843
list_index = lrs->list_index;
844
if (list_index == XAW_LIST_NONE) {
845
Log(("printerSelectionPrinterSelectedXtProc: Nothing selected.\n"));
849
Log(("selected printer is '%d'/'%s'/'%s'\n",
850
list_index, lrs->string, NULLSTR(pdp->printerlist[list_index].name)));
852
/* Enable OK button */
853
XtVaSetValues(pdp->selectPrinter.ok, XtNsensitive, True, NULL);
857
printSelectPrinterXtProc(Widget w, XtPointer client_data, XtPointer callData)
859
PrintDialogWidget pdw = (PrintDialogWidget)client_data;
860
PrintDialogPart *pdp = &pdw->printdialog;
862
Log(("## select printer!\n"));
864
if (!pdp->selectPrinter.popup) {
865
if (!buildPrinterSelectionDialog(pdw)) {
866
Log(("printSelectPrinterXtProc: buildPrinterSelectionDialog failure.\n"));
871
center_popup((Widget)pdw, pdp->selectPrinter.popup);
873
XtPopup(pdp->selectPrinter.popup, XtGrabExclusive);
877
printerSelectionClose(PrintDialogWidget pdw)
879
PrintDialogPart *pdp = &pdw->printdialog;
881
if (pdp->selectPrinter.popup) {
882
XtPopdown(pdp->selectPrinter.popup);
887
printerSelectionOKXtProc(Widget w, XtPointer client_data, XtPointer callData)
889
PrintDialogWidget pdw = (PrintDialogWidget)client_data;
890
PrintDialogPart *pdp = &pdw->printdialog;
891
XawListReturnStruct *lrs;
894
Log(("## printerSelectionOKXtProc: closing printer selection!\n"));
896
/* Copy current selection in printer list widget and open a printer connection */
897
lrs = XawListShowCurrent(pdp->selectPrinter.list);
899
Log(("printerSelectionOKXtProc: |lrs|==NULL\n"));
903
list_index = lrs->list_index;
904
if (lrs->list_index == XAW_LIST_NONE) {
905
Log(("printerSelectionOKXtProc: rs->list_index == XAW_LIST_NONE\n"));
910
/* Set printer name and description in main dialog */
911
XtVaSetValues(pdp->main.name, XtNlabel, NULLSTR(pdp->printerlist[list_index].name), NULL);
912
XtVaSetValues(pdp->main.desc, XtNlabel, NULLSTR(pdp->printerlist[list_index].desc), NULL);
914
if (pdp->printer_name)
915
free(pdp->printer_name);
916
pdp->printer_name = strdup(lrs->string);
918
/* Close any outstanding printer connection since user has selected
919
* a different printer */
920
closePrinterConnection(pdw, True);
922
printerSelectionClose(pdw);
928
printerSelectionCancelXtProc(Widget w, XtPointer client_data, XtPointer callData)
930
PrintDialogWidget pdw = (PrintDialogWidget)client_data;
931
Log(("## printerSelectionCancelXtProc: closing printer selection!\n"));
933
printerSelectionClose(pdw);
937
Bool buildPrinterSelectionDialog(PrintDialogWidget pdw)
939
PrintDialogPart *pdp = &pdw->printdialog;
945
XtSetArg(args[n], XtNallowShellResize, True); n++;
946
pdp->selectPrinter.popup = XtCreatePopupShell("printerselection", transientShellWidgetClass, (Widget)pdw, args, n);
949
pdp->selectPrinter.form = XtCreateManagedWidget("form", formWidgetClass, pdp->selectPrinter.popup, args, n);
952
XtSetArg(args[n], XtNresizable, True); n++;
953
XtSetArg(args[n], XtNforceColumns, True); n++;
954
XtSetArg(args[n], XtNdefaultColumns, 1); n++;
955
XtSetArg(args[n], XtNlist, pdp->widget_printerlist); n++;
956
XtSetArg(args[n], XtNwidth, DEFAULT_WIDTH); n++;
957
pdp->selectPrinter.list = XtCreateManagedWidget("list", listWidgetClass, pdp->selectPrinter.form, args, n);
958
XtAddCallback(pdp->selectPrinter.list, XtNcallback, printerSelectionPrinterSelectedXtProc, pdw);
961
XtSetArg(args[n], XtNsensitive, False); n++;
962
pdp->selectPrinter.ok = XtCreateManagedWidget("ok", commandWidgetClass, pdp->selectPrinter.form, args, n);
963
XtAddCallback(pdp->selectPrinter.ok, XtNcallback, printerSelectionOKXtProc, pdw);
966
pdp->selectPrinter.cancel = XtCreateManagedWidget("cancel", commandWidgetClass, pdp->selectPrinter.form, args, n);
967
XtAddCallback(pdp->selectPrinter.cancel, XtNcallback, printerSelectionCancelXtProc, pdw);
969
XtRealizeWidget(pdp->selectPrinter.popup);
975
void destroyPrinterSelectionDialog(PrintDialogWidget pdw)
977
PrintDialogPart *pdp = &pdw->printdialog;
979
if (pdp->selectPrinter.popup) {
980
XtDestroyWidget(pdp->selectPrinter.popup);
983
/* |XtDestroyWidget(pdp->setup.popup);| above will recursively destroy
984
* all children so we only have to reset the pointers here... */
985
pdp->selectPrinter.popup = NULL;
986
pdp->selectPrinter.form = NULL;
987
pdp->selectPrinter.list = NULL;
988
pdp->selectPrinter.popup = NULL;
989
pdp->selectPrinter.cancel = NULL;
994
* createprintdialogchildren
997
* w - print dialog widget
1000
* Creates the print dialog widgets.
1006
createprintdialogchildren(Widget w)
1010
PrintDialogWidget pdw = (PrintDialogWidget)w;
1011
PrintDialogPart *pdp = &pdw->printdialog;
1012
const char *default_printername = NULL,
1013
*default_printerdesc = NULL;
1014
Bool has_default_printer = False;
1016
pdp->printerlist = XpuGetPrinterList(NULL, &pdp->num_printers);
1017
pdp->widget_printerlist = xpprinterlist_to_widget_printerlist(pdp->printerlist, pdp->num_printers);
1019
if (pdp->num_printers > 0) {
1020
if (pdp->printerlist[0].name && strlen(pdp->printerlist[0].name)) {
1021
/* XprintUtils moves the default printer to the top */
1022
default_printername = pdp->printerlist[0].name;
1023
default_printerdesc = pdp->printerlist[0].desc;
1024
pdp->printer_name = strdup(pdp->printerlist[0].name);
1025
has_default_printer = True;
1030
PrintMsg(("No Xprint servers could be found.\n"
1031
"Check whether the XPSERVERLIST environment variable contains any valid Xprint server(s).\n"));
1035
XtSetArg(args[n], XtNborderWidth, 0); n++;
1036
pdp->main.form = XtCreateManagedWidget("main", formWidgetClass, (Widget)pdw, args, n);
1039
pdp->main.innerform = XtCreateManagedWidget("innerform", formWidgetClass, pdp->main.form, args, n);
1042
XtSetArg(args[n], XtNborderWidth, 0); n++;
1043
XtSetArg(args[n], XtNresizable, False); n++;
1044
XtSetArg(args[n], XtNjustify, XtJustifyRight); n++;
1045
XtSetArg(args[n], XtNwidth, DEFAULT_WIDTH); n++;
1046
pdp->main.desclabel = XtCreateManagedWidget("desclabel", labelWidgetClass, pdp->main.innerform, args, n);
1049
XtSetArg(args[n], XtNborderWidth, 0); n++;
1050
XtSetArg(args[n], XtNresizable, False); n++;
1051
XtSetArg(args[n], XtNjustify, XtJustifyLeft); n++;
1052
XtSetArg(args[n], XtNwidth, DEFAULT_INFOLABEL_WIDTH); n++;
1053
XtSetArg(args[n], XtNlabel, default_printerdesc?default_printerdesc:"-"); n++;
1054
pdp->main.desc = XtCreateManagedWidget("desc", labelWidgetClass, pdp->main.innerform, args, n);
1057
XtSetArg(args[n], XtNsensitive, has_default_printer); n++;
1058
pdp->main.info = XtCreateManagedWidget("info", commandWidgetClass, pdp->main.innerform, args, n);
1060
XtAddCallback(pdp->main.info, XtNcallback, printerInfoXtProc, pdw);
1063
XtSetArg(args[n], XtNborderWidth, 0); n++;
1064
XtSetArg(args[n], XtNresizable, False); n++;
1065
XtSetArg(args[n], XtNjustify, XtJustifyRight); n++;
1066
XtSetArg(args[n], XtNwidth, DEFAULT_WIDTH); n++;
1067
pdp->main.namelabel = XtCreateManagedWidget("namelabel", labelWidgetClass, pdp->main.innerform, args, n);
1070
XtSetArg(args[n], XtNborderWidth, 0); n++;
1071
XtSetArg(args[n], XtNresizable, False); n++;
1072
XtSetArg(args[n], XtNjustify, XtJustifyLeft); n++;
1073
XtSetArg(args[n], XtNlabel, default_printername?default_printername:"-"); n++;
1074
XtSetArg(args[n], XtNwidth, DEFAULT_INFOLABEL_WIDTH); n++;
1075
pdp->main.name = XtCreateManagedWidget("name", labelWidgetClass, pdp->main.innerform, args, n);
1078
pdp->main.selectprinter = XtCreateManagedWidget("selectprinter", commandWidgetClass, pdp->main.innerform, args, n);
1079
XtAddCallback(pdp->main.selectprinter, XtNcallback, printSelectPrinterXtProc, pdw);
1081
/* Line: "File selection" */
1084
XtSetArg(args[n], XtNborderWidth, 0); n++;
1085
XtSetArg(args[n], XtNresizable, False); n++;
1086
XtSetArg(args[n], XtNjustify, XtJustifyRight); n++;
1087
XtSetArg(args[n], XtNwidth, DEFAULT_WIDTH); n++;
1088
XtSetArg(args[n], XtNsensitive, False); n++;
1089
pdp->main.filenamelabel = XtCreateManagedWidget("filenamelabel", labelWidgetClass, pdp->main.innerform, args, n);
1092
XtSetArg(args[n], XtNborderWidth, 0); n++;
1093
XtSetArg(args[n], XtNresizable, False); n++;
1094
XtSetArg(args[n], XtNjustify, XtJustifyLeft); n++;
1095
XtSetArg(args[n], XtNlabel, "-"); n++;
1096
XtSetArg(args[n], XtNwidth, DEFAULT_INFOLABEL_WIDTH); n++;
1097
XtSetArg(args[n], XtNsensitive, False); n++;
1098
pdp->main.filename = XtCreateManagedWidget("filename", labelWidgetClass, pdp->main.innerform, args, n);
1101
XtSetArg(args[n], XtNsensitive, False); n++;
1102
pdp->main.selectfile = XtCreateManagedWidget("selectfile", commandWidgetClass, pdp->main.innerform, args, n);
1103
XtAddCallback(pdp->main.selectfile, XtNcallback, printSelectFileXtProc, pdw);
1105
/* Line: Misc (Print destination toggles, copy-count etc.)*/
1107
XtSetArg(args[n], XtNstate, True); n++;
1108
pdp->main.printtoprinter = XtCreateManagedWidget("printtoprinter", toggleWidgetClass, pdp->main.innerform, args, n);
1109
XtAddCallback(pdp->main.printtoprinter, XtNcallback, printDialogDestXtProc, pdw);
1112
XtSetArg(args[n], XtNstate, False); n++;
1113
pdp->main.printtofile = XtCreateManagedWidget("printtofile", toggleWidgetClass, pdp->main.innerform, args, n);
1114
XtAddCallback(pdp->main.printtofile, XtNcallback, printDialogDestXtProc, pdw);
1116
/* End-of-Inner-Form-Content */
1119
XtSetArg(args[n], XtNsensitive, has_default_printer); n++;
1120
pdp->main.ok = XtCreateManagedWidget("ok", commandWidgetClass, pdp->main.form, args, n);
1121
XtAddCallback(pdp->main.ok, XtNcallback, printOKXtProc, pdw);
1124
XtSetArg(args[n], XtNsensitive, has_default_printer); n++;
1125
pdp->main.setup = XtCreateManagedWidget("setup", commandWidgetClass, pdp->main.form, args, n);
1126
XtAddCallback(pdp->main.setup, XtNcallback, printSetupXtProc, pdw);
1129
pdp->main.cancel = XtCreateManagedWidget("cancel", commandWidgetClass, pdp->main.form, args, n);
1130
XtAddCallback(pdp->main.cancel, XtNcallback, printCancelXtProc, pdw);
1136
static void XawPrintDialogConstraintInitialize(Widget, Widget, ArgList, Cardinal *);
1137
static void XawPrintDialogGetValuesHook(Widget, ArgList, Cardinal*);
1138
static void XawPrintDialogInitialize(Widget, Widget, ArgList, Cardinal*);
1139
static void XawPrintDialogDestroy(Widget);
1140
static Boolean XawPrintDialogSetValues(Widget, Widget, Widget, ArgList, Cardinal *);
1145
static XtResource resources[] = {
1151
XtOffsetOf(PrintDialogRec, printdialog.icon),
1156
XawNOkCallback, XtCCallback, XtRCallback,
1157
sizeof(XtCallbackList), XtOffsetOf(PrintDialogRec, printdialog.ok_callback),
1158
XtRImmediate, (XtPointer)NULL
1161
XawNCancelCallback, XtCCallback, XtRCallback,
1162
sizeof(XtCallbackList), XtOffsetOf(PrintDialogRec, printdialog.cancel_callback),
1163
XtRImmediate, (XtPointer)NULL
1167
PrintDialogClassRec printdialogClassRec = {
1170
(WidgetClass)&formClassRec, /* superclass */
1171
"PrintDialog", /* class_name */
1172
sizeof(PrintDialogRec), /* widget_size */
1173
XawInitializeWidgetSet, /* class_initialize */
1174
NULL, /* class_part init */
1175
False, /* class_inited */
1176
XawPrintDialogInitialize, /* initialize */
1177
NULL, /* initialize_hook */
1178
XtInheritRealize, /* realize */
1180
0, /* num_actions */
1181
resources, /* resources */
1182
XtNumber(resources), /* num_resources */
1183
NULLQUARK, /* xrm_class */
1184
True, /* compress_motion */
1185
True, /* compress_exposure */
1186
True, /* compress_enterleave */
1187
False, /* visible_interest */
1188
XawPrintDialogDestroy, /* destroy */
1189
XtInheritResize, /* resize */
1190
XtInheritExpose, /* expose */
1191
XawPrintDialogSetValues, /* set_values */
1192
NULL, /* set_values_hook */
1193
XtInheritSetValuesAlmost, /* set_values_almost */
1194
XawPrintDialogGetValuesHook, /* get_values_hook */
1195
NULL, /* accept_focus */
1196
XtVersion, /* version */
1197
NULL, /* callback_private */
1198
NULL, /* tm_table */
1199
XtInheritQueryGeometry, /* query_geometry */
1200
XtInheritDisplayAccelerator, /* display_accelerator */
1201
NULL, /* extension */
1205
XtInheritGeometryManager, /* geometry_manager */
1206
XtInheritChangeManaged, /* change_managed */
1207
XtInheritInsertChild, /* insert_child */
1208
XtInheritDeleteChild, /* delete_child */
1209
NULL, /* extension */
1213
NULL, /* subresourses */
1214
0, /* subresource_count */
1215
sizeof(PrintDialogConstraintsRec), /* constraint_size */
1216
XawPrintDialogConstraintInitialize, /* initialize */
1218
NULL, /* set_values */
1219
NULL, /* extension */
1223
XtInheritLayout, /* layout */
1227
NULL, /* extension */
1231
WidgetClass printDialogWidgetClass = (WidgetClass)&printdialogClassRec;
1238
XawPrintDialogInitialize(Widget request, Widget cnew, ArgList args, Cardinal *num_args)
1240
PrintDialogWidget dw = (PrintDialogWidget)cnew;
1242
Cardinal arg_cnt = 0;
1244
XtSetArg(arglist[arg_cnt], XtNborderWidth, 0); arg_cnt++;
1245
XtSetArg(arglist[arg_cnt], XtNleft, XtChainLeft); arg_cnt++;
1247
if (dw->printdialog.icon != (Pixmap)0) {
1248
XtSetArg(arglist[arg_cnt], XtNbitmap, dw->printdialog.icon); arg_cnt++;
1249
XtSetArg(arglist[arg_cnt], XtNright, XtChainLeft); arg_cnt++;
1250
dw->printdialog.iconW = XtCreateManagedWidget("icon", labelWidgetClass,
1251
cnew, arglist, arg_cnt);
1253
XtSetArg(arglist[arg_cnt], XtNfromHoriz, dw->printdialog.iconW); arg_cnt++;
1256
dw->printdialog.iconW = NULL;
1259
createprintdialogchildren((Widget)dw);
1264
XawPrintDialogConstraintInitialize(Widget request, Widget cnew,
1265
ArgList args, Cardinal *num_args)
1267
PrintDialogWidget dw = (PrintDialogWidget)cnew->core.parent;
1268
PrintDialogConstraints constraint = (PrintDialogConstraints)cnew->core.constraints;
1270
if (!XtIsSubclass(cnew, commandWidgetClass)) /* if not a button */
1271
return; /* then just use defaults */
1273
constraint->form.left = constraint->form.right = XtChainLeft;
1274
constraint->form.vert_base = dw->printdialog.main.form;
1276
if (dw->composite.num_children > 1) {
1277
WidgetList children = dw->composite.children;
1280
for (childP = children + dw->composite.num_children - 1;
1281
childP >= children; childP-- ) {
1282
if (*childP == dw->printdialog.main.form)
1284
if (XtIsManaged(*childP) &&
1285
XtIsSubclass(*childP, commandWidgetClass)) {
1286
constraint->form.horiz_base = *childP;
1294
#define NUM_CHECKS 1
1297
XawPrintDialogSetValues(Widget current, Widget request, Widget cnew,
1298
ArgList in_args, Cardinal *in_num_args)
1300
PrintDialogWidget w = (PrintDialogWidget)cnew;
1301
PrintDialogWidget old = (PrintDialogWidget)current;
1304
Bool checks[NUM_CHECKS];
1306
for (i = 0; i < NUM_CHECKS; i++)
1309
for (i = 0; i < *in_num_args; i++) {
1310
if (!strcmp(XtNicon, in_args[i].name))
1311
checks[ICON] = True;
1315
if (w->printdialog.icon != 0) {
1316
XtSetArg(args[0], XtNbitmap, w->printdialog.icon);
1317
if (old->printdialog.iconW != NULL) {
1318
XtSetValues(old->printdialog.iconW, args, 1);
1321
XtSetArg(args[1], XtNborderWidth, 0);
1322
XtSetArg(args[2], XtNleft, XtChainLeft);
1323
XtSetArg(args[3], XtNright, XtChainLeft);
1324
w->printdialog.iconW = XtCreateWidget("icon", labelWidgetClass,
1326
XtManageChild(w->printdialog.iconW);
1329
else if (old->printdialog.icon != 0) {
1330
XtDestroyWidget(old->printdialog.iconW);
1331
w->printdialog.iconW = NULL;
1340
* XawPrintDialogGetValuesHook
1343
* w - Print Dialog Widget
1344
* args - argument list
1345
* num_args - number of args
1348
* This is a get values hook routine that gets the values in the dialog.
1351
XawPrintDialogGetValuesHook(Widget w, ArgList args, Cardinal *num_args)
1357
XawPrintDialogDestroy(Widget w)
1359
PrintDialogWidget pdw = (PrintDialogWidget)w;
1360
Log(("# XawPrintDialogDestroy: start.\n"));
1362
destroyPrintSetupDialog(pdw);
1363
destroyPrinterSelectionDialog(pdw);
1364
closePrinterConnection(pdw, True);
1366
Log(("# XawPrintDialogDestroy: done.\n"));
1371
* XawPrintDialogClosePrinterConnection
1374
* w - Print Dialog Widget
1375
* closeDisplay - Boolean which decides whether |Display *|
1376
* and |XPContext| should be disposed, too.
1379
* The print display connection is owned by the print dialog
1381
* If the application wishes to close the display connection
1382
* to the print server, either to close it itself or force
1383
* a disconnection for other reasons this function can be used.
1387
* 2. After this function returns all resources returned by the
1388
* print dialog which are related to the status of the printer
1389
* connection are stale.
1392
XawPrintDialogClosePrinterConnection(Widget w, Bool closeDisplay)
1394
closePrinterConnection((PrintDialogWidget)w, closeDisplay);