Bug#757363: libqtgui4: Qt print dialog's duplex setting not inferred from CUPS properties
Package: libqtgui4
Version: 4:4.8.2+dfsg-11
Severity: normal
Tags: upstream patch
Qt's printing dialog (as used, for example, by Iceweasel) does not infer the duplex setting from CUPS's printer options.
This is a known bug in Qt, see https://bugs.kde.org/180051.
A patch is available at http://bugsfiles.kde.org/attachment.cgi?id=41187.
We've been using this pÃatch for ages, I include a revised version for 4.8.2.
-- System Information:
Debian Release: 7.6
APT prefers stable
APT policy: (500, 'stable')
Architecture: amd64 (x86_64)
Foreign Architectures: i386
Kernel: Linux 3.10.42.wap (SMP w/2 CPU cores)
Locale: LANG=de_DE@euro, LC_CTYPE=de_DE@euro (charmap=ISO-8859-15)
Shell: /bin/sh linked to /bin/dash
Versions of packages libqtgui4 depends on:
ii fontconfig 2.9.0-7.1
ii libaudio2 1.9.3-5wheezy1
ii libc6 2.13-38+deb7u3
ii libfontconfig1 2.9.0-7.1
ii libfreetype6 2.4.9-1.1
ii libgcc1 1:4.7.2-5
ii libglib2.0-0 2.33.12+really2.32.4-5
ii libice6 2:1.0.8-2
ii libjpeg8 8d-1+deb7u1
ii libmng1 1.0.10-3
ii libpng12-0 1.2.49-1
ii libqtcore4 4:4.8.2+dfsg-11
ii libsm6 2:1.2.1-2
ii libstdc++6 4.7.2-5
ii libtiff4 3.9.6-11
ii libx11-6 2:1.5.0-1+deb7u1
ii libxext6 2:1.3.1-2+deb7u1
ii libxrender1 1:0.9.7-1+deb7u1
ii multiarch-support 2.13-38+deb7u3
ii zlib1g 1:1.2.7.dfsg-13
Versions of packages libqtgui4 recommends:
ii libcups2 1.5.3-5+deb7u4
Versions of packages libqtgui4 suggests:
pn qt4-qtconfig <none>
-- no debconf information
Index: src/gui/dialogs/qprintdialog_unix.cpp
===================================================================
--- src/gui/dialogs/qprintdialog_unix.cpp (revision 3625)
+++ src/gui/dialogs/qprintdialog_unix.cpp (revision 3626)
@@ -579,6 +579,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
Index: src/gui/painting/qprinter.cpp
===================================================================
--- src/gui/painting/qprinter.cpp (revision 3625)
+++ src/gui/painting/qprinter.cpp (revision 3626)
@@ -609,6 +609,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
}
/*!
Reply to: