Hello community, here is the log from the commit of package libqt5-qtbase for openSUSE:Factory checked in at 2017-12-23 12:15:29 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libqt5-qtbase (Old) and /work/SRC/openSUSE:Factory/.libqt5-qtbase.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libqt5-qtbase" Sat Dec 23 12:15:29 2017 rev:71 rq:558896 version:5.10.0 Changes: -------- --- /work/SRC/openSUSE:Factory/libqt5-qtbase/libqt5-qtbase.changes 2017-12-08 12:53:34.153960177 +0100 +++ /work/SRC/openSUSE:Factory/.libqt5-qtbase.new/libqt5-qtbase.changes 2017-12-23 12:15:53.318108733 +0100 @@ -1,0 +2,50 @@ +Wed Dec 20 10:41:16 UTC 2017 - [email protected] + +- Add 0001-Fix-custom-page-size-handling-in-the-Unix-print-dial.patch + to fix custom page size handling in the Unix print dialog (QTBUG-58733) + +------------------------------------------------------------------- +Fri Dec 15 17:08:31 UTC 2017 - [email protected] + +- Add patches from upstream to reintroduce the advanced tab in + the Qt printer properties dialog: + 0001-Remove-QPrintDialogPrivate-applyPrinterProperties-no.patch + 0002-Remove-QUnixPrintWidgetPrivate-applyPrinterPropertie.patch + 0003-Remove-QPrintPropertiesDialog-applyPrinterProperties.patch + 0004-Remove-QCupsJobWidget-setPrinter.patch + 0005-Remove-QPrintPropertiesDialog-selectPrinter.patch + 0006-Remove-QPageSetupWidget-selectPrinter.patch + 0007-Introduce-QPrintDevice-property-setProperty.patch + 0008-Allow-access-to-ppd-file-and-ppdMarkOption-via-QPpdP.patch + 0009-QPlatformPrintDevice-use-QVector-not-QList-in-the-AP.patch + 0010-Reintroduce-the-Advanced-tab-in-the-QPrintProperties.patch + 0011-QtPrintSupport-Fix-build.patch +- Small change in 0001-Add-remote-print-queue-support.patch so + 0007-Allow-access-to-ppd-file-and-ppdMarkOption-via-QPpdP.patch + applies cleanly. + +------------------------------------------------------------------- +Fri Dec 8 23:11:00 UTC 2017 - [email protected] + +- Update the license tag (boo#967696) + +------------------------------------------------------------------- +Thu Dec 7 12:18:04 UTC 2017 - [email protected] + +- Update to 5.10.0 final + * New bugfix release + +------------------------------------------------------------------- +Sun Dec 3 14:12:46 UTC 2017 - [email protected] + +- Update to 5.10.0 RC 2 + * New bugfix release + +------------------------------------------------------------------- +Thu Nov 30 09:47:10 UTC 2017 - [email protected] + +- Update to 5.10.0 RC 1 + * New bugfix release +- Refresh tell-the-truth-about-private-api.patch + +------------------------------------------------------------------- @@ -11,0 +62,23 @@ +Wed Nov 15 11:41:32 UTC 2017 - [email protected] + +- Update to 5.10 Beta 4 +- Contains bugfixes +- Refresh tell-the-truth-about-private-api.patch + +------------------------------------------------------------------- +Thu Nov 2 07:22:12 UTC 2017 - [email protected] + +- Update to 5.10 Beta 3 +- Contains bugfixes +- Remove patches, now upstream: + * 0001-Cups-Check-the-created-QPrintDevice-is-valid-before-.patch + +------------------------------------------------------------------- +Mon Oct 30 16:19:18 UTC 2017 - [email protected] + +- Update to 5.10 Beta 2 +- Contains bugfixes +- Remove patches, now upstream: + * qglxconvenience-avoid-null-pointer-deref.patch + +------------------------------------------------------------------- @@ -16,0 +90,13 @@ +Tue Oct 24 18:26:45 UTC 2017 - [email protected] + +- Add patch to potentially fix printing: + * 0001-Cups-Check-the-created-QPrintDevice-is-valid-before-.patch + +------------------------------------------------------------------- +Mon Oct 9 16:17:18 UTC 2017 - [email protected] + +- Update to 5.10 Beta 1 +- For more information visit: + https://blog.qt.io/blog/2017/10/09/qt-5-10-beta-released/ + +------------------------------------------------------------------- @@ -33,0 +120,50 @@ + +------------------------------------------------------------------- +Mon Sep 25 14:42:37 CEST 2017 - [email protected] + +- Update to 5.10 Alpha 1: + * Qt Core + + Added rudimentary implementation of QStringView. It is missing some (important) const-QString functions, but is fully functional as an interface type. To be completed for Qt 5.11. + + Added many more functions to QLatin1String, too, co-evolving QLatin1String as the const char*-Latin-1-version of QStringView. + + Added QIODevice::skip() to improve performance in read operations. + + Explicitly little and big-endian integer types exposed (for instance qint16_le, quint32_be) for machine-independent data-type parsing. + + Added QRandomGenerator providing a simple API for high-quality (optionally seed-less) random numbers. + + Added accessors for metadata time fields of files to QFileInfo. + + Added QSemaphoreReleaser a RAII-style class for QSemaphore. + + Added QKeyValueIterator for more efficient iteration over keys of an associative container + + * Qt GUI + + Added cross-platform Vulkan enablers for Windows, Linux (xcb) and Android (level 23+): QVulkanInstance, QWindow with type VulkanSurface, and QVulkanWindow + + Added new flags and functions to QSurfaceFormat and QOpenGLWidget to request sRGB-capable default/backing framebuffers + + The OpenGL ES 3.2 API is now exposed in a cross-platform manner via QOpenGLExtraFunctions. + + QImages can now use more than 2GByte of pixel data. + + Added QFont::PreferNoShaping style strategy. + + * Qt Widgets + + QWidget::createWindowContainer() is now functional on Android + + QOpenGLWidget is now usable for rendering and reading back (grabbing) offscreen content. + + Added AA_DisableWindowContextHelpButton attribute that prevents the automatic" What's this" button on dialogs on Windows + + Added tabStopDistance property in QTextOption, QTextEdit and QPlainTextEdit + + Added selectionEnd(), selectionLength() to QLineEdit, complementing selectionStart() + + Added setDoubleStep to QInputDialog, to enable changing of the step amount for getDouble() + + Added isPersistentEditorOpen() to QAbstractItemView, QTreeWidget, QTableWidget and QListWidget + + Added new style hint: SH_TitleBar_ShowToolTipsOnButtons + + Added support for specifying custom internal texture formats in QOpenGLWidget + + QDockWidget acquired the ability to be dropped together side by side + + * Qt Network + + OpenSSL 1.1 back-end. + + Persistent store of HSTS policies in QNAM (QSettings-based). + + Implemented the h2c procotol upgrade used by non-SSL HTTP/2. +- For more information visit: + https://blog.qt.io/blog/2017/09/13/qt-5-10-alpha-released/ +- Remove patches, now upstream: + * de63bbd2f806b0219a60775017899cedb121581f.patch + * 0001-Fix-Qt5DBusMacros.cmake-for-CMake-3.9.patch + * 0001-QSslSocket-OpenSSL-1.1-backend.patch + * 0001-Fix-open-chmod-race-condition-in-QSaveFile.patch + * 0001-Fix-at-spi2-build.patch + * dont-abort-missing-display.patch +- Refresh qglxconvenience-avoid-null-pointer-deref.patch +- Build against pcre2 +- Enable EGLFS with GBM, SCTP, Vulkan Old: ---- 0001-QSslSocket-OpenSSL-1.1-backend.patch qtbase-opensource-src-5.9.3.tar.xz New: ---- 0001-Fix-custom-page-size-handling-in-the-Unix-print-dial.patch 0001-Remove-QPrintDialogPrivate-applyPrinterProperties-no.patch 0002-Remove-QUnixPrintWidgetPrivate-applyPrinterPropertie.patch 0003-Remove-QPrintPropertiesDialog-applyPrinterProperties.patch 0004-Remove-QCupsJobWidget-setPrinter.patch 0005-Remove-QPrintPropertiesDialog-selectPrinter.patch 0006-Remove-QPageSetupWidget-selectPrinter.patch 0007-Introduce-QPrintDevice-property-setProperty.patch 0008-Allow-access-to-ppd-file-and-ppdMarkOption-via-QPpdP.patch 0009-QPlatformPrintDevice-use-QVector-not-QList-in-the-AP.patch 0010-Reintroduce-the-Advanced-tab-in-the-QPrintProperties.patch 0011-QtPrintSupport-Fix-build.patch qtbase-everywhere-src-5.10.0.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libqt5-qtbase.spec ++++++ --- /var/tmp/diff_new_pack.zoW5wv/_old 2017-12-23 12:15:57.745892837 +0100 +++ /var/tmp/diff_new_pack.zoW5wv/_new 2017-12-23 12:15:57.753892447 +0100 @@ -20,23 +20,30 @@ %define journald 0 %ifarch %arm aarch64 -%define gles 1 +%global gles 1 %else -%define gles 0 +%global gles 0 +%endif + +%if 0%{?suse_version} >= 1330 +%global vulkan 1 +%else +# Vulkan headers too old +%global vulkan 0 %endif Name: libqt5-qtbase -Version: 5.9.3 +Version: 5.10.0 Release: 0 Summary: C++ Program Library, Core Components -License: GPL-3.0 or SUSE-LGPL-2.1-with-digia-exception-1.1 +License: LGPL-2.1-with-Qt-Company-Qt-exception-1.1 or LGPL-3.0-with-Qt-Company-Qt-exception-1.1 Group: System/Libraries Url: https://www.qt.io %define base_name libqt5 -%define real_version 5.9.3 -%define so_version 5.9.3 -%define tar_version qtbase-opensource-src-%{real_version} -Source: https://download.qt.io/official_releases/qt/5.9/%{real_version}/submodules/%{tar_version}.tar.xz +%define real_version 5.10.0 +%define so_version 5.10.0 +%define tar_version qtbase-everywhere-src-5.10.0 +Source: https://download.qt.io/official_releases/qt/5.10/%{real_version}/submodules/%{tar_version}.tar.xz # to get mtime of file: Source1: libqt5-qtbase.changes Source2: macros.qt5 @@ -53,14 +60,25 @@ # PATCH-FIX-OPENSUSE libqt5-prioritise-gtk2-platformtheme.patch boo#1002900 -- Give Gtk2 Platform Theme (from qtstyleplugins) a priority over Gtk3 PT which currently lacks QGtk3Style. Patch10: libqt5-prioritise-gtk2-platformtheme.patch # PATCH-FEATURE-OPENSUSE 0001-Add-remote-print-queue-support.patch fate#322052 -- Automatically recognize and allow printing to remote cups servers -Patch11: 0001-Add-remote-print-queue-support.patch +Patch12: 0001-Add-remote-print-queue-support.patch # PATCH-FIX-OPENSUSE -Patch12: force-cmake-private-headers.patch +Patch15: force-cmake-private-headers.patch # PATCH-FIX-UPSTREAM -Patch13: qapplication-emit-palettechanged.patch -# patches 1000-2000 and above from upstream 5.9 branch # -# patches 2000-3000 and above from upstream 5.10/dev branch # -Patch2000: 0001-QSslSocket-OpenSSL-1.1-backend.patch +Patch17: qapplication-emit-palettechanged.patch +# patches 1000- 2000 and above from upstream 5.10 branch # +# patches 2000-3000 and above from upstream 5.11/dev branch # +Patch2000: 0001-Remove-QPrintDialogPrivate-applyPrinterProperties-no.patch +Patch2001: 0002-Remove-QUnixPrintWidgetPrivate-applyPrinterPropertie.patch +Patch2002: 0003-Remove-QPrintPropertiesDialog-applyPrinterProperties.patch +Patch2003: 0004-Remove-QCupsJobWidget-setPrinter.patch +Patch2004: 0005-Remove-QPrintPropertiesDialog-selectPrinter.patch +Patch2005: 0006-Remove-QPageSetupWidget-selectPrinter.patch +Patch2006: 0007-Introduce-QPrintDevice-property-setProperty.patch +Patch2007: 0008-Allow-access-to-ppd-file-and-ppdMarkOption-via-QPpdP.patch +Patch2008: 0009-QPlatformPrintDevice-use-QVector-not-QList-in-the-AP.patch +Patch2009: 0010-Reintroduce-the-Advanced-tab-in-the-QPrintProperties.patch +Patch2010: 0011-QtPrintSupport-Fix-build.patch +Patch2011: 0001-Fix-custom-page-size-handling-in-the-Unix-print-dial.patch BuildRequires: alsa-devel BuildRequires: cups-devel BuildRequires: double-conversion-devel @@ -70,9 +88,11 @@ BuildRequires: libmysqlclient-devel BuildRequires: libpng-devel BuildRequires: libproxy-devel +BuildRequires: lksctp-tools-devel BuildRequires: libtiff-devel BuildRequires: openssl-devel BuildRequires: pcre-devel +BuildRequires: pcre2-devel BuildRequires: pkgconfig BuildRequires: pkgconfig(mtdev) %if %qt5_snapshot @@ -86,15 +106,18 @@ BuildRequires: pkgconfig(egl) BuildRequires: pkgconfig(fontconfig) BuildRequires: pkgconfig(freetype2) +BuildRequires: pkgconfig(gbm) BuildRequires: pkgconfig(gl) %if %gles BuildRequires: Mesa-libGLESv3-devel -BuildRequires: pkgconfig(gbm) BuildRequires: pkgconfig(glesv2) %endif BuildRequires: libicu-devel BuildRequires: libpulse-devel BuildRequires: tslib-devel +%if %{vulkan} +BuildRequires: vulkan-devel +%endif BuildRequires: xcb-util-image-devel BuildRequires: xcb-util-keysyms-devel BuildRequires: xcb-util-renderutil-devel @@ -138,16 +161,27 @@ %define libqt5_translationdir %{libqt5_datadir}/translations %prep -%setup -q -n qtbase-opensource-src-%{real_version} +%setup -q -n %{tar_version} %patch3 -p1 %patch5 -p1 %patch6 -p1 %patch8 -p1 %patch10 -p1 -%patch11 -p1 %patch12 -p1 -%patch13 -p1 +%patch15 -p1 +%patch17 -p1 %patch2000 -p1 +%patch2001 -p1 +%patch2002 -p1 +%patch2003 -p1 +%patch2004 -p1 +%patch2005 -p1 +%patch2006 -p1 +%patch2007 -p1 +%patch2008 -p1 +%patch2009 -p1 +%patch2010 -p1 +%patch2011 -p1 # be sure not to use them rm -rf src/3rdparty/{libjpeg,freetype,zlib} @@ -588,6 +622,9 @@ %else Requires: pkgconfig(gl) %endif +%if %{vulkan} +Requires: vulkan-devel +%endif Requires: pkgconfig(egl) Requires: pkgconfig(libdrm) @@ -777,18 +814,12 @@ Examples for the libqt5-qtbase modules. %build -#export QMAKESPEC=$PWD/mkspecs/linux-g++ %ifarch ppc64 RPM_OPT_FLAGS="%{optflags} -mminimal-toc" %endif export CXXFLAGS="$CXXFLAGS %{optflags} -DOPENSSL_LOAD_CONF" export CFLAGS="$CFLAGS %{optflags} -DOPENSSL_LOAD_CONF" export MAKEFLAGS="%{?_smp_mflags}" -%ifarch sparc64 -platform="-platform linux-g++-64" -%else -platform="" -%endif %define xkbconfigroot %(pkg-config --variable=xkb_base xkeyboard-config) #if %qt5_snapshot #force the configure script to generate the forwarding headers (it checks whether .git directory exists) @@ -800,7 +831,7 @@ # so non-qt5 apps/libs don't get stripped sed -i -e 's|^\(QMAKE_STRIP.*=\).*$|\1|g' mkspecs/common/linux.conf -echo yes | ./configure $platform \ +echo yes | ./configure \ -prefix %{_prefix} \ -L %{libqt5_libdir} \ -libdir %{libqt5_libdir} \ @@ -822,11 +853,10 @@ -no-reduce-relocations \ %endif %ifarch %ix86 -%if 0%{?sle_version:%sle_version} < 150000 +%if 0%{?sle_version} < 150000 -no-sse2 -no-pch \ %endif %endif - -optimized-qmake \ -accessibility \ -no-strip \ -opensource \ @@ -847,6 +877,7 @@ -system-zlib \ -no-pch \ -glib \ + -sctp \ -system-sqlite \ -no-sql-mysql \ -no-strip \ @@ -858,7 +889,7 @@ -egl \ -eglfs \ %if %gles - -eglfs -kms \ + -kms \ -opengl es2 \ %else -opengl desktop \ @@ -875,7 +906,7 @@ make INSTALL_ROOT=%{buildroot} install %ifarch %ix86 -%if 0%{?sle_version:%sle_version} < 150000 +%if 0%{?sle_version} < 150000 install -d %{buildroot}%{libqt5_libdir}/sse2/ pushd src/corelib; make clean ; ../../bin/qmake -config sse2; make %{?_smp_mflags} @@ -982,6 +1013,8 @@ %{libqt5_bindir}/rcc* %{_bindir}/uic* %{libqt5_bindir}/uic* +%{_bindir}/qvkgen* +%{libqt5_bindir}/qvkgen* %{_bindir}/syncqt.pl* %{_bindir}/fixqt4headers.pl* %{libqt5_bindir}/syncqt.pl* @@ -999,7 +1032,7 @@ %doc *.txt LICENSE.* %{libqt5_libdir}/libQt5Core.so.* %ifarch %ix86 -%if 0%{?sle_version:%sle_version} < 150000 +%if 0%{?sle_version} < 150000 %dir %{libqt5_libdir}/sse2 %{libqt5_libdir}/sse2/libQt5Core.so.* %endif @@ -1275,6 +1308,12 @@ %{libqt5_libdir}/libQt5ServiceSupport.prl %{libqt5_libdir}/libQt5ThemeSupport.a %{libqt5_libdir}/libQt5ThemeSupport.prl +%{libqt5_libdir}/libQt5EdidSupport.a +%{libqt5_libdir}/libQt5EdidSupport.prl +%if %{vulkan} +%{libqt5_libdir}/libQt5VulkanSupport.a +%{libqt5_libdir}/libQt5VulkanSupport.prl +%endif %{libqt5_includedir}/QtAccessibilitySupport/ %{libqt5_includedir}/QtDeviceDiscoverySupport/ %{libqt5_includedir}/QtEglSupport/ @@ -1289,6 +1328,10 @@ %{libqt5_includedir}/QtPlatformCompositorSupport/ %{libqt5_includedir}/QtServiceSupport/ %{libqt5_includedir}/QtThemeSupport/ +%{libqt5_includedir}/QtEdidSupport/ +%if %{vulkan} +%{libqt5_includedir}/QtVulkanSupport/ +%endif %exclude %{libqt5_includedir}/QtAccessibilitySupport/%{so_version}/ %exclude %{libqt5_includedir}/QtDeviceDiscoverySupport/%{so_version}/ %exclude %{libqt5_includedir}/QtEglSupport/%{so_version}/ @@ -1303,6 +1346,10 @@ %exclude %{libqt5_includedir}/QtPlatformCompositorSupport/%{so_version}/ %exclude %{libqt5_includedir}/QtServiceSupport/%{so_version}/ %exclude %{libqt5_includedir}/QtThemeSupport/%{so_version}/ +%exclude %{libqt5_includedir}/QtEdidSupport/%{so_version}/ +%if %{vulkan} +%exclude %{libqt5_includedir}/QtVulkanSupport/%{so_version}/ +%endif %files -n libQt5KmsSupport-devel-static %defattr(-,root,root,755) @@ -1360,6 +1407,10 @@ %{libqt5_includedir}/QtPlatformCompositorSupport/%{so_version}/ %{libqt5_includedir}/QtServiceSupport/%{so_version}/ %{libqt5_includedir}/QtThemeSupport/%{so_version}/ +%{libqt5_includedir}/QtEdidSupport/%{so_version}/ +%if %{vulkan} +%{libqt5_includedir}/QtVulkanSupport/%{so_version}/ +%endif %files -n libQt5PrintSupport-private-headers-devel %defattr(-,root,root,755) ++++++ 0001-Add-remote-print-queue-support.patch ++++++ --- /var/tmp/diff_new_pack.zoW5wv/_old 2017-12-23 12:15:57.781891082 +0100 +++ /var/tmp/diff_new_pack.zoW5wv/_new 2017-12-23 12:15:57.781891082 +0100 @@ -18,10 +18,10 @@ src/plugins/printsupport/cups/qppdprintdevice.cpp | 33 +++++++- 4 files changed, 160 insertions(+), 11 deletions(-) -diff --git a/src/plugins/printsupport/cups/qcupsprintengine.cpp b/src/plugins/printsupport/cups/qcupsprintengine.cpp -index a16eb3abb5..6dc123fb51 100644 ---- a/src/plugins/printsupport/cups/qcupsprintengine.cpp -+++ b/src/plugins/printsupport/cups/qcupsprintengine.cpp +Index: qtbase-everywhere-src-5.10.0/src/plugins/printsupport/cups/qcupsprintengine.cpp +=================================================================== +--- qtbase-everywhere-src-5.10.0.orig/src/plugins/printsupport/cups/qcupsprintengine.cpp ++++ qtbase-everywhere-src-5.10.0/src/plugins/printsupport/cups/qcupsprintengine.cpp @@ -48,6 +48,7 @@ #include <qbuffer.h> #include "private/qcups_p.h" // Only needed for PPK_CupsOptions @@ -30,7 +30,7 @@ #include <cups/cups.h> -@@ -241,8 +242,40 @@ void QCupsPrintEnginePrivate::closePrintDevice() +@@ -241,8 +242,40 @@ void QCupsPrintEnginePrivate::closePrint // Print the file. cups_option_t* optPtr = cupsOptStruct.size() ? &cupsOptStruct.first() : 0; @@ -72,10 +72,10 @@ QFile::remove(tempFile); } -diff --git a/src/plugins/printsupport/cups/qcupsprintersupport.cpp b/src/plugins/printsupport/cups/qcupsprintersupport.cpp -index 1887625406..a145beaf18 100644 ---- a/src/plugins/printsupport/cups/qcupsprintersupport.cpp -+++ b/src/plugins/printsupport/cups/qcupsprintersupport.cpp +Index: qtbase-everywhere-src-5.10.0/src/plugins/printsupport/cups/qcupsprintersupport.cpp +=================================================================== +--- qtbase-everywhere-src-5.10.0.orig/src/plugins/printsupport/cups/qcupsprintersupport.cpp ++++ qtbase-everywhere-src-5.10.0/src/plugins/printsupport/cups/qcupsprintersupport.cpp @@ -52,6 +52,35 @@ # include <cups/language.h> #endif @@ -112,7 +112,7 @@ QT_BEGIN_NAMESPACE QCupsPrinterSupport::QCupsPrinterSupport() -@@ -81,17 +110,35 @@ QPrintDevice QCupsPrinterSupport::createPrintDevice(const QString &id) +@@ -81,17 +110,35 @@ QPrintDevice QCupsPrinterSupport::create QStringList QCupsPrinterSupport::availablePrintDeviceIds() const { @@ -153,7 +153,7 @@ return list; } -@@ -99,8 +146,18 @@ QString QCupsPrinterSupport::defaultPrintDeviceId() const +@@ -99,8 +146,18 @@ QString QCupsPrinterSupport::defaultPrin { QString printerId; cups_dest_t *dests; @@ -174,7 +174,7 @@ if (dests[i].is_default) { printerId = QString::fromLocal8Bit(dests[i].name); if (dests[i].instance) { -@@ -109,8 +166,30 @@ QString QCupsPrinterSupport::defaultPrintDeviceId() const +@@ -109,8 +166,30 @@ QString QCupsPrinterSupport::defaultPrin } } } @@ -206,10 +206,10 @@ + + QT_END_NAMESPACE -diff --git a/src/plugins/printsupport/cups/qcupsprintersupport_p.h b/src/plugins/printsupport/cups/qcupsprintersupport_p.h -index 13f64b5e69..81eaa09882 100644 ---- a/src/plugins/printsupport/cups/qcupsprintersupport_p.h -+++ b/src/plugins/printsupport/cups/qcupsprintersupport_p.h +Index: qtbase-everywhere-src-5.10.0/src/plugins/printsupport/cups/qcupsprintersupport_p.h +=================================================================== +--- qtbase-everywhere-src-5.10.0.orig/src/plugins/printsupport/cups/qcupsprintersupport_p.h ++++ qtbase-everywhere-src-5.10.0/src/plugins/printsupport/cups/qcupsprintersupport_p.h @@ -56,6 +56,8 @@ #include <QtCore/qstringlist.h> @@ -234,18 +234,18 @@ }; QT_END_NAMESPACE -diff --git a/src/plugins/printsupport/cups/qppdprintdevice.cpp b/src/plugins/printsupport/cups/qppdprintdevice.cpp -index 9efa83d409..5b7222902d 100644 ---- a/src/plugins/printsupport/cups/qppdprintdevice.cpp -+++ b/src/plugins/printsupport/cups/qppdprintdevice.cpp -@@ -41,6 +41,7 @@ +Index: qtbase-everywhere-src-5.10.0/src/plugins/printsupport/cups/qppdprintdevice.cpp +=================================================================== +--- qtbase-everywhere-src-5.10.0.orig/src/plugins/printsupport/cups/qppdprintdevice.cpp ++++ qtbase-everywhere-src-5.10.0/src/plugins/printsupport/cups/qppdprintdevice.cpp +@@ -39,6 +39,7 @@ + #include "qppdprintdevice.h" + ++#include "qcupsprintersupport_p.h" #include <QtCore/QMimeDatabase> #include <qdebug.h> -+#include "qcupsprintersupport_p.h" - #ifndef QT_LINUXBASE // LSB merges everything into cups.h - #include <cups/language.h> @@ -451,10 +452,38 @@ void QPpdPrintDevice::loadPrinter() m_cupsDest = 0; } @@ -287,6 +287,3 @@ if (ppdFile) { m_ppd = ppdOpenFile(ppdFile); unlink(ppdFile); --- -2.13.0 - ++++++ 0001-Fix-custom-page-size-handling-in-the-Unix-print-dial.patch ++++++ >From 49c7939b6b3472af756412324442170d0af5d08f Mon Sep 17 00:00:00 2001 From: Albert Astals Cid <[email protected]> Date: Wed, 20 Dec 2017 10:41:33 +0100 Subject: [PATCH] Fix custom page size handling in the Unix print dialog There were several problems that i've fixed in a single commit since they are very interwinded * The dialog used QPageSize::Custom for two things, the custom sizes coming from the printer and the "user can write whatever size they want" size. Now only the printer custom sizes use QPageSize::Custom and we use m_realCustomPageSizeIndex for the "user can write whatever size they want" one. * The dialog stored the QPageSize id as the combo userData, that doesn't work when the printer has multiple custom sizes since they all share QPageSize::Custom so now it stores the QPageSize itself Task-number: QTBUG-58733 Change-Id: Ie640a07bb5e24b753db83c091c836e8af4ff126c --- src/printsupport/dialogs/qpagesetupdialog_unix.cpp | 30 ++++++++++++++-------- src/printsupport/dialogs/qpagesetupdialog_unix_p.h | 1 + 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/src/printsupport/dialogs/qpagesetupdialog_unix.cpp b/src/printsupport/dialogs/qpagesetupdialog_unix.cpp index 6f3bb0dd55..55ac913df8 100644 --- a/src/printsupport/dialogs/qpagesetupdialog_unix.cpp +++ b/src/printsupport/dialogs/qpagesetupdialog_unix.cpp @@ -234,10 +234,14 @@ QPageSetupWidget::QPageSetupWidget(QWidget *parent) m_printer(0), m_outputFormat(QPrinter::PdfFormat), m_units(QPageLayout::Point), - m_blockSignals(false) + m_blockSignals(false), + m_realCustomPageSizeIndex(-1) { m_ui.setupUi(this); + if (!QMetaType::hasRegisteredComparators<QPageSize>()) + QMetaType::registerEqualsComparator<QPageSize>(); + QVBoxLayout *lay = new QVBoxLayout(m_ui.preview); m_pagePreview = new QPagePreview(m_ui.preview); m_pagePreview->setPagePreviewLayout(1, 1); @@ -341,15 +345,18 @@ void QPageSetupWidget::initPageSizes() m_ui.pageSizeCombo->clear(); + m_realCustomPageSizeIndex = -1; + if (m_outputFormat == QPrinter::NativeFormat && !m_printerName.isEmpty()) { QPlatformPrinterSupport *ps = QPlatformPrinterSupportPlugin::get(); if (ps) { QPrintDevice printDevice = ps->createPrintDevice(m_printerName); const auto pageSizes = printDevice.supportedPageSizes(); for (const QPageSize &pageSize : pageSizes) - m_ui.pageSizeCombo->addItem(pageSize.name(), QVariant::fromValue(pageSize.id())); + m_ui.pageSizeCombo->addItem(pageSize.name(), QVariant::fromValue(pageSize)); if (m_ui.pageSizeCombo->count() > 0 && printDevice.supportsCustomPageSizes()) { - m_ui.pageSizeCombo->addItem(tr("Custom"), QVariant::fromValue(QPageSize::Custom)); + m_ui.pageSizeCombo->addItem(tr("Custom")); + m_realCustomPageSizeIndex = m_ui.pageSizeCombo->count() - 1; m_blockSignals = false; return; } @@ -359,10 +366,11 @@ void QPageSetupWidget::initPageSizes() // If PdfFormat or no available printer page sizes, populate with all page sizes for (int id = 0; id < QPageSize::LastPageSize; ++id) { if (QPageSize::PageSizeId(id) == QPageSize::Custom) { - m_ui.pageSizeCombo->addItem(tr("Custom"), QVariant::fromValue(QPageSize::Custom)); + m_ui.pageSizeCombo->addItem(tr("Custom")); + m_realCustomPageSizeIndex = m_ui.pageSizeCombo->count() - 1; } else { QPageSize pageSize = QPageSize(QPageSize::PageSizeId(id)); - m_ui.pageSizeCombo->addItem(pageSize.name(), QVariant::fromValue(pageSize.id())); + m_ui.pageSizeCombo->addItem(pageSize.name(), QVariant::fromValue(pageSize)); } } @@ -434,7 +442,9 @@ void QPageSetupWidget::updateWidget() m_ui.unitCombo->setCurrentIndex(m_ui.unitCombo->findData(QVariant::fromValue(m_units))); - m_ui.pageSizeCombo->setCurrentIndex(m_ui.pageSizeCombo->findData(QVariant::fromValue(m_pageLayout.pageSize().id()))); + const bool isCustom = m_ui.pageSizeCombo->currentIndex() == m_realCustomPageSizeIndex && m_realCustomPageSizeIndex != -1; + if (!isCustom) + m_ui.pageSizeCombo->setCurrentIndex(m_ui.pageSizeCombo->findData(QVariant::fromValue(m_pageLayout.pageSize()))); QMarginsF min; QMarginsF max; @@ -467,8 +477,6 @@ void QPageSetupWidget::updateWidget() m_ui.bottomMargin->setMaximum(max.bottom()); m_ui.bottomMargin->setValue(m_pageLayout.margins().bottom()); - bool isCustom = m_ui.pageSizeCombo->currentData().value<QPageSize::PageSizeId>() == QPageSize::Custom; - m_ui.pageWidth->setSuffix(suffix); m_ui.pageWidth->setValue(m_pageLayout.fullRect(m_units).width()); m_ui.pageWidth->setEnabled(isCustom); @@ -513,10 +521,10 @@ void QPageSetupWidget::pageSizeChanged() if (m_blockSignals) return; - QPageSize::PageSizeId id = m_ui.pageSizeCombo->currentData().value<QPageSize::PageSizeId>(); - if (id != QPageSize::Custom) { + if (m_ui.pageSizeCombo->currentIndex() != m_realCustomPageSizeIndex) { + const QPageSize pageSize = m_ui.pageSizeCombo->currentData().value<QPageSize>(); // TODO Set layout margin min/max to printer custom min/max - m_pageLayout.setPageSize(QPageSize(id)); + m_pageLayout.setPageSize(pageSize); } else { QSizeF customSize; if (m_pageLayout.orientation() == QPageLayout::Landscape) diff --git a/src/printsupport/dialogs/qpagesetupdialog_unix_p.h b/src/printsupport/dialogs/qpagesetupdialog_unix_p.h index 574569de29..292cccd7ea 100644 --- a/src/printsupport/dialogs/qpagesetupdialog_unix_p.h +++ b/src/printsupport/dialogs/qpagesetupdialog_unix_p.h @@ -102,6 +102,7 @@ private: QPageLayout m_pageLayout; QPageLayout::Unit m_units; bool m_blockSignals; + int m_realCustomPageSizeIndex; }; QT_END_NAMESPACE -- 2.15.1 ++++++ 0001-Remove-QPrintDialogPrivate-applyPrinterProperties-no.patch ++++++ >From 2ecfdf87b8362309f555e441f16e6c5b56f17e63 Mon Sep 17 00:00:00 2001 From: Albert Astals Cid <[email protected]> Date: Mon, 4 Dec 2017 12:42:54 +0100 Subject: [PATCH 02/54] Remove QPrintDialogPrivate::applyPrinterProperties, no one calls it Change-Id: Ic140f62e5cb63c6a4b7f4fa10ca243d8bb055c4e Reviewed-by: Andy Shaw <[email protected]> --- src/printsupport/dialogs/qprintdialog_unix.cpp | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/printsupport/dialogs/qprintdialog_unix.cpp b/src/printsupport/dialogs/qprintdialog_unix.cpp index 183af7daa3..37a562125e 100644 --- a/src/printsupport/dialogs/qprintdialog_unix.cpp +++ b/src/printsupport/dialogs/qprintdialog_unix.cpp @@ -203,8 +203,6 @@ public: ~QPrintDialogPrivate(); void init(); - /// copy printer properties to the widget - void applyPrinterProperties(); void selectPrinter(const QPrinter::OutputFormat outputFormat); @@ -390,12 +388,6 @@ void QPrintDialogPrivate::selectPrinter(const QPrinter::OutputFormat outputForma options.pageSetCombo->setEnabled(true); } -void QPrintDialogPrivate::applyPrinterProperties() -{ - // apply printer options to property dialog - top->d->applyPrinterProperties(); -} - void QPrintDialogPrivate::setupPrinter() { // First setup the requested OutputFormat, Printer and Page Size first -- 2.15.1 ++++++ 0002-Remove-QUnixPrintWidgetPrivate-applyPrinterPropertie.patch ++++++ >From fb1836898f5f8f88accea92a5ad7adb625694700 Mon Sep 17 00:00:00 2001 From: Albert Astals Cid <[email protected]> Date: Mon, 4 Dec 2017 12:49:12 +0100 Subject: [PATCH 03/54] Remove QUnixPrintWidgetPrivate::applyPrinterProperties And move it's code to the only place it is called, the QUnixPrintWidget constructor, that means we can remove the if that checks if propertiesDialog is not null since at that stage we know it is null Change-Id: I81cdaa0505fa6fe64a45c7d1f5c3e277400cbbf7 Reviewed-by: Andy Shaw <[email protected]> --- src/printsupport/dialogs/qprintdialog_unix.cpp | 80 +++++++++++--------------- 1 file changed, 35 insertions(+), 45 deletions(-) diff --git a/src/printsupport/dialogs/qprintdialog_unix.cpp b/src/printsupport/dialogs/qprintdialog_unix.cpp index 37a562125e..66d37dbec3 100644 --- a/src/printsupport/dialogs/qprintdialog_unix.cpp +++ b/src/printsupport/dialogs/qprintdialog_unix.cpp @@ -168,8 +168,6 @@ public: QUnixPrintWidgetPrivate(QUnixPrintWidget *q, QPrinter *prn); ~QUnixPrintWidgetPrivate(); - /// copy printer properties to the widget - void applyPrinterProperties(); bool checkFields(); void setupPrinter(); void setOptionsPane(QPrintDialogPrivate *pane); @@ -790,48 +788,6 @@ void QUnixPrintWidgetPrivate::_q_btnBrowseClicked() } } -void QUnixPrintWidgetPrivate::applyPrinterProperties() -{ - if (printer == nullptr) - return; - if (printer->outputFileName().isEmpty()) { - QString home = QDir::homePath(); - QString cur = QDir::currentPath(); - if (home.at(home.length()-1) != QLatin1Char('/')) - home += QLatin1Char('/'); - if (!cur.isEmpty() && cur.at(cur.length()-1) != QLatin1Char('/')) - cur += QLatin1Char('/'); - if (!cur.startsWith(home)) - cur = home; - if (QGuiApplication::platformName() == QLatin1String("xcb")) { - if (printer->docName().isEmpty()) { - cur += QLatin1String("print.pdf"); - } else { - QRegExp re(QString::fromLatin1("(.*)\\.\\S+")); - if (re.exactMatch(printer->docName())) - cur += re.cap(1); - else - cur += printer->docName(); - cur += QLatin1String(".pdf"); - } - } // xcb - - widget.filename->setText(cur); - } - else - widget.filename->setText( printer->outputFileName() ); - QString printerName = printer->printerName(); - if (!printerName.isEmpty()) { - const int i = widget.printers->findText(printerName); - if (i >= 0) - widget.printers->setCurrentIndex(i); - } - // PDF printer not added to the dialog yet, we'll handle those cases in QUnixPrintWidgetPrivate::updateWidget - - if (propertiesDialog) - propertiesDialog->applyPrinterProperties(printer); -} - #if QT_CONFIG(messagebox) bool QUnixPrintWidgetPrivate::checkFields() { @@ -951,7 +907,41 @@ void QUnixPrintWidgetPrivate::setupPrinter() QUnixPrintWidget::QUnixPrintWidget(QPrinter *printer, QWidget *parent) : QWidget(parent), d(new QUnixPrintWidgetPrivate(this, printer)) { - d->applyPrinterProperties(); + if (printer == nullptr) + return; + if (printer->outputFileName().isEmpty()) { + QString home = QDir::homePath(); + QString cur = QDir::currentPath(); + if (!home.endsWith(QLatin1Char('/'))) + home += QLatin1Char('/'); + if (!cur.startsWith(home)) + cur = home; + else if (!cur.endsWith(QLatin1Char('/'))) + cur += QLatin1Char('/'); + if (QGuiApplication::platformName() == QStringLiteral("xcb")) { + if (printer->docName().isEmpty()) { + cur += QStringLiteral("print.pdf"); + } else { + const QRegExp re(QStringLiteral("(.*)\\.\\S+")); + if (re.exactMatch(printer->docName())) + cur += re.cap(1); + else + cur += printer->docName(); + cur += QStringLiteral(".pdf"); + } + } // xcb + + d->widget.filename->setText(cur); + } + else + d->widget.filename->setText(printer->outputFileName()); + const QString printerName = printer->printerName(); + if (!printerName.isEmpty()) { + const int i = d->widget.printers->findText(printerName); + if (i >= 0) + d->widget.printers->setCurrentIndex(i); + } + // PDF printer not added to the dialog yet, we'll handle those cases in QUnixPrintWidgetPrivate::updateWidget } /*! \internal -- 2.15.1 ++++++ 0003-Remove-QPrintPropertiesDialog-applyPrinterProperties.patch ++++++ >From f135d515e8d6aaf1c136aef68e08b4f759075310 Mon Sep 17 00:00:00 2001 From: Albert Astals Cid <[email protected]> Date: Mon, 4 Dec 2017 12:53:04 +0100 Subject: [PATCH 04/54] Remove QPrintPropertiesDialog::applyPrinterProperties It's only ever called after the constructor so merge its code to the constructor Change-Id: Icca88764f725b9aeaa08ee7387da8885be247fba Reviewed-by: Andy Shaw <[email protected]> --- src/printsupport/dialogs/qprintdialog_unix.cpp | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/src/printsupport/dialogs/qprintdialog_unix.cpp b/src/printsupport/dialogs/qprintdialog_unix.cpp index 66d37dbec3..6cccdd03cd 100644 --- a/src/printsupport/dialogs/qprintdialog_unix.cpp +++ b/src/printsupport/dialogs/qprintdialog_unix.cpp @@ -124,13 +124,11 @@ class QPrintPropertiesDialog : public QDialog { Q_OBJECT public: - QPrintPropertiesDialog(QAbstractPrintDialog *parent = nullptr); + QPrintPropertiesDialog(QPrinter *printer, QAbstractPrintDialog *parent = nullptr); ~QPrintPropertiesDialog(); void selectPrinter(QPrinter::OutputFormat outputFormat, const QString &printerName); - /// copy printer properties to the widget - void applyPrinterProperties(QPrinter *p); void setupPrinter() const; private: @@ -236,7 +234,7 @@ public: */ -QPrintPropertiesDialog::QPrintPropertiesDialog(QAbstractPrintDialog *parent) +QPrintPropertiesDialog::QPrintPropertiesDialog(QPrinter *printer, QAbstractPrintDialog *parent) : QDialog(parent) { setWindowTitle(tr("Printer Properties")); @@ -250,8 +248,11 @@ QPrintPropertiesDialog::QPrintPropertiesDialog(QAbstractPrintDialog *parent) connect(m_buttons->button(QDialogButtonBox::Ok), SIGNAL(clicked()), this, SLOT(accept())); connect(m_buttons->button(QDialogButtonBox::Cancel), SIGNAL(clicked()), this, SLOT(reject())); + widget.pageSetup->setPrinter(printer); + #if QT_CONFIG(cupsjobwidget) m_jobOptions = new QCupsJobWidget(); + m_jobOptions->setPrinter(printer); widget.tabs->addTab(m_jobOptions, tr("Job Options")); #endif } @@ -260,14 +261,6 @@ QPrintPropertiesDialog::~QPrintPropertiesDialog() { } -void QPrintPropertiesDialog::applyPrinterProperties(QPrinter *p) -{ - widget.pageSetup->setPrinter(p); -#if QT_CONFIG(cupsjobwidget) - m_jobOptions->setPrinter(p); -#endif -} - void QPrintPropertiesDialog::setupPrinter() const { widget.pageSetup->setupPrinter(); @@ -846,12 +839,10 @@ void QUnixPrintWidgetPrivate::setupPrinterProperties() if (propertiesDialog) delete propertiesDialog; - propertiesDialog = new QPrintPropertiesDialog(q); + propertiesDialog = new QPrintPropertiesDialog(q->printer(), q); propertiesDialog->setResult(QDialog::Rejected); propertiesDialogShown = false; - propertiesDialog->applyPrinterProperties(q->printer()); - if (q->isOptionEnabled(QPrintDialog::PrintToFile) && (widget.printers->currentIndex() == widget.printers->count() - 1)) {// PDF propertiesDialog->selectPrinter(QPrinter::PdfFormat, QString()); -- 2.15.1 ++++++ 0004-Remove-QCupsJobWidget-setPrinter.patch ++++++ >From 881690969cc5a6a78df41e2d80ea1fa7bf07cb27 Mon Sep 17 00:00:00 2001 From: Albert Astals Cid <[email protected]> Date: Mon, 4 Dec 2017 12:57:40 +0100 Subject: [PATCH 05/54] Remove QCupsJobWidget::setPrinter It is only ever called after the constructor so merge the code Change-Id: I381165ad90c85342e5db3c16327d729388b71fb2 Reviewed-by: Andy Shaw <[email protected]> --- src/printsupport/dialogs/qprintdialog_unix.cpp | 3 +-- src/printsupport/widgets/qcupsjobwidget.cpp | 10 +++------- src/printsupport/widgets/qcupsjobwidget_p.h | 3 +-- 3 files changed, 5 insertions(+), 11 deletions(-) diff --git a/src/printsupport/dialogs/qprintdialog_unix.cpp b/src/printsupport/dialogs/qprintdialog_unix.cpp index 6cccdd03cd..8c9997d572 100644 --- a/src/printsupport/dialogs/qprintdialog_unix.cpp +++ b/src/printsupport/dialogs/qprintdialog_unix.cpp @@ -251,8 +251,7 @@ QPrintPropertiesDialog::QPrintPropertiesDialog(QPrinter *printer, QAbstractPrint widget.pageSetup->setPrinter(printer); #if QT_CONFIG(cupsjobwidget) - m_jobOptions = new QCupsJobWidget(); - m_jobOptions->setPrinter(printer); + m_jobOptions = new QCupsJobWidget(printer); widget.tabs->addTab(m_jobOptions, tr("Job Options")); #endif } diff --git a/src/printsupport/widgets/qcupsjobwidget.cpp b/src/printsupport/widgets/qcupsjobwidget.cpp index 00f2d64df2..8fb07c86b0 100644 --- a/src/printsupport/widgets/qcupsjobwidget.cpp +++ b/src/printsupport/widgets/qcupsjobwidget.cpp @@ -64,8 +64,9 @@ QT_BEGIN_NAMESPACE \inmodule QtPrintSupport */ -QCupsJobWidget::QCupsJobWidget(QWidget *parent) - : QWidget(parent) +QCupsJobWidget::QCupsJobWidget(QPrinter *printer, QWidget *parent) + : QWidget(parent), + m_printer(printer) { m_ui.setupUi(this); //set all the default values @@ -80,11 +81,6 @@ QCupsJobWidget::~QCupsJobWidget() { } -void QCupsJobWidget::setPrinter(QPrinter *printer) -{ - m_printer = printer; -} - void QCupsJobWidget::setupPrinter() { QCUPSSupport::setJobHold(m_printer, jobHold(), jobHoldTime()); diff --git a/src/printsupport/widgets/qcupsjobwidget_p.h b/src/printsupport/widgets/qcupsjobwidget_p.h index 7d3c15938f..2aca6bc928 100644 --- a/src/printsupport/widgets/qcupsjobwidget_p.h +++ b/src/printsupport/widgets/qcupsjobwidget_p.h @@ -71,9 +71,8 @@ class QCupsJobWidget : public QWidget Q_OBJECT public: - explicit QCupsJobWidget(QWidget *parent = 0); + explicit QCupsJobWidget(QPrinter *printer, QWidget *parent = nullptr); ~QCupsJobWidget(); - void setPrinter(QPrinter *printer); void setupPrinter(); private Q_SLOTS: -- 2.15.1 ++++++ 0005-Remove-QPrintPropertiesDialog-selectPrinter.patch ++++++ >From 072dd59de771d0c942afd68260251be71bd59542 Mon Sep 17 00:00:00 2001 From: Albert Astals Cid <[email protected]> Date: Mon, 4 Dec 2017 13:05:02 +0100 Subject: [PATCH 06/54] Remove QPrintPropertiesDialog::selectPrinter It is only ever called after the constructor, so merge the code Change-Id: I5c75a2cd367af401b41920f51754a64dc6c6eb40 Reviewed-by: Andy Shaw <[email protected]> --- src/printsupport/dialogs/qprintdialog_unix.cpp | 30 +++++++++++++------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/printsupport/dialogs/qprintdialog_unix.cpp b/src/printsupport/dialogs/qprintdialog_unix.cpp index 8c9997d572..c7f7488917 100644 --- a/src/printsupport/dialogs/qprintdialog_unix.cpp +++ b/src/printsupport/dialogs/qprintdialog_unix.cpp @@ -124,11 +124,10 @@ class QPrintPropertiesDialog : public QDialog { Q_OBJECT public: - QPrintPropertiesDialog(QPrinter *printer, QAbstractPrintDialog *parent = nullptr); + QPrintPropertiesDialog(QPrinter *printer, QPrinter::OutputFormat outputFormat, + const QString &printerName, QAbstractPrintDialog *parent = nullptr); ~QPrintPropertiesDialog(); - void selectPrinter(QPrinter::OutputFormat outputFormat, const QString &printerName); - void setupPrinter() const; private: @@ -234,7 +233,8 @@ public: */ -QPrintPropertiesDialog::QPrintPropertiesDialog(QPrinter *printer, QAbstractPrintDialog *parent) +QPrintPropertiesDialog::QPrintPropertiesDialog(QPrinter *printer, QPrinter::OutputFormat outputFormat, + const QString &printerName, QAbstractPrintDialog *parent) : QDialog(parent) { setWindowTitle(tr("Printer Properties")); @@ -249,6 +249,7 @@ QPrintPropertiesDialog::QPrintPropertiesDialog(QPrinter *printer, QAbstractPrint connect(m_buttons->button(QDialogButtonBox::Cancel), SIGNAL(clicked()), this, SLOT(reject())); widget.pageSetup->setPrinter(printer); + widget.pageSetup->selectPrinter(outputFormat, printerName); #if QT_CONFIG(cupsjobwidget) m_jobOptions = new QCupsJobWidget(printer); @@ -268,11 +269,6 @@ void QPrintPropertiesDialog::setupPrinter() const #endif } -void QPrintPropertiesDialog::selectPrinter(QPrinter::OutputFormat outputFormat, const QString &printerName) -{ - widget.pageSetup->selectPrinter(outputFormat, printerName); -} - //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// @@ -838,16 +834,20 @@ void QUnixPrintWidgetPrivate::setupPrinterProperties() if (propertiesDialog) delete propertiesDialog; - propertiesDialog = new QPrintPropertiesDialog(q->printer(), q); - propertiesDialog->setResult(QDialog::Rejected); - propertiesDialogShown = false; + QPrinter::OutputFormat outputFormat; + QString printerName; if (q->isOptionEnabled(QPrintDialog::PrintToFile) && (widget.printers->currentIndex() == widget.printers->count() - 1)) {// PDF - propertiesDialog->selectPrinter(QPrinter::PdfFormat, QString()); + outputFormat = QPrinter::PdfFormat; + } else { + outputFormat = QPrinter::NativeFormat; + printerName = widget.printers->currentText(); } - else - propertiesDialog->selectPrinter(QPrinter::NativeFormat, widget.printers->currentText()); + + propertiesDialog = new QPrintPropertiesDialog(q->printer(), outputFormat, printerName, q); + propertiesDialog->setResult(QDialog::Rejected); + propertiesDialogShown = false; } void QUnixPrintWidgetPrivate::_q_btnPropertiesClicked() -- 2.15.1 ++++++ 0006-Remove-QPageSetupWidget-selectPrinter.patch ++++++ >From ceccdff4e9fc93819d819b8ed15d95822f980505 Mon Sep 17 00:00:00 2001 From: Albert Astals Cid <[email protected]> Date: Mon, 4 Dec 2017 13:10:17 +0100 Subject: [PATCH 07/54] Remove QPageSetupWidget::selectPrinter t's only ever called after setPrinter so merge the code Change-Id: I4b5d593edbe62b64354e81c19112fa87b0555fdc Reviewed-by: Andy Shaw <[email protected]> --- src/printsupport/dialogs/qpagesetupdialog_unix.cpp | 12 ++---------- src/printsupport/dialogs/qpagesetupdialog_unix_p.h | 3 +-- src/printsupport/dialogs/qprintdialog_unix.cpp | 3 +-- 3 files changed, 4 insertions(+), 14 deletions(-) diff --git a/src/printsupport/dialogs/qpagesetupdialog_unix.cpp b/src/printsupport/dialogs/qpagesetupdialog_unix.cpp index c321552a19..49c0184289 100644 --- a/src/printsupport/dialogs/qpagesetupdialog_unix.cpp +++ b/src/printsupport/dialogs/qpagesetupdialog_unix.cpp @@ -210,7 +210,7 @@ void QUnixPageSetupDialogPrivate::init() Q_Q(QPageSetupDialog); widget = new QPageSetupWidget(q); - widget->setPrinter(printer); + widget->setPrinter(printer, printer->outputFormat(), printer->printerName()); QDialogButtonBox *buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, @@ -371,7 +371,7 @@ void QPageSetupWidget::initPageSizes() // Set the dialog to use the given QPrinter // Usually only called on first creation -void QPageSetupWidget::setPrinter(QPrinter *printer) +void QPageSetupWidget::setPrinter(QPrinter *printer, QPrinter::OutputFormat outputFormat, const QString &printerName) { m_printer = printer; @@ -387,14 +387,6 @@ void QPageSetupWidget::setPrinter(QPrinter *printer) m_units = m_pageLayout.units(); m_pagePreview->setPageLayout(m_pageLayout); - // Then update the widget with the current printer details - selectPrinter(m_printer->outputFormat(), m_printer->printerName()); -} - -// The printer selected in the QPrintDialog has been changed, update the widget to reflect this -// Note the QPrinter is not updated at this time in case the user presses the Cancel button in QPrintDialog -void QPageSetupWidget::selectPrinter(QPrinter::OutputFormat outputFormat, const QString &printerName) -{ m_outputFormat = outputFormat; m_printerName = printerName; initPageSizes(); diff --git a/src/printsupport/dialogs/qpagesetupdialog_unix_p.h b/src/printsupport/dialogs/qpagesetupdialog_unix_p.h index 658f103bea..c57b01c2d6 100644 --- a/src/printsupport/dialogs/qpagesetupdialog_unix_p.h +++ b/src/printsupport/dialogs/qpagesetupdialog_unix_p.h @@ -72,8 +72,7 @@ public: explicit QPageSetupWidget(QWidget *parent = 0); explicit QPageSetupWidget(QPrinter *printer, QWidget *parent = 0); - void setPrinter(QPrinter *printer); - void selectPrinter(QPrinter::OutputFormat outputFormat, const QString &printerName); + void setPrinter(QPrinter *printer, QPrinter::OutputFormat outputFormat, const QString &printerName); void setupPrinter() const; private slots: diff --git a/src/printsupport/dialogs/qprintdialog_unix.cpp b/src/printsupport/dialogs/qprintdialog_unix.cpp index c7f7488917..f87630f1a0 100644 --- a/src/printsupport/dialogs/qprintdialog_unix.cpp +++ b/src/printsupport/dialogs/qprintdialog_unix.cpp @@ -248,8 +248,7 @@ QPrintPropertiesDialog::QPrintPropertiesDialog(QPrinter *printer, QPrinter::Outp connect(m_buttons->button(QDialogButtonBox::Ok), SIGNAL(clicked()), this, SLOT(accept())); connect(m_buttons->button(QDialogButtonBox::Cancel), SIGNAL(clicked()), this, SLOT(reject())); - widget.pageSetup->setPrinter(printer); - widget.pageSetup->selectPrinter(outputFormat, printerName); + widget.pageSetup->setPrinter(printer, outputFormat, printerName); #if QT_CONFIG(cupsjobwidget) m_jobOptions = new QCupsJobWidget(printer); -- 2.15.1 ++++++ 0007-Introduce-QPrintDevice-property-setProperty.patch ++++++ >From 70f6a35c8f0b6a73f4d568532e1365cd3e8ff8dd Mon Sep 17 00:00:00 2001 From: Albert Astals Cid <[email protected]> Date: Mon, 4 Dec 2017 13:23:49 +0100 Subject: [PATCH 37/54] Introduce QPrintDevice::property/setProperty So we can access QPlatformPrintDevice internals if needed Change-Id: Ib37c5717713f37262ef12d7b61793d80f05baf4a Reviewed-by: Liang Qi <[email protected]> --- src/printsupport/kernel/qplatformprintdevice.cpp | 15 +++++++++++++++ src/printsupport/kernel/qplatformprintdevice.h | 6 ++++++ src/printsupport/kernel/qprintdevice.cpp | 10 ++++++++++ src/printsupport/kernel/qprintdevice_p.h | 7 +++++++ 4 files changed, 38 insertions(+) diff --git a/src/printsupport/kernel/qplatformprintdevice.cpp b/src/printsupport/kernel/qplatformprintdevice.cpp index e2d4a08de3..ad3f923bec 100644 --- a/src/printsupport/kernel/qplatformprintdevice.cpp +++ b/src/printsupport/kernel/qplatformprintdevice.cpp @@ -381,6 +381,21 @@ void QPlatformPrintDevice::loadMimeTypes() const { } +QVariant QPlatformPrintDevice::property(QPrintDevice::PrintDevicePropertyKey key) const +{ + Q_UNUSED(key) + + return QVariant(); +} + +bool QPlatformPrintDevice::setProperty(QPrintDevice::PrintDevicePropertyKey key, const QVariant &value) +{ + Q_UNUSED(key) + Q_UNUSED(value) + + return false; +} + QList<QMimeType> QPlatformPrintDevice::supportedMimeTypes() const { if (!m_haveMimeTypes) diff --git a/src/printsupport/kernel/qplatformprintdevice.h b/src/printsupport/kernel/qplatformprintdevice.h index 44a3a966f4..654bb123fb 100644 --- a/src/printsupport/kernel/qplatformprintdevice.h +++ b/src/printsupport/kernel/qplatformprintdevice.h @@ -53,11 +53,14 @@ #include <QtPrintSupport/qtprintsupportglobal.h> #include <private/qprint_p.h> +#include <private/qprintdevice_p.h> +#include <QtCore/qvariant.h> #include <QtCore/qvector.h> #include <QtCore/qmimetype.h> #include <QtGui/qpagelayout.h> + QT_BEGIN_NAMESPACE #ifndef QT_NO_PRINTER @@ -118,6 +121,9 @@ public: virtual QPrint::ColorMode defaultColorMode() const; virtual QList<QPrint::ColorMode> supportedColorModes() const; + virtual QVariant property(QPrintDevice::PrintDevicePropertyKey key) const; + virtual bool setProperty(QPrintDevice::PrintDevicePropertyKey key, const QVariant &value); + #ifndef QT_NO_MIMETYPE virtual QList<QMimeType> supportedMimeTypes() const; #endif diff --git a/src/printsupport/kernel/qprintdevice.cpp b/src/printsupport/kernel/qprintdevice.cpp index 26799a6f13..7096f5a2f6 100644 --- a/src/printsupport/kernel/qprintdevice.cpp +++ b/src/printsupport/kernel/qprintdevice.cpp @@ -245,6 +245,16 @@ QList<QPrint::ColorMode> QPrintDevice::supportedColorModes() const return isValid() ? d->supportedColorModes() : QList<QPrint::ColorMode>(); } +QVariant QPrintDevice::property(PrintDevicePropertyKey key) const +{ + return isValid() ? d->property(key) : QVariant(); +} + +bool QPrintDevice::setProperty(PrintDevicePropertyKey key, const QVariant &value) +{ + return isValid() ? d->setProperty(key, value) : false; +} + #ifndef QT_NO_MIMETYPE QList<QMimeType> QPrintDevice::supportedMimeTypes() const { diff --git a/src/printsupport/kernel/qprintdevice_p.h b/src/printsupport/kernel/qprintdevice_p.h index 1e0d3983e9..1a26d3afcf 100644 --- a/src/printsupport/kernel/qprintdevice_p.h +++ b/src/printsupport/kernel/qprintdevice_p.h @@ -131,6 +131,13 @@ public: QPrint::ColorMode defaultColorMode() const; QList<QPrint::ColorMode> supportedColorModes() const; + enum PrintDevicePropertyKey { + PDPK_CustomBase = 0xff00 + }; + + QVariant property(PrintDevicePropertyKey key) const; + bool setProperty(PrintDevicePropertyKey key, const QVariant &value); + #ifndef QT_NO_MIMETYPE QList<QMimeType> supportedMimeTypes() const; #endif -- 2.15.1 ++++++ 0008-Allow-access-to-ppd-file-and-ppdMarkOption-via-QPpdP.patch ++++++ >From e79efe94e3e77ee035ff7d046158a577759f8c7c Mon Sep 17 00:00:00 2001 From: Albert Astals Cid <[email protected]> Date: Mon, 4 Dec 2017 14:05:55 +0100 Subject: [PATCH 38/54] Allow access to ppd file and ppdMarkOption via QPpdPrintDevice::property/setProperty Change-Id: I47b49b52121950fa8e3ea7a056974d9f3033490f Reviewed-by: Liang Qi <[email protected]> --- src/plugins/printsupport/cups/qppdprintdevice.cpp | 21 +++++++++++++++++++++ src/plugins/printsupport/cups/qppdprintdevice.h | 3 +++ src/printsupport/kernel/qcups_p.h | 3 +++ src/printsupport/kernel/qprint_p.h | 1 + 4 files changed, 28 insertions(+) diff --git a/src/plugins/printsupport/cups/qppdprintdevice.cpp b/src/plugins/printsupport/cups/qppdprintdevice.cpp index 9efa83d409..ad829df23d 100644 --- a/src/plugins/printsupport/cups/qppdprintdevice.cpp +++ b/src/plugins/printsupport/cups/qppdprintdevice.cpp @@ -42,6 +42,8 @@ #include <QtCore/QMimeDatabase> #include <qdebug.h> +#include "private/qcups_p.h" // Only needed for PDPK_* + #ifndef QT_LINUXBASE // LSB merges everything into cups.h #include <cups/language.h> #endif @@ -421,6 +423,25 @@ QPrint::ColorMode QPpdPrintDevice::defaultColorMode() const return QPrint::GrayScale; } +QVariant QPpdPrintDevice::property(QPrintDevice::PrintDevicePropertyKey key) const +{ + if (key == PDPK_PpdFile) + return QVariant::fromValue<ppd_file_t *>(m_ppd); + + return QVariant(); +} + +bool QPpdPrintDevice::setProperty(QPrintDevice::PrintDevicePropertyKey key, const QVariant &value) +{ + if (key == PDPK_PpdOption) { + const QStringList values = value.toStringList(); + if (values.count() == 2) + return ppdMarkOption(m_ppd, values[0].toLatin1(), values[1].toLatin1()) == 0; + } + + return false; +} + #ifndef QT_NO_MIMETYPE void QPpdPrintDevice::loadMimeTypes() const { diff --git a/src/plugins/printsupport/cups/qppdprintdevice.h b/src/plugins/printsupport/cups/qppdprintdevice.h index 3cd7518b14..2e4dd3ab3b 100644 --- a/src/plugins/printsupport/cups/qppdprintdevice.h +++ b/src/plugins/printsupport/cups/qppdprintdevice.h @@ -89,6 +89,9 @@ public: QPrint::ColorMode defaultColorMode() const Q_DECL_OVERRIDE; + QVariant property(QPrintDevice::PrintDevicePropertyKey key) const Q_DECL_OVERRIDE; + bool setProperty(QPrintDevice::PrintDevicePropertyKey key, const QVariant &value) Q_DECL_OVERRIDE; + protected: void loadPageSizes() const Q_DECL_OVERRIDE; void loadResolutions() const Q_DECL_OVERRIDE; diff --git a/src/printsupport/kernel/qcups_p.h b/src/printsupport/kernel/qcups_p.h index 780115e350..b67390c4ed 100644 --- a/src/printsupport/kernel/qcups_p.h +++ b/src/printsupport/kernel/qcups_p.h @@ -67,6 +67,9 @@ QT_BEGIN_NAMESPACE // removed from the dialogs. #define PPK_CupsOptions QPrintEngine::PrintEnginePropertyKey(0xfe00) +#define PDPK_PpdFile QPrintDevice::PrintDevicePropertyKey(QPrintDevice::PDPK_CustomBase) +#define PDPK_PpdOption QPrintDevice::PrintDevicePropertyKey(QPrintDevice::PDPK_CustomBase + 1) + class Q_PRINTSUPPORT_EXPORT QCUPSSupport { public: diff --git a/src/printsupport/kernel/qprint_p.h b/src/printsupport/kernel/qprint_p.h index 280c2d7608..4956775461 100644 --- a/src/printsupport/kernel/qprint_p.h +++ b/src/printsupport/kernel/qprint_p.h @@ -59,6 +59,7 @@ #if (defined Q_OS_MACOS) || (defined Q_OS_UNIX && QT_CONFIG(cups)) #include <cups/ppd.h> // Use for type defs only, don't want to actually link in main module +Q_DECLARE_METATYPE(ppd_file_t *) #endif QT_BEGIN_NAMESPACE -- 2.15.1 ++++++ 0009-QPlatformPrintDevice-use-QVector-not-QList-in-the-AP.patch ++++++ >From 5cb54cb5ebae99fab121061e25e26eec3056203a Mon Sep 17 00:00:00 2001 From: Marc Mutz <[email protected]> Date: Tue, 12 Dec 2017 12:44:02 +0100 Subject: [PATCH 44/54] QPlatformPrintDevice: use QVector, not QList in the API QPlaformPrintDevice uses QVector to store, but QList in the getters to retrieve these data. Port API from QList to QVector to avoid conversion between the two containers on every access. Saves almost 4KiB in text size (another 0.9% of QtPrintSupport). Change-Id: If33df141b87753803c45d9f4dae501a68abe49af Reviewed-by: Lars Knoll <[email protected]> --- src/printsupport/kernel/qplatformprintdevice.cpp | 16 ++++++++-------- src/printsupport/kernel/qplatformprintdevice.h | 8 ++++---- src/printsupport/kernel/qprintdevice.cpp | 16 ++++++++-------- src/printsupport/kernel/qprintdevice_p.h | 8 ++++---- src/printsupport/kernel/qprintengine_win.cpp | 8 ++++---- src/printsupport/kernel/qprinterinfo.cpp | 2 +- 6 files changed, 29 insertions(+), 29 deletions(-) diff --git a/src/printsupport/kernel/qplatformprintdevice.cpp b/src/printsupport/kernel/qplatformprintdevice.cpp index 82bddedb1b..2f76156a91 100644 --- a/src/printsupport/kernel/qplatformprintdevice.cpp +++ b/src/printsupport/kernel/qplatformprintdevice.cpp @@ -313,11 +313,11 @@ QPrint::InputSlot QPlatformPrintDevice::defaultInputSlot() const return input; } -QList<QPrint::InputSlot> QPlatformPrintDevice::supportedInputSlots() const +QVector<QPrint::InputSlot> QPlatformPrintDevice::supportedInputSlots() const { if (!m_haveInputSlots) loadInputSlots(); - return m_inputSlots.toList(); + return m_inputSlots; } void QPlatformPrintDevice::loadOutputBins() const @@ -337,11 +337,11 @@ QPrint::OutputBin QPlatformPrintDevice::defaultOutputBin() const return output; } -QList<QPrint::OutputBin> QPlatformPrintDevice::supportedOutputBins() const +QVector<QPrint::OutputBin> QPlatformPrintDevice::supportedOutputBins() const { if (!m_haveOutputBins) loadOutputBins(); - return m_outputBins.toList(); + return m_outputBins; } void QPlatformPrintDevice::loadDuplexModes() const @@ -353,11 +353,11 @@ QPrint::DuplexMode QPlatformPrintDevice::defaultDuplexMode() const return QPrint::DuplexNone; } -QList<QPrint::DuplexMode> QPlatformPrintDevice::supportedDuplexModes() const +QVector<QPrint::DuplexMode> QPlatformPrintDevice::supportedDuplexModes() const { if (!m_haveDuplexModes) loadDuplexModes(); - return m_duplexModes.toList(); + return m_duplexModes; } void QPlatformPrintDevice::loadColorModes() const @@ -369,11 +369,11 @@ QPrint::ColorMode QPlatformPrintDevice::defaultColorMode() const return QPrint::GrayScale; } -QList<QPrint::ColorMode> QPlatformPrintDevice::supportedColorModes() const +QVector<QPrint::ColorMode> QPlatformPrintDevice::supportedColorModes() const { if (!m_haveColorModes) loadColorModes(); - return m_colorModes.toList(); + return m_colorModes; } #ifndef QT_NO_MIMETYPE diff --git a/src/printsupport/kernel/qplatformprintdevice.h b/src/printsupport/kernel/qplatformprintdevice.h index 1cac009660..8af76464b5 100644 --- a/src/printsupport/kernel/qplatformprintdevice.h +++ b/src/printsupport/kernel/qplatformprintdevice.h @@ -110,16 +110,16 @@ public: virtual QList<int> supportedResolutions() const; virtual QPrint::InputSlot defaultInputSlot() const; - virtual QList<QPrint::InputSlot> supportedInputSlots() const; + virtual QVector<QPrint::InputSlot> supportedInputSlots() const; virtual QPrint::OutputBin defaultOutputBin() const; - virtual QList<QPrint::OutputBin> supportedOutputBins() const; + virtual QVector<QPrint::OutputBin> supportedOutputBins() const; virtual QPrint::DuplexMode defaultDuplexMode() const; - virtual QList<QPrint::DuplexMode> supportedDuplexModes() const; + virtual QVector<QPrint::DuplexMode> supportedDuplexModes() const; virtual QPrint::ColorMode defaultColorMode() const; - virtual QList<QPrint::ColorMode> supportedColorModes() const; + virtual QVector<QPrint::ColorMode> supportedColorModes() const; virtual QVariant property(QPrintDevice::PrintDevicePropertyKey key) const; virtual bool setProperty(QPrintDevice::PrintDevicePropertyKey key, const QVariant &value); diff --git a/src/printsupport/kernel/qprintdevice.cpp b/src/printsupport/kernel/qprintdevice.cpp index 7096f5a2f6..2bc6906364 100644 --- a/src/printsupport/kernel/qprintdevice.cpp +++ b/src/printsupport/kernel/qprintdevice.cpp @@ -210,9 +210,9 @@ QPrint::InputSlot QPrintDevice::defaultInputSlot() const return isValid() ? d->defaultInputSlot() : QPrint::InputSlot(); } -QList<QPrint::InputSlot> QPrintDevice::supportedInputSlots() const +QVector<QPrint::InputSlot> QPrintDevice::supportedInputSlots() const { - return isValid() ? d->supportedInputSlots() : QList<QPrint::InputSlot>(); + return isValid() ? d->supportedInputSlots() : QVector<QPrint::InputSlot>{}; } QPrint::OutputBin QPrintDevice::defaultOutputBin() const @@ -220,9 +220,9 @@ QPrint::OutputBin QPrintDevice::defaultOutputBin() const return isValid() ? d->defaultOutputBin() : QPrint::OutputBin(); } -QList<QPrint::OutputBin> QPrintDevice::supportedOutputBins() const +QVector<QPrint::OutputBin> QPrintDevice::supportedOutputBins() const { - return isValid() ? d->supportedOutputBins() : QList<QPrint::OutputBin>(); + return isValid() ? d->supportedOutputBins() : QVector<QPrint::OutputBin>{}; } QPrint::DuplexMode QPrintDevice::defaultDuplexMode() const @@ -230,9 +230,9 @@ QPrint::DuplexMode QPrintDevice::defaultDuplexMode() const return isValid() ? d->defaultDuplexMode() : QPrint::DuplexNone; } -QList<QPrint::DuplexMode> QPrintDevice::supportedDuplexModes() const +QVector<QPrint::DuplexMode> QPrintDevice::supportedDuplexModes() const { - return isValid() ? d->supportedDuplexModes() : QList<QPrint::DuplexMode>(); + return isValid() ? d->supportedDuplexModes() : QVector<QPrint::DuplexMode>{}; } QPrint::ColorMode QPrintDevice::defaultColorMode() const @@ -240,9 +240,9 @@ QPrint::ColorMode QPrintDevice::defaultColorMode() const return isValid() ? d->defaultColorMode() : QPrint::GrayScale; } -QList<QPrint::ColorMode> QPrintDevice::supportedColorModes() const +QVector<QPrint::ColorMode> QPrintDevice::supportedColorModes() const { - return isValid() ? d->supportedColorModes() : QList<QPrint::ColorMode>(); + return isValid() ? d->supportedColorModes() : QVector<QPrint::ColorMode>{}; } QVariant QPrintDevice::property(PrintDevicePropertyKey key) const diff --git a/src/printsupport/kernel/qprintdevice_p.h b/src/printsupport/kernel/qprintdevice_p.h index 1a26d3afcf..3dff2e54fe 100644 --- a/src/printsupport/kernel/qprintdevice_p.h +++ b/src/printsupport/kernel/qprintdevice_p.h @@ -120,16 +120,16 @@ public: QList<int> supportedResolutions() const; QPrint::InputSlot defaultInputSlot() const; - QList<QPrint::InputSlot> supportedInputSlots() const; + QVector<QPrint::InputSlot> supportedInputSlots() const; QPrint::OutputBin defaultOutputBin() const; - QList<QPrint::OutputBin> supportedOutputBins() const; + QVector<QPrint::OutputBin> supportedOutputBins() const; QPrint::DuplexMode defaultDuplexMode() const; - QList<QPrint::DuplexMode> supportedDuplexModes() const; + QVector<QPrint::DuplexMode> supportedDuplexModes() const; QPrint::ColorMode defaultColorMode() const; - QList<QPrint::ColorMode> supportedColorModes() const; + QVector<QPrint::ColorMode> supportedColorModes() const; enum PrintDevicePropertyKey { PDPK_CustomBase = 0xff00 diff --git a/src/printsupport/kernel/qprintengine_win.cpp b/src/printsupport/kernel/qprintengine_win.cpp index e399118cc9..ba234b3aae 100644 --- a/src/printsupport/kernel/qprintengine_win.cpp +++ b/src/printsupport/kernel/qprintengine_win.cpp @@ -1024,7 +1024,7 @@ bool QWin32PrintEnginePrivate::resetDC() return hdc != 0; } -static int indexOfId(const QList<QPrint::InputSlot> &inputSlots, QPrint::InputSlotId id) +static int indexOfId(const QVector<QPrint::InputSlot> &inputSlots, QPrint::InputSlotId id) { for (int i = 0; i < inputSlots.size(); ++i) { if (inputSlots.at(i).id == id) @@ -1033,7 +1033,7 @@ static int indexOfId(const QList<QPrint::InputSlot> &inputSlots, QPrint::InputSl return -1; } -static int indexOfWindowsId(const QList<QPrint::InputSlot> &inputSlots, int windowsId) +static int indexOfWindowsId(const QVector<QPrint::InputSlot> &inputSlots, int windowsId) { for (int i = 0; i < inputSlots.size(); ++i) { if (inputSlots.at(i).windowsId == windowsId) @@ -1210,7 +1210,7 @@ void QWin32PrintEngine::setProperty(PrintEnginePropertyKey key, const QVariant & case PPK_PaperSource: { if (!d->devMode) break; - const QList<QPrint::InputSlot> inputSlots = d->m_printDevice.supportedInputSlots(); + const auto inputSlots = d->m_printDevice.supportedInputSlots(); const int paperSource = value.toInt(); const int index = paperSource >= DMBIN_USER ? indexOfWindowsId(inputSlots, paperSource) : indexOfId(inputSlots, QPrint::InputSlotId(paperSource)); @@ -1465,7 +1465,7 @@ QVariant QWin32PrintEngine::property(PrintEnginePropertyKey key) const if (d->devMode->dmDefaultSource >= DMBIN_USER) { value = int(d->devMode->dmDefaultSource); } else { - const QList<QPrint::InputSlot> inputSlots = d->m_printDevice.supportedInputSlots(); + const auto inputSlots = d->m_printDevice.supportedInputSlots(); const int index = indexOfWindowsId(inputSlots, d->devMode->dmDefaultSource); value = index >= 0 ? inputSlots.at(index).id : QPrint::Auto; } diff --git a/src/printsupport/kernel/qprinterinfo.cpp b/src/printsupport/kernel/qprinterinfo.cpp index d271e069ad..49a0c9ece4 100644 --- a/src/printsupport/kernel/qprinterinfo.cpp +++ b/src/printsupport/kernel/qprinterinfo.cpp @@ -380,7 +380,7 @@ QList<QPrinter::DuplexMode> QPrinterInfo::supportedDuplexModes() const { Q_D(const QPrinterInfo); QList<QPrinter::DuplexMode> list; - const QList<QPrint::DuplexMode> supportedDuplexModes = d->m_printDevice.supportedDuplexModes(); + const auto supportedDuplexModes = d->m_printDevice.supportedDuplexModes(); list.reserve(supportedDuplexModes.size()); for (QPrint::DuplexMode mode : supportedDuplexModes) list << QPrinter::DuplexMode(mode); -- 2.15.1 ++++++ 0010-Reintroduce-the-Advanced-tab-in-the-QPrintProperties.patch ++++++ >From b4330bc391bbb08898f192ea3469b73aed09134c Mon Sep 17 00:00:00 2001 From: Albert Astals Cid <[email protected]> Date: Tue, 5 Dec 2017 09:40:59 +0100 Subject: [PATCH 50/54] Reintroduce the Advanced tab in the QPrintPropertiesDialog This is mostly a revert of 69de6177615de3c4c31dea529172389e92f490b0 adapted to the new code. The commit that removed this code said: a) there's duplicate settings in the advanced tabs and in the rest of the ui: this easily solved with a blacklist b) you can set these options in the system settings: probably true, but it is very cumbersome to go to the printer settings every time i print to select from which tray the paper should be used Task Number: QTBUG-54464 Change-Id: I7b1cacf51006dadb10aa6e00fe6dd2ff748fe576 Reviewed-by: Frederik Gladhorn <[email protected]> --- src/printsupport/dialogs/qprintdialog_unix.cpp | 401 ++++++++++++++++++++- src/printsupport/dialogs/qprintpropertieswidget.ui | 14 + 2 files changed, 409 insertions(+), 6 deletions(-) diff --git a/src/printsupport/dialogs/qprintdialog_unix.cpp b/src/printsupport/dialogs/qprintdialog_unix.cpp index f87630f1a0..d5ad90e85e 100644 --- a/src/printsupport/dialogs/qprintdialog_unix.cpp +++ b/src/printsupport/dialogs/qprintdialog_unix.cpp @@ -108,6 +108,11 @@ Print dialog class declarations allow editing of Page and Advanced tabs. Layout in qprintpropertieswidget.ui + + QPPDOptionsModel: Holds the PPD Options for the printer. + + QPPDOptionsEditor: Edits the PPD Options for the printer. + */ static void initResources() @@ -124,19 +129,29 @@ class QPrintPropertiesDialog : public QDialog { Q_OBJECT public: - QPrintPropertiesDialog(QPrinter *printer, QPrinter::OutputFormat outputFormat, - const QString &printerName, QAbstractPrintDialog *parent = nullptr); + QPrintPropertiesDialog(QPrinter *printer, QPrintDevice *currentPrintDevice, + QPrinter::OutputFormat outputFormat, const QString &printerName, + QAbstractPrintDialog *parent); ~QPrintPropertiesDialog(); void setupPrinter() const; + void showEvent(QShowEvent *event) override; + private: friend class QUnixPrintWidgetPrivate; + QPrinter *m_printer; Ui::QPrintPropertiesWidget widget; QDialogButtonBox *m_buttons; #if QT_CONFIG(cupsjobwidget) QCupsJobWidget *m_jobOptions; #endif + +#if QT_CONFIG(cups) + void setCupsOptionsFromItems(QOptionTreeItem *parent) const; + + QPPDOptionsModel *m_cupsOptionsModel; +#endif }; class QUnixPrintWidgetPrivate; @@ -220,6 +235,70 @@ public: QPrinter::OutputFormat printerOutputFormat; }; +#if QT_CONFIG(cups) +class QOptionTreeItem +{ +public: + enum ItemType { Root, Group, Option, Choice }; + + QOptionTreeItem(ItemType t, int i, const void *p, const char *desc, QOptionTreeItem *pi) + : type(t), + index(i), + ptr(p), + description(desc), + selected(-1), + selDescription(nullptr), + parentItem(pi) {} + + ~QOptionTreeItem() { + qDeleteAll(childItems); + } + + ItemType type; + int index; + const void *ptr; + const char *description; + int selected; + const char *selDescription; + QOptionTreeItem *parentItem; + QList<QOptionTreeItem*> childItems; +}; + +class QPPDOptionsModel : public QAbstractItemModel +{ + Q_OBJECT + +public: + explicit QPPDOptionsModel(QPrintDevice *currentPrintDevice, QObject *parent); + + int columnCount(const QModelIndex &parent = QModelIndex()) const override; + int rowCount(const QModelIndex &parent = QModelIndex()) const override; + QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; + QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override; + QModelIndex parent(const QModelIndex &index) const override; + Qt::ItemFlags flags(const QModelIndex &index) const override; + QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const override; + + QPrintDevice *m_currentPrintDevice; + QTextCodec *cupsCodec; + QOptionTreeItem *rootItem; + void parseGroups(QOptionTreeItem *parent); + void parseOptions(QOptionTreeItem *parent); + void parseChoices(QOptionTreeItem *parent); +}; + +class QPPDOptionsEditor : public QStyledItemDelegate +{ + Q_OBJECT +public: + explicit QPPDOptionsEditor(QObject *parent) : QStyledItemDelegate(parent) {} + + QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override; + void setEditorData(QWidget *editor, const QModelIndex &index) const override; + void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override; +}; + +#endif //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// @@ -233,9 +312,11 @@ public: */ -QPrintPropertiesDialog::QPrintPropertiesDialog(QPrinter *printer, QPrinter::OutputFormat outputFormat, - const QString &printerName, QAbstractPrintDialog *parent) +QPrintPropertiesDialog::QPrintPropertiesDialog(QPrinter *printer, QPrintDevice *currentPrintDevice, + QPrinter::OutputFormat outputFormat, const QString &printerName, + QAbstractPrintDialog *parent) : QDialog(parent) + , m_printer(printer) { setWindowTitle(tr("Printer Properties")); QVBoxLayout *lay = new QVBoxLayout(this); @@ -252,7 +333,29 @@ QPrintPropertiesDialog::QPrintPropertiesDialog(QPrinter *printer, QPrinter::Outp #if QT_CONFIG(cupsjobwidget) m_jobOptions = new QCupsJobWidget(printer); - widget.tabs->addTab(m_jobOptions, tr("Job Options")); + widget.tabs->insertTab(1, m_jobOptions, tr("Job Options")); +#endif + + const int advancedTabIndex = widget.tabs->indexOf(widget.cupsPropertiesPage); +#if QT_CONFIG(cups) + m_cupsOptionsModel = new QPPDOptionsModel(currentPrintDevice, this); + + widget.treeView->setItemDelegate(new QPPDOptionsEditor(this)); + + if (m_cupsOptionsModel->rowCount() > 0) { + widget.treeView->setModel(m_cupsOptionsModel); + + for (int i = 0; i < m_cupsOptionsModel->rowCount(); ++i) + widget.treeView->expand(m_cupsOptionsModel->index(i, 0)); + + widget.tabs->setTabEnabled(advancedTabIndex, true); + } else { + widget.treeView->setModel(nullptr); + widget.tabs->setTabEnabled(advancedTabIndex, false); + } +#else + Q_UNUSED(currentPrintDevice) + widget.tabs->setTabEnabled(advancedTabIndex, false); #endif } @@ -266,8 +369,36 @@ void QPrintPropertiesDialog::setupPrinter() const #if QT_CONFIG(cupsjobwidget) m_jobOptions->setupPrinter(); #endif + +#if QT_CONFIG(cups) + setCupsOptionsFromItems(m_cupsOptionsModel->rootItem); +#endif } +void QPrintPropertiesDialog::showEvent(QShowEvent *event) +{ + widget.treeView->resizeColumnToContents(0); + QDialog::showEvent(event); +} + +#if QT_CONFIG(cups) +void QPrintPropertiesDialog::setCupsOptionsFromItems(QOptionTreeItem *parent) const +{ + for (QOptionTreeItem *itm : qAsConst(parent->childItems)) { + if (itm->type == QOptionTreeItem::Option) { + const ppd_option_t *opt = static_cast<const ppd_option_t*>(itm->ptr); + if (qstrcmp(opt->defchoice, opt->choices[itm->selected].choice) != 0) { + QStringList cupsOptions = QCUPSSupport::cupsOptionsList(m_printer); + QCUPSSupport::setCupsOption(cupsOptions, QString::fromLatin1(opt->keyword), QString::fromLatin1(opt->choices[itm->selected].choice)); + QCUPSSupport::setCupsOptions(m_printer, cupsOptions); + } + } else { + setCupsOptionsFromItems(itm); + } + } +} +#endif + //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// @@ -844,7 +975,7 @@ void QUnixPrintWidgetPrivate::setupPrinterProperties() printerName = widget.printers->currentText(); } - propertiesDialog = new QPrintPropertiesDialog(q->printer(), outputFormat, printerName, q); + propertiesDialog = new QPrintPropertiesDialog(q->printer(), &m_currentPrintDevice, outputFormat, printerName, q); propertiesDialog->setResult(QDialog::Rejected); propertiesDialogShown = false; } @@ -952,6 +1083,264 @@ void QUnixPrintWidget::updatePrinter() //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// +/* + + QPPDOptionsModel + + Holds the PPD Options for the printer. + +*/ + +#if QT_CONFIG(cups) + +QPPDOptionsModel::QPPDOptionsModel(QPrintDevice *currentPrintDevice, QObject *parent) + : QAbstractItemModel(parent) + , m_currentPrintDevice(currentPrintDevice) +{ + ppd_file_t *ppd = m_currentPrintDevice->property(PDPK_PpdFile).value<ppd_file_t*>(); + rootItem = new QOptionTreeItem(QOptionTreeItem::Root, 0, ppd, "Root Item", 0); + + if (ppd) { + cupsCodec = QTextCodec::codecForName(ppd->lang_encoding); + for (int i = 0; i < ppd->num_groups; ++i) { + QOptionTreeItem *group = new QOptionTreeItem(QOptionTreeItem::Group, i, &ppd->groups[i], ppd->groups[i].text, rootItem); + rootItem->childItems.append(group); + parseGroups(group); // parse possible subgroups + parseOptions(group); // parse options + } + } + + if (!cupsCodec) + cupsCodec = QTextCodec::codecForLocale(); +} + +int QPPDOptionsModel::columnCount(const QModelIndex &) const +{ + return 2; +} + +int QPPDOptionsModel::rowCount(const QModelIndex &parent) const +{ + QOptionTreeItem *itm; + if (!parent.isValid()) + itm = rootItem; + else + itm = static_cast<QOptionTreeItem*>(parent.internalPointer()); + + if (itm->type == QOptionTreeItem::Option) + return 0; + + return itm->childItems.count(); +} + +QVariant QPPDOptionsModel::data(const QModelIndex &index, int role) const +{ + if (!index.isValid()) + return QVariant(); + + QOptionTreeItem *itm = static_cast<QOptionTreeItem*>(index.internalPointer()); + + switch (role) { + case Qt::FontRole: { + if (itm->type == QOptionTreeItem::Group){ + QFont font; + font.setBold(true); + return QVariant(font); + } + return QVariant(); + } + break; + + case Qt::DisplayRole: { + if (index.column() == 0) + return cupsCodec->toUnicode(itm->description); + else if (itm->type == QOptionTreeItem::Option && itm->selected > -1) + return cupsCodec->toUnicode(itm->selDescription); + else + return QVariant(); + } + break; + + } + + return QVariant(); +} + +QModelIndex QPPDOptionsModel::index(int row, int column, const QModelIndex &parent) const +{ + QOptionTreeItem *itm; + if (!parent.isValid()) + itm = rootItem; + else + itm = static_cast<QOptionTreeItem*>(parent.internalPointer()); + + return createIndex(row, column, itm->childItems.at(row)); +} + + +QModelIndex QPPDOptionsModel::parent(const QModelIndex &index) const +{ + if (!index.isValid()) + return QModelIndex(); + + QOptionTreeItem *itm = static_cast<QOptionTreeItem*>(index.internalPointer()); + + if (itm->parentItem && itm->parentItem != rootItem) + return createIndex(itm->parentItem->index, 0, itm->parentItem); + + return QModelIndex(); +} + +Qt::ItemFlags QPPDOptionsModel::flags(const QModelIndex &index) const +{ + if (!index.isValid() || static_cast<QOptionTreeItem*>(index.internalPointer())->type == QOptionTreeItem::Group) + return Qt::ItemIsEnabled; + + if (index.column() == 1) + return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable; + + return Qt::ItemIsEnabled | Qt::ItemIsSelectable; +} + +void QPPDOptionsModel::parseGroups(QOptionTreeItem *parent) +{ + const ppd_group_t *group = static_cast<const ppd_group_t*>(parent->ptr); + + if (group) { + for (int i = 0; i < group->num_subgroups; ++i) { + QOptionTreeItem *subgroup = new QOptionTreeItem(QOptionTreeItem::Group, i, &group->subgroups[i], group->subgroups[i].text, parent); + parent->childItems.append(subgroup); + parseGroups(subgroup); // parse possible subgroups + parseOptions(subgroup); // parse options + } + } +} + +static bool isBlacklistedOption(const char *keyword) Q_DECL_NOTHROW +{ + // We already let the user set these options elsewhere + const char *cupsOptionBlacklist[] = { + "Collate", + "Copies", + "OutputOrder", + "PageRegion", + "PageSize" + }; + auto equals = [](const char *keyword) { + return [keyword](const char *candidate) { + return qstrcmp(keyword, candidate) == 0; + }; + }; + return std::any_of(std::begin(cupsOptionBlacklist), std::end(cupsOptionBlacklist), equals(keyword)); +}; + +void QPPDOptionsModel::parseOptions(QOptionTreeItem *parent) +{ + const ppd_group_t *group = static_cast<const ppd_group_t*>(parent->ptr); + for (int i = 0; i < group->num_options; ++i) { + if (!isBlacklistedOption(group->options[i].keyword)) { + QOptionTreeItem *opt = new QOptionTreeItem(QOptionTreeItem::Option, i, &group->options[i], group->options[i].text, parent); + parent->childItems.append(opt); + parseChoices(opt); + } + } +} + +void QPPDOptionsModel::parseChoices(QOptionTreeItem *parent) +{ + const ppd_option_t *option = static_cast<const ppd_option_t*>(parent->ptr); + bool marked = false; + for (int i = 0; i < option->num_choices; ++i) { + QOptionTreeItem *choice = new QOptionTreeItem(QOptionTreeItem::Choice, i, &option->choices[i], option->choices[i].text, parent); + if (static_cast<int>(option->choices[i].marked) == 1) { + parent->selected = i; + parent->selDescription = option->choices[i].text; + marked = true; + } else if (!marked && qstrcmp(option->choices[i].choice, option->defchoice) == 0) { + parent->selected = i; + parent->selDescription = option->choices[i].text; + } + parent->childItems.append(choice); + } +} + +QVariant QPPDOptionsModel::headerData(int section, Qt::Orientation, int role) const +{ + if (role != Qt::DisplayRole) + return QVariant(); + + switch (section) { + case 0: + return QVariant(tr("Name")); + case 1: + return QVariant(tr("Value")); + } + + return QVariant(); +} + +//////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// + +/* + + QPPDOptionsEditor + + Edits the PPD Options for the printer. + +*/ + +QWidget *QPPDOptionsEditor::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const +{ + Q_UNUSED(option) + + if (index.column() == 1 && static_cast<QOptionTreeItem*>(index.internalPointer())->type == QOptionTreeItem::Option) + return new QComboBox(parent); + + return nullptr; +} + +void QPPDOptionsEditor::setEditorData(QWidget *editor, const QModelIndex &index) const +{ + if (index.column() != 1) + return; + + QComboBox *cb = static_cast<QComboBox*>(editor); + QOptionTreeItem *itm = static_cast<QOptionTreeItem*>(index.internalPointer()); + + if (itm->selected == -1) + cb->addItem(QString()); + + const QPPDOptionsModel *m = static_cast<const QPPDOptionsModel*>(index.model()); + for (auto *childItem : qAsConst(itm->childItems)) + cb->addItem(m->cupsCodec->toUnicode(childItem->description)); + + if (itm->selected > -1) + cb->setCurrentIndex(itm->selected); +} + +void QPPDOptionsEditor::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const +{ + QComboBox *cb = static_cast<QComboBox*>(editor); + QOptionTreeItem *itm = static_cast<QOptionTreeItem*>(index.internalPointer()); + + if (itm->selected == cb->currentIndex()) + return; + + const ppd_option_t *opt = static_cast<const ppd_option_t*>(itm->ptr); + QPPDOptionsModel *m = static_cast<QPPDOptionsModel*>(model); + + const auto values = QStringList{} << QString::fromLatin1(opt->keyword) << QString::fromLatin1(opt->choices[cb->currentIndex()].choice); + if (m->m_currentPrintDevice->setProperty(PDPK_PpdOption, values)) { + itm->selected = cb->currentIndex(); + itm->selDescription = static_cast<const ppd_option_t*>(itm->ptr)->choices[itm->selected].text; + } +} + +//////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// + +#endif // QT_CONFIG(cups) #endif // defined (Q_OS_UNIX) QT_END_NAMESPACE diff --git a/src/printsupport/dialogs/qprintpropertieswidget.ui b/src/printsupport/dialogs/qprintpropertieswidget.ui index 66d7b80fcd..0e56fb33df 100644 --- a/src/printsupport/dialogs/qprintpropertieswidget.ui +++ b/src/printsupport/dialogs/qprintpropertieswidget.ui @@ -32,6 +32,20 @@ </item> </layout> </widget> + <widget class="QWidget" name="cupsPropertiesPage" > + <attribute name="title" > + <string>Advanced</string> + </attribute> + <layout class="QHBoxLayout" name="horizontalLayout_2" > + <item> + <widget class="QTreeView" name="treeView" > + <property name="alternatingRowColors" > + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </widget> </widget> </item> </layout> -- 2.15.1 ++++++ 0011-QtPrintSupport-Fix-build.patch ++++++ >From e31c79ece49f0893882f9062edc9664926b9b13f Mon Sep 17 00:00:00 2001 From: Friedemann Kleint <[email protected]> Date: Mon, 18 Dec 2017 09:31:11 +0100 Subject: [PATCH 54/54] QtPrintSupport: Fix build dialogs/qprintdialog_unix.cpp:1104:21: error: incomplete type 'QTextCodec' used in nested name specifier Amends b4330bc391bbb08898f192ea3469b73aed09134c. Task-number: QTBUG-54464 Change-Id: I555431d11a5c3f247d4f055d94255d2708c92374 Reviewed-by: Albert Astals Cid <[email protected]> Reviewed-by: David Faure <[email protected]> --- src/printsupport/dialogs/qprintdialog_unix.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/printsupport/dialogs/qprintdialog_unix.cpp b/src/printsupport/dialogs/qprintdialog_unix.cpp index d5ad90e85e..9ad9fa35a5 100644 --- a/src/printsupport/dialogs/qprintdialog_unix.cpp +++ b/src/printsupport/dialogs/qprintdialog_unix.cpp @@ -49,6 +49,7 @@ #include "qfiledialog.h" #endif #include <QtCore/qdir.h> +#include <QtCore/qtextcodec.h> #include <QtGui/qevent.h> #if QT_CONFIG(filesystemmodel) #include <QtWidgets/qfilesystemmodel.h> -- 2.15.1 ++++++ libqt5-prioritise-gtk2-platformtheme.patch ++++++ --- /var/tmp/diff_new_pack.zoW5wv/_old 2017-12-23 12:15:57.901885231 +0100 +++ /var/tmp/diff_new_pack.zoW5wv/_new 2017-12-23 12:15:57.901885231 +0100 @@ -1,8 +1,8 @@ -Index: qtbase-opensource-src-5.9.2/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp +Index: qtbase-opensource-src-5.9.1/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp =================================================================== ---- qtbase-opensource-src-5.9.2.orig/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp -+++ qtbase-opensource-src-5.9.2/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp -@@ -859,7 +859,9 @@ QStringList QGenericUnixTheme::themeName +--- qtbase-opensource-src-5.9.1.orig/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp ++++ qtbase-opensource-src-5.9.1/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp +@@ -828,7 +828,9 @@ QStringList QGenericUnixTheme::themeName result.push_back(QLatin1String(QKdeTheme::name)); #endif } else if (gtkBasedEnvironments.contains(desktopName)) { ++++++ tell-the-truth-about-private-api.patch ++++++ --- /var/tmp/diff_new_pack.zoW5wv/_old 2017-12-23 12:15:57.937883476 +0100 +++ /var/tmp/diff_new_pack.zoW5wv/_new 2017-12-23 12:15:57.937883476 +0100 @@ -1,8 +1,8 @@ -diff --git a/mkspecs/features/qt_module.prf b/mkspecs/features/qt_module.prf -index f6cbf99..798472a 100644 ---- a/mkspecs/features/qt_module.prf -+++ b/mkspecs/features/qt_module.prf -@@ -214,9 +214,9 @@ android: CONFIG += qt_android_deps no_linker_version_script +Index: qtbase-everywhere-src-5.10.0-rc1/mkspecs/features/qt_module.prf +=================================================================== +--- qtbase-everywhere-src-5.10.0-rc1.orig/mkspecs/features/qt_module.prf ++++ qtbase-everywhere-src-5.10.0-rc1/mkspecs/features/qt_module.prf +@@ -216,9 +216,9 @@ android: CONFIG += qt_android_deps no_li QMAKE_LFLAGS += $${QMAKE_LFLAGS_VERSION_SCRIPT}$$verscript internal_module {
