Hello community, here is the log from the commit of package libqt5-qtbase for openSUSE:Factory checked in at 2017-06-13 16:06:00 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libqt5-qtbase (Old) and /work/SRC/openSUSE:Factory/.libqt5-qtbase.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libqt5-qtbase" Tue Jun 13 16:06:00 2017 rev:59 rq:501456 version:5.9.0 Changes: -------- --- /work/SRC/openSUSE:Factory/libqt5-qtbase/libqt5-qtbase.changes 2016-12-22 16:06:07.401079872 +0100 +++ /work/SRC/openSUSE:Factory/.libqt5-qtbase.new/libqt5-qtbase.changes 2017-06-13 16:06:03.024053118 +0200 @@ -1,0 +2,59 @@ +Tue Jun 6 10:19:48 UTC 2017 - [email protected] + +- Add 0001-Add-remote-print-queue-support.patch to support remote print + queues. This adds a delay the first time the print dialog is opened in + order to search for print queues. If you don't have any network printer + queue and you find the delay too annoying, it can be disabled by setting + the QT_DISABLE_PRINTER_DISCOVERY environment variable to 1 (fate#322052, + bsc#955432). +- Add 0001-Fix-open-chmod-race-condition-in-QSaveFile.patch to fix + a potential info leak due to race condition in QSaveFile (bsc#1034005). + +------------------------------------------------------------------- +Fri Jun 2 21:11:41 UTC 2017 - [email protected] + +- Revert upstream commit to workaround QTBUG-61197: + * de63bbd2f806b0219a60775017899cedb121581f.patch + +------------------------------------------------------------------- +Fri Jun 2 17:57:54 UTC 2017 - [email protected] + +- Add upstream patch to fix QTBUG-61140: + * dont-destroy-foreign-windows.patch +- Replaces c585802e946d97e7d177ea334a162dc7bc286b84.patch + +------------------------------------------------------------------- +Fri Jun 2 08:49:53 UTC 2017 - [email protected] + +- Add upstream patch to fix various HiDPI-related issues: + * native-children-hidpi-offset.patch (QTBUG-59017, kde#363548) + +------------------------------------------------------------------- +Wed May 31 19:46:07 UTC 2017 - [email protected] + +- Revert upstream commit to workaround QTBUG-61140: + c585802e946d97e7d177ea334a162dc7bc286b84.patch + +------------------------------------------------------------------- +Wed May 31 07:05:05 UTC 2017 - [email protected] + +- Update to 5.9.0 final + +------------------------------------------------------------------- +Wed May 24 19:16:41 UTC 2017 - [email protected] + +- Update to 5.9.0 RC: + * For more details please see: + http://lists.qt-project.org/pipermail/announce/2017-May/000115.html + and https://wiki.qt.io/New_Features_in_Qt_5.9 +- Remove patches, now upstream: + * Stop-unloading-plugins-in-QPluginLoader-and-QFactoryLoader.patch + * Fix-some-QtDBus-crashes-during-application-destruction.patch + * Merge-the-QDBusMetaTypes-custom-information-to-QDBusConnectionManager.patch +- Refresh patches: + * Fix-some-QtDBus-crashes-during-application-destruction.patch + * Merge-the-QDBusMetaTypes-custom-information-to-QDBusConnectionManager.patch + * libqt5-prioritise-gtk2-platformtheme.patch + * tell-the-truth-about-private-api.patch + +------------------------------------------------------------------- Old: ---- Fix-some-QtDBus-crashes-during-application-destruction.patch Merge-the-QDBusMetaTypes-custom-information-to-QDBusConnectionManager.patch Stop-unloading-plugins-in-QPluginLoader-and-QFactoryLoader.patch qtbase-opensource-src-5.7.1.tar.xz New: ---- 0001-Add-remote-print-queue-support.patch 0001-Fix-open-chmod-race-condition-in-QSaveFile.patch de63bbd2f806b0219a60775017899cedb121581f.patch dont-destroy-foreign-windows.patch native-children-hidpi-offset.patch qtbase-opensource-src-5.9.0.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libqt5-qtbase.spec ++++++ --- /var/tmp/diff_new_pack.iFnuzy/_old 2017-06-13 16:06:07.235459613 +0200 +++ /var/tmp/diff_new_pack.iFnuzy/_new 2017-06-13 16:06:07.239459049 +0200 @@ -1,7 +1,7 @@ # # spec file for package libqt5-qtbase # -# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -26,17 +26,17 @@ %endif Name: libqt5-qtbase -Version: 5.7.1 +Version: 5.9.0 Release: 0 Summary: C++ Program Library, Core Components License: GPL-3.0 or SUSE-LGPL-2.1-with-digia-exception-1.1 Group: System/Libraries -Url: http://qt.digia.com +Url: https://www.qt.io %define base_name libqt5 -%define real_version 5.7.1 -%define so_version 5.7.1 +%define real_version 5.9.0 +%define so_version 5.9.0 %define tar_version qtbase-opensource-src-%{real_version} -Source: %{tar_version}.tar.xz +Source: https://download.qt.io/official_releases/qt/5.9/%{real_version}/submodules/%{tar_version}.tar.xz # to get mtime of file: Source1: libqt5-qtbase.changes Source2: macros.qt5 @@ -49,14 +49,21 @@ Patch5: libqt5-do-not-use-shm-if-display-name-doesnt-look-local.patch # PATCH-FIX-OPENSUSE disable-rc4-ciphers-bnc865241.diff bnc#865241-- Exclude rc4 ciphers from being used by default Patch6: disable-rc4-ciphers-bnc865241.diff -Patch7: tell-the-truth-about-private-api.patch +Patch8: tell-the-truth-about-private-api.patch # 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 -# patches 1000-2000 and above from upstream 5.7 branch # -Patch1004: Stop-unloading-plugins-in-QPluginLoader-and-QFactoryLoader.patch -Patch1006: Merge-the-QDBusMetaTypes-custom-information-to-QDBusConnectionManager.patch -Patch1007: Fix-some-QtDBus-crashes-during-application-destruction.patch -# patches 2000-3000 and above from upstream 5.8 branch # +# PATCH-FIX-OPENSUSE de63bbd2f806b0219a60775017899cedb121581f.patch -- Revert upstream commit to workaround QTBUG-61197 +Patch11: de63bbd2f806b0219a60775017899cedb121581f.patch +# PATCH-FEATURE-OPENSUSE 0001-Add-remote-print-queue-support.patch fate#322052 -- Automatically recognize and allow printing to remote cups servers +Patch12: 0001-Add-remote-print-queue-support.patch +# PATCH-FIX-UPSTREAM 0001-Fix-open-chmod-race-condition-in-QSaveFile.patch bsc#1034005 -- Fix a open file/change permission race condition in QSaveFile +Patch13: 0001-Fix-open-chmod-race-condition-in-QSaveFile.patch +# patches 1000-2000 and above from upstream 5.9 branch # +# PATCH-FIX-UPSTREAM +Patch1000: native-children-hidpi-offset.patch +# PATCH-FIX-UPSTREAM Revert to workaround QTBUG-61140 +Patch1001: dont-destroy-foreign-windows.patch +# patches 2000-3000 and above from upstream 5.10/dev branch # BuildRequires: alsa-devel BuildRequires: cups-devel BuildRequires: double-conversion-devel @@ -140,11 +147,13 @@ %patch3 -p1 %patch5 -p1 %patch6 -p1 -%patch7 -p1 +%patch8 -p1 %patch10 -p1 -%patch1004 -p1 -%patch1006 -p1 -%patch1007 -p1 +%patch11 -p1 +%patch12 -p1 +%patch13 -p1 +%patch1000 -p1 +%patch1001 -p1 # be sure not to use them rm -rf src/3rdparty/{libjpeg,freetype,zlib} @@ -564,6 +573,7 @@ Requires: libQt5Core-private-headers-devel = %{version} Requires: libQt5DBus-private-headers-devel = %{version} Requires: libQt5Gui-private-headers-devel = %{version} +Requires: libQt5KmsSupport-private-headers-devel = %{version} Requires: libQt5Network-private-headers-devel = %{version} Requires: libQt5OpenGL-private-headers-devel = %{version} Requires: libQt5PlatformSupport-private-headers-devel = %{version} @@ -634,6 +644,26 @@ %description -n libQt5PlatformSupport-private-headers-devel Qt 5 PlatformSupport Library - Non-ABI stable development files. +%package -n libQt5KmsSupport-devel-static +Summary: Qt KmsSupport module +Group: Development/Libraries/C and C++ +Requires: libQt5Core-devel = %{version} +Requires: libQt5Gui-devel = %{version} + +%description -n libQt5KmsSupport-devel-static +Qt KmsSupport module. + +%package -n libQt5KmsSupport-private-headers-devel +Summary: Qt 5 KmsSupport Library - Non-ABI stable development files +Group: Development/Libraries/X11 +BuildArch: noarch +Requires: libQt5Core-private-headers-devel = %{version} +Requires: libQt5Gui-private-headers-devel = %{version} +Requires: libQt5KmsSupport-devel-static = %{version} + +%description -n libQt5KmsSupport-private-headers-devel +Qt 5 KmsSupport Library - Non-ABI stable development files. + %package -n libQt5PlatformHeaders-devel Summary: Qt 5 PlatformHeaders Group: Development/Libraries/X11 @@ -661,7 +691,7 @@ Examples for libqt5-qtbase modules. %build -export QMAKESPEC=$PWD/mkspecs/linux-g++ +#export QMAKESPEC=$PWD/mkspecs/linux-g++ %ifarch ppc64 RPM_OPT_FLAGS="%{optflags} -mminimal-toc" %endif @@ -716,11 +746,7 @@ -shared \ -xkb \ -system-xkbcommon \ - -xrender \ - -xcursor \ -dbus-linked \ - -xfixes \ - -xrandr \ -sm \ -no-rpath \ -system-libjpeg \ @@ -733,7 +759,6 @@ -system-freetype \ -cups \ -system-zlib \ - -iconv \ -no-pch \ -glib \ -system-sqlite \ @@ -742,7 +767,6 @@ %if %journald -journald \ %endif - -xsync \ -xcb \ -egl \ -eglfs \ @@ -785,7 +809,7 @@ find %{buildroot}%{libqt5_libdir}/ -name 'lib*.a' -exec chmod -x -- {} \; # kill .la files rm -fv %{buildroot}%{libqt5_libdir}/lib*.la -rm -fv %{buildroot}%{libqt5_libdir}/libqtpng.* +rm -fv %{buildroot}%{libqt5_libdir}/*png.* # rm -fv %{buildroot}%{libqt5_libdir}/cmake/Qt5*/Q*Plugin.cmake @@ -1035,7 +1059,7 @@ %ifarch %ix86 %{libqt5_libdir}/sse2/libQt5Gui.so.* %endif -%{libqt5_libdir}/libQt5EglDeviceIntegration.so.* +%{libqt5_libdir}/libQt5EglFSDeviceIntegration.so.* %if 0%{?is_opensuse} %{libqt5_libdir}/libQt5EglFsKmsSupport.so.* %endif @@ -1058,6 +1082,8 @@ %doc *.txt LICENSE.* %{libqt5_libdir}/libQt5Gui.so %{libqt5_libdir}/libQt5Gui.prl +%{libqt5_libdir}/libQt5EglFSDeviceIntegration.so +%{libqt5_libdir}/libQt5EglFSDeviceIntegration.prl %if 0%{?is_opensuse} %{libqt5_libdir}/libQt5EglFsKmsSupport.prl %{libqt5_libdir}/libQt5EglFsKmsSupport.so @@ -1065,7 +1091,9 @@ %{libqt5_libdir}/cmake/Qt5Gui/ %{libqt5_libdir}/pkgconfig/Qt5Gui.pc %{libqt5_includedir}/QtGui/ +%{libqt5_includedir}/QtEglFSDeviceIntegration/ %exclude %{libqt5_includedir}/QtGui/%{so_version} +%exclude %{libqt5_includedir}/QtEglFSDeviceIntegration/%{so_version} %files devel %defattr(-,root,root,755) @@ -1130,17 +1158,70 @@ %files -n libQt5PlatformSupport-devel-static %defattr(-,root,root,755) %doc *.txt LICENSE.* -%{libqt5_libdir}/libQt5EglDeviceIntegration.so %{libqt5_libdir}/libQt5XcbQpa.so -%{libqt5_libdir}/libQt5PlatformSupport.a -%{libqt5_libdir}/libQt5PlatformSupport.prl -%{libqt5_libdir}/libQt5EglDeviceIntegration.prl %{libqt5_libdir}/libQt5XcbQpa.prl -#{libqt5_libdir}/pkgconfig/Qt5PlatformSupport.pc -#{libqt5_libdir}/pkgconfig/Qt5EglDeviceIntegration.pc -#{libqt5_libdir}/pkgconfig/Qt5XcbQpa.pc -%{libqt5_includedir}/QtPlatformSupport/ -%exclude %{libqt5_includedir}/QtPlatformSupport/%{so_version} +%{libqt5_libdir}/libQt5AccessibilitySupport.a +%{libqt5_libdir}/libQt5AccessibilitySupport.prl +%{libqt5_libdir}/libQt5DeviceDiscoverySupport.a +%{libqt5_libdir}/libQt5DeviceDiscoverySupport.prl +%{libqt5_libdir}/libQt5EglSupport.a +%{libqt5_libdir}/libQt5EglSupport.prl +%{libqt5_libdir}/libQt5EventDispatcherSupport.a +%{libqt5_libdir}/libQt5EventDispatcherSupport.prl +%{libqt5_libdir}/libQt5FbSupport.a +%{libqt5_libdir}/libQt5FbSupport.prl +%{libqt5_libdir}/libQt5FontDatabaseSupport.a +%{libqt5_libdir}/libQt5FontDatabaseSupport.prl +%ifnarch %arm aarch64 +%{libqt5_libdir}/libQt5GlxSupport.a +%{libqt5_libdir}/libQt5GlxSupport.prl +%endif +%{libqt5_libdir}/libQt5InputSupport.a +%{libqt5_libdir}/libQt5InputSupport.prl +%{libqt5_libdir}/libQt5LinuxAccessibilitySupport.a +%{libqt5_libdir}/libQt5LinuxAccessibilitySupport.prl +%{libqt5_libdir}/libQt5PlatformCompositorSupport.a +%{libqt5_libdir}/libQt5PlatformCompositorSupport.prl +%{libqt5_libdir}/libQt5ServiceSupport.a +%{libqt5_libdir}/libQt5ServiceSupport.prl +%{libqt5_libdir}/libQt5ThemeSupport.a +%{libqt5_libdir}/libQt5ThemeSupport.prl +%{libqt5_includedir}/QtAccessibilitySupport/ +%{libqt5_includedir}/QtDeviceDiscoverySupport/ +%{libqt5_includedir}/QtEglSupport/ +%{libqt5_includedir}/QtEventDispatcherSupport/ +%{libqt5_includedir}/QtFbSupport/ +%{libqt5_includedir}/QtFontDatabaseSupport/ +%ifnarch %arm aarch64 +%{libqt5_includedir}/QtGlxSupport/ +%endif +%{libqt5_includedir}/QtInputSupport/ +%{libqt5_includedir}/QtLinuxAccessibilitySupport/ +%{libqt5_includedir}/QtPlatformCompositorSupport/ +%{libqt5_includedir}/QtServiceSupport/ +%{libqt5_includedir}/QtThemeSupport/ +%exclude %{libqt5_includedir}/QtAccessibilitySupport/%{so_version}/ +%exclude %{libqt5_includedir}/QtDeviceDiscoverySupport/%{so_version}/ +%exclude %{libqt5_includedir}/QtEglSupport/%{so_version}/ +%exclude %{libqt5_includedir}/QtEventDispatcherSupport/%{so_version}/ +%exclude %{libqt5_includedir}/QtFbSupport/%{so_version}/ +%exclude %{libqt5_includedir}/QtFontDatabaseSupport/%{so_version}/ +%ifnarch %arm aarch64 +%exclude %{libqt5_includedir}/QtGlxSupport/%{so_version}/ +%endif +%exclude %{libqt5_includedir}/QtInputSupport/%{so_version}/ +%exclude %{libqt5_includedir}/QtLinuxAccessibilitySupport/%{so_version}/ +%exclude %{libqt5_includedir}/QtPlatformCompositorSupport/%{so_version}/ +%exclude %{libqt5_includedir}/QtServiceSupport/%{so_version}/ +%exclude %{libqt5_includedir}/QtThemeSupport/%{so_version}/ + +%files -n libQt5KmsSupport-devel-static +%defattr(-,root,root,755) +%doc *.txt LICENSE.* +%{libqt5_libdir}/libQt5KmsSupport.a +%{libqt5_libdir}/libQt5KmsSupport.prl +%exclude %{libqt5_includedir}/QtKmsSupport/%{so_version}/ +%{libqt5_includedir}/QtKmsSupport/ %files -n libQt5Core-private-headers-devel %defattr(-,root,root,755) @@ -1156,6 +1237,12 @@ %defattr(-,root,root,755) %doc *.txt LICENSE.* %{libqt5_includedir}/QtGui/%{so_version}/ +%{libqt5_includedir}/QtEglFSDeviceIntegration/%{so_version} + +%files -n libQt5KmsSupport-private-headers-devel +%defattr(-,root,root,755) +%doc *.txt LICENSE.* +%{libqt5_includedir}/QtKmsSupport/%{so_version}/ %files -n libQt5Network-private-headers-devel %defattr(-,root,root,755) @@ -1170,7 +1257,20 @@ %files -n libQt5PlatformSupport-private-headers-devel %defattr(-,root,root,755) %doc *.txt LICENSE.* -%{libqt5_includedir}/QtPlatformSupport/%{so_version}/ +%{libqt5_includedir}/QtAccessibilitySupport/%{so_version}/ +%{libqt5_includedir}/QtDeviceDiscoverySupport/%{so_version}/ +%{libqt5_includedir}/QtEglSupport/%{so_version}/ +%{libqt5_includedir}/QtEventDispatcherSupport/%{so_version}/ +%{libqt5_includedir}/QtFbSupport/%{so_version}/ +%{libqt5_includedir}/QtFontDatabaseSupport/%{so_version}/ +%ifnarch %arm aarch64 +%{libqt5_includedir}/QtGlxSupport/%{so_version}/ +%endif +%{libqt5_includedir}/QtInputSupport/%{so_version}/ +%{libqt5_includedir}/QtLinuxAccessibilitySupport/%{so_version}/ +%{libqt5_includedir}/QtPlatformCompositorSupport/%{so_version}/ +%{libqt5_includedir}/QtServiceSupport/%{so_version}/ +%{libqt5_includedir}/QtThemeSupport/%{so_version}/ %files -n libQt5PrintSupport-private-headers-devel %defattr(-,root,root,755) ++++++ 0001-Add-remote-print-queue-support.patch ++++++ >From d3faa880d19d9bf5b411dc81c0d5d881a323997d Mon Sep 17 00:00:00 2001 From: Antonio Larrosa <[email protected]> Date: Tue, 6 Jun 2017 16:34:32 +0200 Subject: [PATCH] Add remote print queue support Cups servers which announce themselves on avahi will be shown in the printer dialog. This adds a delay the first time the print dialog is opened in order to search for print queues . If you don't have any network printer queue and you find the delay too annoying, it can be disabled by setting the QT_DISABLE_PRINTER_DISCOVERY environment variable to 1 Change-Id: Ib70715d331e8f380a3c9039011bb8521986652aa --- src/plugins/printsupport/cups/qcupsprintengine.cpp | 35 +++++++- .../printsupport/cups/qcupsprintersupport.cpp | 95 ++++++++++++++++++++-- .../printsupport/cups/qcupsprintersupport_p.h | 8 ++ 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 @@ -48,6 +48,7 @@ #include <qbuffer.h> #include "private/qcups_p.h" // Only needed for PPK_CupsOptions #include <QtGui/qpagelayout.h> +#include "qcupsprintersupport_p.h" #include <cups/cups.h> @@ -241,8 +242,40 @@ void QCupsPrintEnginePrivate::closePrintDevice() // Print the file. cups_option_t* optPtr = cupsOptStruct.size() ? &cupsOptStruct.first() : 0; - cupsPrintFile(printerName.toLocal8Bit().constData(), tempFile.toLocal8Bit().constData(), + + bool fallbackToLocal = false; + cups_dest_t *cupsDest = NULL; + + if (qEnvironmentVariableIsSet("QT_DISABLE_PRINTER_DISCOVERY")) { + fallbackToLocal = true; + } else { + cupsDest = cupsGetDest(printerName.toLocal8Bit(), NULL, QCupsPrinterSupport::cupsPrintersCount(), QCupsPrinterSupport::cupsPrinters()); + } + + if (cupsDest) { + char resource[HTTP_MAX_URI]; + http_t *http = cupsConnectDest (cupsDest, 0, -1, 0, + resource, sizeof (resource), + 0, 0); + if (http) { + char *name = strrchr (resource, '/'); + qDebug() << "resource:" << resource << "," << name; + if (name) + cupsPrintFile2 (http, ++name, tempFile.toLocal8Bit().constData(), title.toLocal8Bit().constData(), cupsOptStruct.size(), optPtr); + httpClose(http); + } else { + fallbackToLocal=true; + } + } + else { + fallbackToLocal=true; + } + + if (fallbackToLocal) { + cupsPrintFile(printerName.toLocal8Bit().constData(), tempFile.toLocal8Bit().constData(), + title.toLocal8Bit().constData(), cupsOptStruct.size(), optPtr); + } 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 @@ -52,6 +52,35 @@ # include <cups/language.h> #endif +typedef struct +{ + cups_dest_t *printers; + int num_printers; +} EnumDestsContext; + +static int enum_dest_cb2 (void *user_data, unsigned flags, cups_dest_t *dest) +{ + EnumDestsContext *context = (EnumDestsContext *) user_data; + if ((flags & (CUPS_DEST_FLAGS_UNCONNECTED | + CUPS_DEST_FLAGS_REMOVED | + CUPS_DEST_FLAGS_ERROR | + CUPS_DEST_FLAGS_RESOLVING | + CUPS_DEST_FLAGS_CONNECTING | + CUPS_DEST_FLAGS_CANCELED)) == 0) { + + context->num_printers = cupsCopyDest (dest, context->num_printers, + &context->printers); + + // Also copy whether this is the local default / + cups_dest_t *the_dest; + the_dest = cupsGetDest(dest->name, dest->instance, + context->num_printers, context->printers); + the_dest->is_default = dest->is_default; + qDebug() << dest->name << "_" << dest->instance << "_" << context->num_printers; + } + return 1; +} + QT_BEGIN_NAMESPACE QCupsPrinterSupport::QCupsPrinterSupport() @@ -81,17 +110,35 @@ QPrintDevice QCupsPrinterSupport::createPrintDevice(const QString &id) QStringList QCupsPrinterSupport::availablePrintDeviceIds() const { - QStringList list; +/* // Reset cache disabled for now + if (qt_cups_printers) { + cupsFreeDests( qt_cups_num_printers, qt_cups_printers ); + qt_cups_printers = NULL; + qt_cups_num_printers = 0; + } +*/ cups_dest_t *dests; - int count = cupsGetDests(&dests); - list.reserve(count); - for (int i = 0; i < count; ++i) { + bool disablePrinterDiscovery = qEnvironmentVariableIsSet("QT_DISABLE_PRINTER_DISCOVERY"); + if (disablePrinterDiscovery) { + qt_cups_num_printers = cupsGetDests(&dests); + } else { + if (qt_cups_num_printers == 0) + QCupsPrinterSupport::fillCupsPrinters(); + + dests = qt_cups_printers; + } + QStringList list; + list.reserve(qt_cups_num_printers); + for (int i = 0; i < qt_cups_num_printers; ++i) { QString printerId = QString::fromLocal8Bit(dests[i].name); if (dests[i].instance) printerId += QLatin1Char('/') + QString::fromLocal8Bit(dests[i].instance); list.append(printerId); } - cupsFreeDests(count, dests); + if (disablePrinterDiscovery) { + cupsFreeDests(qt_cups_num_printers, dests); + } + return list; } @@ -99,8 +146,18 @@ QString QCupsPrinterSupport::defaultPrintDeviceId() const { QString printerId; cups_dest_t *dests; - int count = cupsGetDests(&dests); - for (int i = 0; i < count; ++i) { + + bool disablePrinterDiscovery = qEnvironmentVariableIsSet("QT_DISABLE_PRINTER_DISCOVERY"); + if (disablePrinterDiscovery) { + qt_cups_num_printers = cupsGetDests(&dests); + } else { + if (qt_cups_num_printers == 0) + QCupsPrinterSupport::fillCupsPrinters(); + + dests = qt_cups_printers; + } + + for (int i = 0; i < qt_cups_num_printers; ++i) { if (dests[i].is_default) { printerId = QString::fromLocal8Bit(dests[i].name); if (dests[i].instance) { @@ -109,8 +166,30 @@ QString QCupsPrinterSupport::defaultPrintDeviceId() const } } } - cupsFreeDests(count, dests); + if (disablePrinterDiscovery) { + cupsFreeDests(qt_cups_num_printers, dests); + } return printerId; } +void QCupsPrinterSupport::fillCupsPrinters() +{ + EnumDestsContext context; + context.printers = 0; + context.num_printers = 0; + + qDebug() << "begin enumerating printers"; + + cupsEnumDests(CUPS_DEST_FLAGS_NONE, 4000, NULL, 0, 0, + enum_dest_cb2, &context); + + qDebug() << "end enumerating printers"; + qt_cups_printers = context.printers; + qt_cups_num_printers = context.num_printers; +} + +cups_dest_t *QCupsPrinterSupport::qt_cups_printers = NULL; +int QCupsPrinterSupport::qt_cups_num_printers = 0; + + 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 @@ -56,6 +56,8 @@ #include <QtCore/qstringlist.h> +#include <cups/cups.h> + QT_BEGIN_NAMESPACE class QCupsPrinterSupport : public QPlatformPrinterSupport @@ -71,8 +73,14 @@ public: QStringList availablePrintDeviceIds() const Q_DECL_OVERRIDE; QString defaultPrintDeviceId() const Q_DECL_OVERRIDE; + static void fillCupsPrinters(); + static cups_dest_t *cupsPrinters() { return qt_cups_printers; }; + static int cupsPrintersCount() { return qt_cups_num_printers; }; private: QString cupsOption(int i, const QString &key) const; + + static cups_dest_t *qt_cups_printers; + static int qt_cups_num_printers; }; 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 @@ #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; } + bool disablePrinterDiscovery = qEnvironmentVariableIsSet("QT_DISABLE_PRINTER_DISCOVERY"); + // Get the print instance and PPD file - m_cupsDest = cupsGetNamedDest(CUPS_HTTP_DEFAULT, m_cupsName, m_cupsInstance); + + if (disablePrinterDiscovery) { + m_cupsDest = cupsGetNamedDest(CUPS_HTTP_DEFAULT, m_cupsName, m_cupsInstance); + } else { + cups_dest_t *cupsDest = cupsGetDest( m_cupsName, + (m_cupsInstance.isEmpty() ? NULL : m_cupsInstance.data()), + QCupsPrinterSupport::cupsPrintersCount(), + QCupsPrinterSupport::cupsPrinters() ); + cupsCopyDest(cupsDest, 0, &m_cupsDest); + } if (m_cupsDest) { - const char *ppdFile = cupsGetPPD(m_cupsName); + char resource[HTTP_MAX_URI]; + http_t *http = NULL; + const char *ppdFile = NULL; + + if (!disablePrinterDiscovery) { + http = cupsConnectDest (m_cupsDest, 0, -1, 0, + resource, sizeof (resource), + 0, 0); + } + if (http) { + char *name = strrchr (resource, '/'); + if (name) + ppdFile = cupsGetPPD2 (http, ++name); + httpClose(http); + } else { + ppdFile = cupsGetPPD(m_cupsName); + } + if (ppdFile) { m_ppd = ppdOpenFile(ppdFile); unlink(ppdFile); -- 2.13.0 ++++++ 0001-Fix-open-chmod-race-condition-in-QSaveFile.patch ++++++ >From e840a7ed21bc8e93e2e87fec25dd98aa0039fca1 Mon Sep 17 00:00:00 2001 From: Antonio Larrosa <[email protected]> Date: Tue, 18 Apr 2017 17:56:35 +0200 Subject: [PATCH] Fix open/chmod race condition in QSaveFile This fixes a problem introduced in a60571b3700e80f44705ebc4bab9628cf852891c by which a temporary file could be created with mode 0666 (0644 after applying umask), and then changed to 0600, but in the meantime it would be possible for anyone to get a working file descriptor that could be used to read the file. See https://bugzilla.suse.com/show_bug.cgi?id=1034005. Change-Id: I824025f54d6faf853da88e4dfcb092b577b4df04 --- src/corelib/io/qsavefile.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/corelib/io/qsavefile.cpp b/src/corelib/io/qsavefile.cpp index 5a325f8e2c..af90b96d82 100644 --- a/src/corelib/io/qsavefile.cpp +++ b/src/corelib/io/qsavefile.cpp @@ -216,7 +216,8 @@ bool QSaveFile::open(OpenMode mode) } d->fileEngine = new QTemporaryFileEngine; - static_cast<QTemporaryFileEngine *>(d->fileEngine)->initialize(d->finalFileName, 0666); + int perm = (existingFile.exists() ? 0600 : 0666); + static_cast<QTemporaryFileEngine *>(d->fileEngine)->initialize(d->finalFileName, perm); // Same as in QFile: QIODevice provides the buffering, so there's no need to request it from the file engine. if (!d->fileEngine->open(mode | QIODevice::Unbuffered)) { QFileDevice::FileError err = d->fileEngine->error(); -- 2.12.2 ++++++ de63bbd2f806b0219a60775017899cedb121581f.patch ++++++ >From de63bbd2f806b0219a60775017899cedb121581f Mon Sep 17 00:00:00 2001 From: Alexander Volkov <[email protected]> Date: Wed, 9 Nov 2016 17:33:00 +0300 Subject: [PATCH] Add QPlatformTheme::standardButtonShortcut() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It allows to set shortcuts for the standard buttons in QDialogButtonBox. Restore Qt4's behavior for the "Don't Save" button on macOS by setting a shortcut for it (it was Cmd-D before Lion, now it's Cmd-Delete). Change-Id: I6b56f68f37670962178693a8983d9fe550540856 Reviewed-by: Tor Arne Vestbø <[email protected]> --- src/gui/kernel/qplatformtheme.cpp | 13 +++++++++++++ src/gui/kernel/qplatformtheme.h | 1 + src/plugins/platforms/cocoa/qcocoatheme.h | 1 + src/plugins/platforms/cocoa/qcocoatheme.mm | 6 ++++++ src/widgets/widgets/qdialogbuttonbox.cpp | 7 +------ 5 files changed, 22 insertions(+), 6 deletions(-) Index: qtbase-opensource-src-5.9.0/src/gui/kernel/qplatformtheme.cpp =================================================================== --- qtbase-opensource-src-5.9.0.orig/src/gui/kernel/qplatformtheme.cpp +++ qtbase-opensource-src-5.9.0/src/gui/kernel/qplatformtheme.cpp @@ -678,19 +678,6 @@ QString QPlatformTheme::standardButtonTe return QPlatformTheme::defaultStandardButtonText(button); } -/*! - Returns the mnemonic that should be used for a standard \a button. - - \since 5.9 - \sa QPlatformDialogHelper::StandardButton - */ - -QKeySequence QPlatformTheme::standardButtonShortcut(int button) const -{ - Q_UNUSED(button) - return QKeySequence(); -} - QString QPlatformTheme::defaultStandardButtonText(int button) { switch (button) { Index: qtbase-opensource-src-5.9.0/src/gui/kernel/qplatformtheme.h =================================================================== --- qtbase-opensource-src-5.9.0.orig/src/gui/kernel/qplatformtheme.h +++ qtbase-opensource-src-5.9.0/src/gui/kernel/qplatformtheme.h @@ -312,7 +312,6 @@ public: #endif virtual QString standardButtonText(int button) const; - virtual QKeySequence standardButtonShortcut(int button) const; static QVariant defaultThemeHint(ThemeHint hint); static QString defaultStandardButtonText(int button); Index: qtbase-opensource-src-5.9.0/src/plugins/platforms/cocoa/qcocoatheme.h =================================================================== --- qtbase-opensource-src-5.9.0.orig/src/plugins/platforms/cocoa/qcocoatheme.h +++ qtbase-opensource-src-5.9.0/src/plugins/platforms/cocoa/qcocoatheme.h @@ -74,7 +74,6 @@ public: QVariant themeHint(ThemeHint hint) const Q_DECL_OVERRIDE; QString standardButtonText(int button) const Q_DECL_OVERRIDE; - QKeySequence standardButtonShortcut(int button) const Q_DECL_OVERRIDE; static const char *name; Index: qtbase-opensource-src-5.9.0/src/plugins/platforms/cocoa/qcocoatheme.mm =================================================================== --- qtbase-opensource-src-5.9.0.orig/src/plugins/platforms/cocoa/qcocoatheme.mm +++ qtbase-opensource-src-5.9.0/src/plugins/platforms/cocoa/qcocoatheme.mm @@ -344,12 +344,6 @@ QString QCocoaTheme::standardButtonText( return button == QPlatformDialogHelper::Discard ? msgDialogButtonDiscard() : QPlatformTheme::standardButtonText(button); } -QKeySequence QCocoaTheme::standardButtonShortcut(int button) const -{ - return button == QPlatformDialogHelper::Discard ? QKeySequence(Qt::CTRL | Qt::Key_Delete) - : QPlatformTheme::standardButtonShortcut(button); -} - QPlatformMenuItem *QCocoaTheme::createPlatformMenuItem() const { return new QCocoaMenuItem(); Index: qtbase-opensource-src-5.9.0/src/widgets/widgets/qdialogbuttonbox.cpp =================================================================== --- qtbase-opensource-src-5.9.0.orig/src/widgets/widgets/qdialogbuttonbox.cpp +++ qtbase-opensource-src-5.9.0/src/widgets/widgets/qdialogbuttonbox.cpp @@ -410,9 +410,7 @@ QPushButton *QDialogButtonBoxPrivate::cr qWarning("QDialogButtonBox::createButton: Invalid ButtonRole, button not added"); else addButton(button, static_cast<QDialogButtonBox::ButtonRole>(role), doLayout); -#if QT_CONFIG(shortcut) - button->setShortcut(QGuiApplicationPrivate::platformTheme()->standardButtonShortcut(sbutton)); -#endif + return button; } ++++++ dont-destroy-foreign-windows.patch ++++++ >From 32390f49291308eb85dcbcaa898bbf825a2eb229 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Tor=20Arne=20Vestb=C3=B8?= <[email protected]> Date: Fri, 2 Jun 2017 11:09:55 +0200 Subject: [PATCH] xcb: Don't destroy foreign windows We can't rely on virtual dispatch in the destructor. Task-number: QTBUG-61140 Change-Id: Ib1026caf126095778c24254775cb5a0bfecf3a38 --- src/plugins/platforms/xcb/qxcbintegration.cpp | 18 +----------------- src/plugins/platforms/xcb/qxcbwindow.cpp | 16 ++++++++++------ src/plugins/platforms/xcb/qxcbwindow.h | 12 ++++++++++++ 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/plugins/platforms/xcb/qxcbintegration.cpp b/src/plugins/platforms/xcb/qxcbintegration.cpp index b414bee..8e3ee20 100644 --- a/src/plugins/platforms/xcb/qxcbintegration.cpp +++ b/src/plugins/platforms/xcb/qxcbintegration.cpp @@ -214,25 +214,9 @@ QPlatformWindow *QXcbIntegration::createPlatformWindow(QWindow *window) const return xcbWindow; } -class QXcbForeignWindow : public QXcbWindow -{ -public: - QXcbForeignWindow(QWindow *window, WId nativeHandle) - : QXcbWindow(window) { m_window = nativeHandle; } - ~QXcbForeignWindow() {} - bool isForeignWindow() const override { return true; } - -protected: - // No-ops - void create() override {} - void destroy() override {} -}; - QPlatformWindow *QXcbIntegration::createForeignWindow(QWindow *window, WId nativeHandle) const { - QXcbWindow *xcbWindow = new QXcbForeignWindow(window, nativeHandle); - xcbWindow->create(); - return xcbWindow; + return new QXcbForeignWindow(window, nativeHandle); } #ifndef QT_NO_OPENGL diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp index 289d072..d6c69d5 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.cpp +++ b/src/plugins/platforms/xcb/qxcbwindow.cpp @@ -597,13 +597,17 @@ QXcbWindow::~QXcbWindow() } destroy(); +} - if (isForeignWindow()) { - if (connection()->mouseGrabber() == this) - connection()->setMouseGrabber(Q_NULLPTR); - if (connection()->mousePressWindow() == this) - connection()->setMousePressWindow(Q_NULLPTR); - } +QXcbForeignWindow::~QXcbForeignWindow() +{ + // Clear window so that destroy() does not affect it + m_window = 0; + + if (connection()->mouseGrabber() == this) + connection()->setMouseGrabber(nullptr); + if (connection()->mousePressWindow() == this) + connection()->setMousePressWindow(nullptr); } void QXcbWindow::destroy() diff --git a/src/plugins/platforms/xcb/qxcbwindow.h b/src/plugins/platforms/xcb/qxcbwindow.h index 5662809..f38343b 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.h +++ b/src/plugins/platforms/xcb/qxcbwindow.h @@ -278,6 +278,18 @@ protected: xcb_cursor_t m_currentBitmapCursor = XCB_CURSOR_NONE; }; +class QXcbForeignWindow : public QXcbWindow +{ +public: + QXcbForeignWindow(QWindow *window, WId nativeHandle) + : QXcbWindow(window) { m_window = nativeHandle; } + ~QXcbForeignWindow(); + bool isForeignWindow() const override { return true; } + +protected: + void create() override {} // No-op +}; + QT_END_NAMESPACE Q_DECLARE_METATYPE(QXcbWindow*) -- 2.7.4 ++++++ libqt5-prioritise-gtk2-platformtheme.patch ++++++ --- /var/tmp/diff_new_pack.iFnuzy/_old 2017-06-13 16:06:07.331446086 +0200 +++ /var/tmp/diff_new_pack.iFnuzy/_new 2017-06-13 16:06:07.331446086 +0200 @@ -9,8 +9,7 @@ + result.push_back(QStringLiteral("gtk2")); + // prefer second the GTK+3 theme implementation with native dialogs, etc. result.push_back(QStringLiteral("gtk3")); -- // fallback to the generic Gnome theme if loading the GTK3 theme fails -+ // fallback to the generic GNOME theme if loading the GTK+3 theme fails + // fallback to the generic Gnome theme if loading the GTK3 theme fails result.push_back(QLatin1String(QGnomeTheme::name)); - } - } + } else { + // unknown, but lowercase the name (our standard practice) and ++++++ native-children-hidpi-offset.patch ++++++ >From 9ff4abfb4a2a76b2ed0f664876955a9ab3a5b726 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen <[email protected]> Date: Thu, 1 Jun 2017 17:45:02 +0200 Subject: [PATCH] Adjust offset of native children according to device pixel ratio Otherwise the wrong background can be used. Task-number: QTBUG-59017 Change-Id: Iccbe9cd9704bccbceda4c8dafe87435b68b5cf3e --- src/gui/painting/qplatformbackingstore.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/painting/qplatformbackingstore.cpp b/src/gui/painting/qplatformbackingstore.cpp index b8bbdef..b88dd76 100644 --- a/src/gui/painting/qplatformbackingstore.cpp +++ b/src/gui/painting/qplatformbackingstore.cpp @@ -394,7 +394,7 @@ void QPlatformBackingStore::composeAndFlush(QWindow *window, const QRegion ®i d_ptr->blitter->setRedBlueSwizzle(true); // The backingstore is for the entire tlw. // In case of native children offset tells the position relative to the tlw. - const QRect srcRect = toBottomLeftRect(deviceWindowRect.translated(offset), d_ptr->textureSize.height()); + const QRect srcRect = toBottomLeftRect(deviceWindowRect.translated(offset * window->devicePixelRatio()), d_ptr->textureSize.height()); const QMatrix3x3 source = QOpenGLTextureBlitter::sourceTransform(srcRect, d_ptr->textureSize, origin); -- 2.7.4 ++++++ qtbase-opensource-src-5.7.1.tar.xz -> qtbase-opensource-src-5.9.0.tar.xz ++++++ /work/SRC/openSUSE:Factory/libqt5-qtbase/qtbase-opensource-src-5.7.1.tar.xz /work/SRC/openSUSE:Factory/.libqt5-qtbase.new/qtbase-opensource-src-5.9.0.tar.xz differ: char 27, line 1 ++++++ tell-the-truth-about-private-api.patch ++++++ --- /var/tmp/diff_new_pack.iFnuzy/_old 2017-06-13 16:06:07.411434813 +0200 +++ /var/tmp/diff_new_pack.iFnuzy/_new 2017-06-13 16:06:07.411434813 +0200 @@ -1,15 +1,10 @@ diff --git a/mkspecs/features/qt_module.prf b/mkspecs/features/qt_module.prf -index aefd3ae..53a3f60 100644 +index f6cbf99..798472a 100644 --- a/mkspecs/features/qt_module.prf +++ b/mkspecs/features/qt_module.prf -@@ -195,16 +195,18 @@ - - !header_module:unix:!isEmpty(QMAKE_LFLAGS_VERSION_SCRIPT):!no_linker_version_script:!static { - verscript = $${TARGET}.version +@@ -214,9 +214,9 @@ android: CONFIG += qt_android_deps no_linker_version_script QMAKE_LFLAGS += $${QMAKE_LFLAGS_VERSION_SCRIPT}$$verscript -+ private_api_headers = $$SYNCQT.PRIVATE_HEADER_FILES $$SYNCQT.QPA_HEADER_FILES -+ internal_module { - verscript_content = "Qt_$${QT_MAJOR_VERSION}_PRIVATE_API { *; };" + verscript_content = "Qt_$${QT_MAJOR_VERSION}.$${QT_MINOR_VERSION}.$${QT_PATCH_VERSION}_PRIVATE_API { *; };" @@ -17,23 +12,5 @@ - verscript_content = "Qt_$${QT_MAJOR_VERSION}_PRIVATE_API {" \ + verscript_content = "Qt_$${QT_MAJOR_VERSION}.$${QT_MINOR_VERSION}.$${QT_PATCH_VERSION}_PRIVATE_API {" \ " qt_private_api_tag*;" -- for(header, SYNCQT.PRIVATE_HEADER_FILES): \ -+ for(header, private_api_headers): \ - verscript_content += " @FILE:$${_PRO_FILE_PWD_}/$$header@" - verscript_content += "};" - current = Qt_$$QT_MAJOR_VERSION - verscript_content += "$$current { *; };" -@@ -221,11 +223,11 @@ - # Add a post-processing step to replace the @FILE:filename@ - verscript_in = $${verscript}.in - verscriptprocess.name = linker version script ${QMAKE_FILE_BASE} - verscriptprocess.input = verscript_in - verscriptprocess.CONFIG += no_link target_predeps -- for(header, SYNCQT.PRIVATE_HEADER_FILES): \ -+ for(header, private_api_headers): \ - verscriptprocess.depends += $${_PRO_FILE_PWD_}/$$header - verscriptprocess.output = $$verscript - verscriptprocess.commands = perl $${PWD}/data/unix/findclasslist.pl < ${QMAKE_FILE_IN} > $@ - silent:verscriptprocess.commands = @echo creating linker version script ${QMAKE_FILE_BASE} && $$verscriptprocess.commands - QMAKE_EXTRA_COMPILERS += verscriptprocess + private_api_headers = $$SYNCQT.PRIVATE_HEADER_FILES $$SYNCQT.QPA_HEADER_FILES
