diff --git a/src/solaris/classes/sun/print/CUPSPrinter.java b/src/solaris/classes/sun/print/CUPSPrinter.java index a54316e09418b68d2537e84b6d940ff811169b48..c8f902090d9981582c6de681f80ee7088d3fc0f1 100644 --- a/src/solaris/classes/sun/print/CUPSPrinter.java +++ b/src/solaris/classes/sun/print/CUPSPrinter.java @@ -140,6 +140,9 @@ public class CUPSPrinter { return cupsCustomMediaSNames; } + public int getDefaultMediaIndex() { + return ((pageSizes.length >1) ? (int)(pageSizes[pageSizes.length -1]) : 0); + } /** * Returns array of MediaPrintableArea derived from PPD. @@ -201,8 +204,15 @@ public class CUPSPrinter { // add this new custom msn to MediaSize array if ((width > 0.0) && (length > 0.0)) { + try { new MediaSize(width, length, Size2DSyntax.INCH, msn); + } catch (IllegalArgumentException e) { + /* PDF printer in Linux for Ledger paper causes + "IllegalArgumentException: X dimension > Y dimension". + We rotate based on IPP spec. */ + new MediaSize(length, width, Size2DSyntax.INCH, msn); + } } } diff --git a/src/solaris/classes/sun/print/IPPPrintService.java b/src/solaris/classes/sun/print/IPPPrintService.java index 28d6e1c0ccfb3d29bc608a7c443e8c6db0265e87..1be02c950052139e2b429775d3552dfb84ef9538 100644 --- a/src/solaris/classes/sun/print/IPPPrintService.java +++ b/src/solaris/classes/sun/print/IPPPrintService.java @@ -414,6 +414,7 @@ public class IPPPrintService implements PrintService, SunPrinterJobService { mediaSizeNames = cps.getMediaSizeNames(); mediaTrays = cps.getMediaTrays(); customMediaSizeNames = cps.getCustomMediaSizeNames(); + defaultMediaIndex = cps.getDefaultMediaIndex(); urlConnection.disconnect(); init = true; return; @@ -1432,7 +1433,9 @@ public class IPPPrintService implements PrintService, SunPrinterJobService { return JobSheets.STANDARD; } } else if (category == Media.class) { - defaultMediaIndex = 0; + if (defaultMediaIndex == -1) { + defaultMediaIndex = 0; + } if (mediaSizeNames.length == 0) { String defaultCountry = Locale.getDefault().getCountry(); if (defaultCountry != null && @@ -1448,17 +1451,7 @@ public class IPPPrintService implements PrintService, SunPrinterJobService { if (attribClass != null) { String name = attribClass.getStringValue(); if (isCupsPrinter) { - for (int i=0; i< customMediaSizeNames.length; i++) { - //REMIND: get default from PPD. In native _getMedia, - // move default (ppd_option_t->defchoice) to index 0. - // In the meantime, use indexOf because PPD name - // may be different from the IPP attribute name. - if (customMediaSizeNames[i].toString().indexOf(name) - != -1) { - defaultMediaIndex = i; - return mediaSizeNames[defaultMediaIndex]; - } - } + return mediaSizeNames[defaultMediaIndex]; } else { for (int i=0; i< mediaSizeNames.length; i++) { if (mediaSizeNames[i].toString().indexOf(name) != -1) { diff --git a/src/solaris/native/sun/awt/CUPSfuncs.c b/src/solaris/native/sun/awt/CUPSfuncs.c index 653428b84d8be0f680654e75f804429b7c57c1f7..d7d989629bb5535a3743816891e44b125f07df3e 100644 --- a/src/solaris/native/sun/awt/CUPSfuncs.c +++ b/src/solaris/native/sun/awt/CUPSfuncs.c @@ -349,7 +349,8 @@ Java_sun_print_CUPSPrinter_getPageSizes(JNIEnv *env, // create array of dimensions - (num_choices * 6) //to cover length & height DPRINTF( "CUPSfuncs::option->num_choices %d\n", option->num_choices) - sizeArray = (*env)->NewFloatArray(env, option->num_choices*6); + // +1 is for storing the default media index + sizeArray = (*env)->NewFloatArray(env, option->num_choices*6+1); if (sizeArray == NULL) { unlink(filename); j2d_ppdClose(ppd); @@ -369,6 +370,10 @@ Java_sun_print_CUPSPrinter_getPageSizes(JNIEnv *env, } for (i = 0; inum_choices; i++) { choice = (option->choices)+i; + // get the index of the default page + if (!strcmp(choice->choice, option->defchoice)) { + dims[option->num_choices*6] = (float)i; + } size = j2d_ppdPageSize(ppd, choice->choice); if (size != NULL) { // paper width and height