68 lines
2.2 KiB
Diff
68 lines
2.2 KiB
Diff
|
--- 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
|
||
|
}
|
||
|
|
||
|
|