diff -ur qt-everywhere-opensource-src-4.6.2/src/gui/dialogs/qprintdialog_unix.cpp qt-everywhere-opensource-src-4.6.2-cups/src/gui/dialogs/qprintdialog_unix.cpp --- qt-everywhere-opensource-src-4.6.2/src/gui/dialogs/qprintdialog_unix.cpp 2010-02-11 16:55:22.000000000 +0100 +++ qt-everywhere-opensource-src-4.6.2-cups/src/gui/dialogs/qprintdialog_unix.cpp 2010-02-28 04:34:16.000000000 +0100 @@ -569,6 +569,32 @@ void QPrintDialogPrivate::selectPrinter(QCUPSSupport *cups) { options.duplex->setEnabled(cups && cups->ppdOption("Duplex")); + + if (cups) { + const ppd_option_t* duplex = cups->ppdOption("Duplex"); + if (duplex) { + // copy default ppd duplex to qt dialog + if (qstrcmp(duplex->defchoice, "DuplexTumble") == 0) + options.duplexShort->setChecked(true); + else if (qstrcmp(duplex->defchoice, "DuplexNoTumble") == 0) + options.duplexLong->setChecked(true); + else + options.noDuplex->setChecked(true); + } + + if (cups->currentPPD()) { + // set default color + if (cups->currentPPD()->color_device) + options.color->setChecked(true); + else + options.grayscale->setChecked(true); + } + + // set collation + const ppd_option_t *collate = cups->ppdOption("Collate"); + if (collate) + options.collate->setChecked(qstrcmp(collate->defchoice, "True")==0); + } } #endif diff -ur qt-everywhere-opensource-src-4.6.2/src/gui/painting/qprinter.cpp qt-everywhere-opensource-src-4.6.2-cups/src/gui/painting/qprinter.cpp --- qt-everywhere-opensource-src-4.6.2/src/gui/painting/qprinter.cpp 2010-02-11 16:55:22.000000000 +0100 +++ qt-everywhere-opensource-src-4.6.2-cups/src/gui/painting/qprinter.cpp 2010-02-28 04:55:15.000000000 +0100 @@ -627,6 +627,44 @@ && d_ptr->paintEngine->type() != QPaintEngine::MacPrinter) { setOutputFormat(QPrinter::PdfFormat); } + +#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY) + // fill in defaults from ppd file + QCUPSSupport cups; + + int printernum = -1; + for (int i = 0; i < cups.availablePrintersCount(); i++) { + if (printerName().toLocal8Bit() == cups.availablePrinters()[i].name) + printernum = i; + } + if (printernum >= 0) { + cups.setCurrentPrinter(printernum); + + const ppd_option_t* duplex = cups.ppdOption("Duplex"); + if (duplex) { + // copy default ppd duplex to qt dialog + if (qstrcmp(duplex->defchoice, "DuplexTumble") == 0) + setDuplex(DuplexShortSide); + else if (qstrcmp(duplex->defchoice, "DuplexNoTumble") == 0) + setDuplex(DuplexLongSide); + else + setDuplex(DuplexNone); + } + + if (cups.currentPPD()) { + // set default color + if (cups.currentPPD()->color_device) + setColorMode(Color); + else + setColorMode(GrayScale); + } + + // set collation + const ppd_option_t *collate = cups.ppdOption("Collate"); + if (collate) + setCollateCopies(qstrcmp(collate->defchoice, "True")==0); + } +#endif } /*!