Blob Blame History Raw
--- a/src/gui/dialogs/qprintdialog_unix.cpp
+++ b/src/gui/dialogs/qprintdialog_unix.cpp
@@ -154,6 +154,9 @@
     bool checkFields();
     void setupPrinter();
     void setOptionsPane(QPrintDialogPrivate *pane);
+#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY)
+    void setCupsProperties();
+#endif
 
 // slots
     void _q_printerChanged(int index);
@@ -942,7 +945,7 @@
 
 void QUnixPrintWidgetPrivate::_q_btnPropertiesClicked()
 {
-    if (propertiesDialog == 0) {
+    if (!propertiesDialog) {
         propertiesDialog = new QPrintPropertiesDialog(q);
         propertiesDialog->setResult(QDialog::Rejected);
     }
@@ -962,6 +965,35 @@
     propertiesDialog->exec();
 }
 
+#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY)
+void QUnixPrintWidgetPrivate::setCupsProperties()
+{
+    if (cups && QCUPSSupport::isAvailable()) {
+        QPrintEngine *engine = printer->printEngine();
+        const ppd_option_t* pageSizes = cups->pageSizes();
+        QByteArray cupsPageSize;
+        for (int i = 0; i < pageSizes->num_choices; ++i) {
+            if (static_cast<int>(pageSizes->choices[i].marked) == 1)
+                cupsPageSize = pageSizes->choices[i].choice;
+        }
+        engine->setProperty(PPK_CupsStringPageSize, QString::fromLatin1(cupsPageSize));
+        engine->setProperty(PPK_CupsOptions, cups->options());
+
+        QRect pageRect = cups->pageRect(cupsPageSize);
+        engine->setProperty(PPK_CupsPageRect, pageRect);
+
+        QRect paperRect = cups->paperRect(cupsPageSize);
+        engine->setProperty(PPK_CupsPaperRect, paperRect);
+
+        for (int ps = 0; ps < QPrinter::NPaperSize; ++ps) {
+            QPdf::PaperSize size = QPdf::paperSize(QPrinter::PaperSize(ps));
+            if (size.width == paperRect.width() && size.height == paperRect.height())
+                printer->setPaperSize(static_cast<QPrinter::PaperSize>(ps));
+        }
+    }
+}
+#endif
+
 void QUnixPrintWidgetPrivate::setupPrinter()
 {
     const int printerCount = widget.printers->count();
@@ -986,6 +1018,10 @@
 
     if (propertiesDialog && propertiesDialog->result() == QDialog::Accepted)
         propertiesDialog->setupPrinter();
+#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY)
+    if (!propertiesDialog)
+        setCupsProperties();
+#endif
 }