Merge remote-tracking branch 'origin/5.12.2' into 5.12
Change-Id: I5f9d8090a07056411fb65d7de60eb679d00e99a3bb10
commit
a1808c5dbe
|
|
@ -0,0 +1,105 @@
|
|||
Qt 5.12.2 is a bug-fix release. It maintains both forward and backward
|
||||
compatibility (source and binary) with Qt 5.12.0 through 5.12.1.
|
||||
|
||||
For more details, refer to the online documentation included in this
|
||||
distribution. The documentation is also available online:
|
||||
|
||||
https://doc.qt.io/qt-5/index.html
|
||||
|
||||
The Qt version 5.12 series is binary compatible with the 5.11.x series.
|
||||
Applications compiled for 5.11 will continue to run with 5.12.
|
||||
|
||||
Some of the changes listed in this file include issue tracking numbers
|
||||
corresponding to tasks in the Qt Bug Tracker:
|
||||
|
||||
https://bugreports.qt.io/
|
||||
|
||||
Each of these identifiers can be entered in the bug tracker to obtain more
|
||||
information about a particular change.
|
||||
|
||||
****************************************************************************
|
||||
* Important Behavior Changes *
|
||||
****************************************************************************
|
||||
|
||||
- QtTestLib:
|
||||
* [QTBUG-72928] Blacklisting of tests will be taken into account for
|
||||
XPASS and XFAIL. A blacklisted test that causes an XPASS will no
|
||||
longer be a fail.
|
||||
|
||||
****************************************************************************
|
||||
* QtCore *
|
||||
****************************************************************************
|
||||
|
||||
- [QTBUG-72885] Fixed a number of warnings with Clang or Clang-Tidy in
|
||||
Qt headers related to alignment of Qt private classes.
|
||||
|
||||
- QDate, QTime and QDateTime;
|
||||
* [QTBUG-51208] Corrected documentation of how non-placeholder
|
||||
characters are handled in format patterns passed to toString().
|
||||
|
||||
- QCoreApplication:
|
||||
* [QTBUG-57171] Fixed an out-of-bounds access if the translatable
|
||||
string passed to tr() ended in '%'.
|
||||
|
||||
- QFileInfo:
|
||||
* [QTBUG-72644] Fixed a bug that would cause QFileInfo to report an
|
||||
link incorrectly as a non-link.
|
||||
|
||||
- QLocale:
|
||||
* Fixed a crash if qDebug() is used after main() has exited.
|
||||
* [QTBUG-73403] Fixed a race condition in getting the system locale
|
||||
(possible regression from Qt 5.11.x)
|
||||
|
||||
- QSysInfo:
|
||||
* Fixed a bug on BSD systems in getting the machineUniqueId().
|
||||
* Fixed a bug on Windows in 32-bit applications getting the
|
||||
machineUniqueId() when the OS is 64-bit.
|
||||
|
||||
- QWaitCondition:
|
||||
* Fixed handling of wait(QDeadlineTimer::Forever) on 32-bit platforms.
|
||||
|
||||
****************************************************************************
|
||||
* QtWidgets *
|
||||
****************************************************************************
|
||||
|
||||
- ItemViews:
|
||||
* Fixed a regression with wrongly drawn centered/right aligned item
|
||||
texts
|
||||
|
||||
****************************************************************************
|
||||
* Third-Party Code *
|
||||
****************************************************************************
|
||||
|
||||
- libpng was updated to version 1.6.36
|
||||
|
||||
****************************************************************************
|
||||
* Freetype *
|
||||
****************************************************************************
|
||||
|
||||
- Upgraded bundled Freetype version to 2.9.1. This also adds support for
|
||||
the latest emoji font in use on Android 9.
|
||||
|
||||
****************************************************************************
|
||||
* Android *
|
||||
****************************************************************************
|
||||
|
||||
- Added the --no-strip command line option to androiddeployqt.
|
||||
|
||||
- qmake:
|
||||
* Can now set the version name and code for Android using
|
||||
ANDROID_VERSION_NAME and ANDROID_VERSION_CODE respectively in the pro
|
||||
file.
|
||||
|
||||
****************************************************************************
|
||||
* Windows *
|
||||
****************************************************************************
|
||||
|
||||
- Fixed an issue where loading fonts from files or data would sometimes
|
||||
mistakenly classify them as oblique.
|
||||
|
||||
****************************************************************************
|
||||
* qmake *
|
||||
****************************************************************************
|
||||
|
||||
- [QTBUG-27079] A new feature "cmdline" was added that implies "CONFIG +=
|
||||
console" and "CONFIG -= app_bundle".
|
||||
|
|
@ -28,6 +28,7 @@ for(resource, RESOURCES) {
|
|||
!exists($$absolute_path($$resource, $$_PRO_FILE_PWD_)): \
|
||||
warning("Failure to find: $$resource")
|
||||
qmake_immediate.files += $$resource
|
||||
OTHER_FILES *= $$resource
|
||||
}
|
||||
RESOURCES -= $$resource
|
||||
next()
|
||||
|
|
@ -57,6 +58,7 @@ for(resource, RESOURCES) {
|
|||
alias = $$relative_path($$file, $$abs_base)
|
||||
resource_file_content += \
|
||||
"<file alias=\"$$xml_escape($$alias)\">$$xml_escape($$file)</file>"
|
||||
OTHER_FILES *= $$file
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -451,7 +451,8 @@ egl::Error Context::onDestroy(const egl::Display *display)
|
|||
|
||||
for (auto &zeroTexture : mZeroTextures)
|
||||
{
|
||||
ANGLE_TRY(zeroTexture.second->onDestroy(this));
|
||||
auto result = zeroTexture.second->onDestroy(this);
|
||||
ANGLE_TRY(egl::Error(result));
|
||||
zeroTexture.second.set(this, nullptr);
|
||||
}
|
||||
mZeroTextures.clear();
|
||||
|
|
|
|||
|
|
@ -192,8 +192,9 @@ Error Stream::consumerAcquire(const gl::Context *context)
|
|||
{
|
||||
if (mPlanes[i].texture != nullptr)
|
||||
{
|
||||
ANGLE_TRY(mPlanes[i].texture->acquireImageFromStream(
|
||||
context, mProducerImplementation->getGLFrameDescription(i)));
|
||||
auto result = mPlanes[i].texture->acquireImageFromStream(
|
||||
context, mProducerImplementation->getGLFrameDescription(i));
|
||||
ANGLE_TRY(Error(result));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -213,7 +214,8 @@ Error Stream::consumerRelease(const gl::Context *context)
|
|||
{
|
||||
if (mPlanes[i].texture != nullptr)
|
||||
{
|
||||
ANGLE_TRY(mPlanes[i].texture->releaseImageFromStream(context));
|
||||
auto result = mPlanes[i].texture->releaseImageFromStream(context);
|
||||
ANGLE_TRY(Error(result));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -550,7 +550,8 @@ Error Texture::onDestroy(const Context *context)
|
|||
{
|
||||
if (mBoundSurface)
|
||||
{
|
||||
ANGLE_TRY(mBoundSurface->releaseTexImage(context, EGL_BACK_BUFFER));
|
||||
auto result = mBoundSurface->releaseTexImage(context, EGL_BACK_BUFFER);
|
||||
ANGLE_TRY(Error(result));
|
||||
mBoundSurface = nullptr;
|
||||
}
|
||||
if (mBoundStream)
|
||||
|
|
|
|||
|
|
@ -376,7 +376,8 @@ egl::Error Renderer9::initializeDevice()
|
|||
|
||||
ASSERT(!mBlit);
|
||||
mBlit = new Blit9(this);
|
||||
ANGLE_TRY(mBlit->initialize());
|
||||
auto result = mBlit->initialize();
|
||||
ANGLE_TRY(egl::Error(result));
|
||||
|
||||
ASSERT(!mVertexDataManager && !mIndexDataManager);
|
||||
mVertexDataManager = new VertexDataManager(this);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,93 @@
|
|||
From 2d8118620d4871f74a3ddca233529ff540384477 Mon Sep 17 00:00:00 2001
|
||||
From: Yuhang Zhao <2546789017@qq.com>
|
||||
Date: Wed, 13 Feb 2019 23:26:55 +0800
|
||||
Subject: [PATCH] Fix compilation with icc, converting between egl's and gl's
|
||||
Error types
|
||||
|
||||
Each has two constructors from the other, one copying the other
|
||||
moving; and this leads to an ambiguous overload when converting
|
||||
Texture::onDestroy()'s gl::error to the egl::Error that
|
||||
gl::Context::onDestroy() returns. Passing the value through a
|
||||
temporary prevents the move-constructor from being attempted and saves
|
||||
the day. Thanks to Ville Voutilainen for suggesting the fix.
|
||||
|
||||
Fixes: QTBUG-73698
|
||||
Change-Id: I628173399a73cee2e253201bc3e8d3e6477a2fbf
|
||||
---
|
||||
src/3rdparty/angle/src/libANGLE/Context.cpp | 3 ++-
|
||||
src/3rdparty/angle/src/libANGLE/Stream.cpp | 8 +++++---
|
||||
src/3rdparty/angle/src/libANGLE/Texture.cpp | 3 ++-
|
||||
.../angle/src/libANGLE/renderer/d3d/d3d9/Renderer9.cpp | 3 ++-
|
||||
4 files changed, 11 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/src/3rdparty/angle/src/libANGLE/Context.cpp b/src/3rdparty/angle/src/libANGLE/Context.cpp
|
||||
index f638beda58..84f7936feb 100644
|
||||
--- a/src/3rdparty/angle/src/libANGLE/Context.cpp
|
||||
+++ b/src/3rdparty/angle/src/libANGLE/Context.cpp
|
||||
@@ -451,7 +451,8 @@ egl::Error Context::onDestroy(const egl::Display *display)
|
||||
|
||||
for (auto &zeroTexture : mZeroTextures)
|
||||
{
|
||||
- ANGLE_TRY(zeroTexture.second->onDestroy(this));
|
||||
+ auto result = zeroTexture.second->onDestroy(this);
|
||||
+ ANGLE_TRY(egl::Error(result));
|
||||
zeroTexture.second.set(this, nullptr);
|
||||
}
|
||||
mZeroTextures.clear();
|
||||
diff --git a/src/3rdparty/angle/src/libANGLE/Stream.cpp b/src/3rdparty/angle/src/libANGLE/Stream.cpp
|
||||
index 68279976b7..e384c7d486 100644
|
||||
--- a/src/3rdparty/angle/src/libANGLE/Stream.cpp
|
||||
+++ b/src/3rdparty/angle/src/libANGLE/Stream.cpp
|
||||
@@ -192,8 +192,9 @@ Error Stream::consumerAcquire(const gl::Context *context)
|
||||
{
|
||||
if (mPlanes[i].texture != nullptr)
|
||||
{
|
||||
- ANGLE_TRY(mPlanes[i].texture->acquireImageFromStream(
|
||||
- context, mProducerImplementation->getGLFrameDescription(i)));
|
||||
+ auto result = mPlanes[i].texture->acquireImageFromStream(
|
||||
+ context, mProducerImplementation->getGLFrameDescription(i));
|
||||
+ ANGLE_TRY(Error(result));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -213,7 +214,8 @@ Error Stream::consumerRelease(const gl::Context *context)
|
||||
{
|
||||
if (mPlanes[i].texture != nullptr)
|
||||
{
|
||||
- ANGLE_TRY(mPlanes[i].texture->releaseImageFromStream(context));
|
||||
+ auto result = mPlanes[i].texture->releaseImageFromStream(context);
|
||||
+ ANGLE_TRY(Error(result));
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/src/3rdparty/angle/src/libANGLE/Texture.cpp b/src/3rdparty/angle/src/libANGLE/Texture.cpp
|
||||
index da92e65916..7447604fe6 100644
|
||||
--- a/src/3rdparty/angle/src/libANGLE/Texture.cpp
|
||||
+++ b/src/3rdparty/angle/src/libANGLE/Texture.cpp
|
||||
@@ -550,7 +550,8 @@ Error Texture::onDestroy(const Context *context)
|
||||
{
|
||||
if (mBoundSurface)
|
||||
{
|
||||
- ANGLE_TRY(mBoundSurface->releaseTexImage(context, EGL_BACK_BUFFER));
|
||||
+ auto result = mBoundSurface->releaseTexImage(context, EGL_BACK_BUFFER);
|
||||
+ ANGLE_TRY(Error(result));
|
||||
mBoundSurface = nullptr;
|
||||
}
|
||||
if (mBoundStream)
|
||||
diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d9/Renderer9.cpp b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d9/Renderer9.cpp
|
||||
index 75c6298868..b583273641 100644
|
||||
--- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d9/Renderer9.cpp
|
||||
+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d9/Renderer9.cpp
|
||||
@@ -376,7 +376,8 @@ egl::Error Renderer9::initializeDevice()
|
||||
|
||||
ASSERT(!mBlit);
|
||||
mBlit = new Blit9(this);
|
||||
- ANGLE_TRY(mBlit->initialize());
|
||||
+ auto result = mBlit->initialize();
|
||||
+ ANGLE_TRY(egl::Error(result));
|
||||
|
||||
ASSERT(!mVertexDataManager && !mIndexDataManager);
|
||||
mVertexDataManager = new VertexDataManager(this);
|
||||
--
|
||||
2.20.1.windows.1
|
||||
|
||||
|
|
@ -124,7 +124,7 @@ QImageData * QImageData::create(const QSize &size, QImage::Format format)
|
|||
int height = size.height();
|
||||
int depth = qt_depthForFormat(format);
|
||||
auto params = calculateImageParameters(width, height, depth);
|
||||
if (params.bytesPerLine < 0)
|
||||
if (!params.isValid())
|
||||
return nullptr;
|
||||
|
||||
QScopedPointer<QImageData> d(new QImageData);
|
||||
|
|
@ -781,7 +781,7 @@ QImageData *QImageData::create(uchar *data, int width, int height, int bpl, QIm
|
|||
|
||||
const int depth = qt_depthForFormat(format);
|
||||
auto params = calculateImageParameters(width, height, depth);
|
||||
if (params.totalSize < 0)
|
||||
if (!params.isValid())
|
||||
return nullptr;
|
||||
|
||||
if (bpl > 0) {
|
||||
|
|
@ -1484,10 +1484,17 @@ qsizetype QImage::sizeInBytes() const
|
|||
|
||||
\sa scanLine()
|
||||
*/
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6,0,0)
|
||||
qsizetype QImage::bytesPerLine() const
|
||||
{
|
||||
return d ? d->bytes_per_line : 0;
|
||||
}
|
||||
#else
|
||||
int QImage::bytesPerLine() const
|
||||
{
|
||||
return d ? d->bytes_per_line : 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/*!
|
||||
|
|
|
|||
|
|
@ -227,7 +227,11 @@ public:
|
|||
uchar *scanLine(int);
|
||||
const uchar *scanLine(int) const;
|
||||
const uchar *constScanLine(int) const;
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6,0,0)
|
||||
qsizetype bytesPerLine() const;
|
||||
#else
|
||||
int bytesPerLine() const;
|
||||
#endif
|
||||
|
||||
bool valid(int x, int y) const;
|
||||
bool valid(const QPoint &pt) const;
|
||||
|
|
|
|||
|
|
@ -109,6 +109,7 @@ struct Q_GUI_EXPORT QImageData { // internal image data
|
|||
struct ImageSizeParameters {
|
||||
qsizetype bytesPerLine;
|
||||
qsizetype totalSize;
|
||||
bool isValid() const { return bytesPerLine > 0 && totalSize > 0; }
|
||||
};
|
||||
static ImageSizeParameters calculateImageParameters(qsizetype width, qsizetype height, qsizetype depth);
|
||||
};
|
||||
|
|
@ -135,6 +136,11 @@ QImageData::calculateImageParameters(qsizetype width, qsizetype height, qsizetyp
|
|||
qsizetype dummy;
|
||||
if (mul_overflow(height, qsizetype(sizeof(uchar *)), &dummy))
|
||||
return invalid; // why is this here?
|
||||
#if QT_VERSION < QT_VERSION_CHECK(6,0,0)
|
||||
// Disallow images where width * depth calculations might overflow
|
||||
if (width > (INT_MAX - 31) / depth)
|
||||
return invalid;
|
||||
#endif
|
||||
|
||||
return { bytes_per_line, total_size };
|
||||
}
|
||||
|
|
|
|||
|
|
@ -84,11 +84,11 @@
|
|||
"sources": [
|
||||
{ "type": "openssl" },
|
||||
{
|
||||
"libs": "-lssleay32 -llibeay32",
|
||||
"libs": "-lssleay32 -llibeay32 -lUser32 -lWs2_32 -lAdvapi32 -lGdi32",
|
||||
"condition": "config.win32"
|
||||
},
|
||||
{
|
||||
"libs": "-llibssl -llibcrypto",
|
||||
"libs": "-llibssl -llibcrypto -lUser32 -lWs2_32 -lAdvapi32 -lCrypt32",
|
||||
"condition": "config.msvc"
|
||||
},
|
||||
{
|
||||
|
|
|
|||
|
|
@ -652,6 +652,12 @@ static const char *qglx_threadedgl_blacklist_renderer[] = {
|
|||
0
|
||||
};
|
||||
|
||||
static const char *qglx_threadedgl_blacklist_vendor[] = {
|
||||
"llvmpipe", // QTCREATORBUG-10666
|
||||
"nouveau", // https://bugs.freedesktop.org/show_bug.cgi?id=91632
|
||||
nullptr
|
||||
};
|
||||
|
||||
void QGLXContext::queryDummyContext()
|
||||
{
|
||||
if (m_queriedDummyContext)
|
||||
|
|
@ -710,6 +716,18 @@ void QGLXContext::queryDummyContext()
|
|||
}
|
||||
}
|
||||
}
|
||||
if (const char *vendor = (const char *) glGetString(GL_VENDOR)) {
|
||||
for (int i = 0; qglx_threadedgl_blacklist_vendor[i]; ++i) {
|
||||
if (strstr(vendor, qglx_threadedgl_blacklist_vendor[i]) != 0) {
|
||||
qCDebug(lcQpaGl).nospace() << "Multithreaded OpenGL disabled: "
|
||||
"blacklisted vendor \""
|
||||
<< qglx_threadedgl_blacklist_vendor[i]
|
||||
<< "\"";
|
||||
m_supportsThreading = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (glxvendor && m_supportsThreading) {
|
||||
// Blacklist Mesa drivers due to QTCREATORBUG-10875 (crash in creator),
|
||||
|
|
|
|||
|
|
@ -412,12 +412,15 @@ void *QXcbNativeInterface::atspiBus()
|
|||
auto reply = Q_XCB_REPLY(xcb_get_property, defaultConnection->xcb_connection(),
|
||||
false, defaultConnection->rootWindow(),
|
||||
atspiBusAtom, XCB_ATOM_STRING, 0, 128);
|
||||
Q_ASSERT(!reply->bytes_after);
|
||||
if (!reply)
|
||||
return nullptr;
|
||||
|
||||
char *data = (char *)xcb_get_property_value(reply.get());
|
||||
int length = xcb_get_property_value_length(reply.get());
|
||||
return new QByteArray(data, length);
|
||||
}
|
||||
return 0;
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void QXcbNativeInterface::setAppTime(QScreen* screen, xcb_timestamp_t time)
|
||||
|
|
|
|||
|
|
@ -900,7 +900,7 @@ bool readInputFile(Options *options)
|
|||
options->extraPlugins = extraPlugins.toString().split(QLatin1Char(','));
|
||||
}
|
||||
|
||||
{
|
||||
if (!options->auxMode) {
|
||||
const QJsonValue stdcppPath = jsonObject.value(QStringLiteral("stdcpp-path"));
|
||||
if (stdcppPath.isUndefined()) {
|
||||
fprintf(stderr, "No stdcpp-path defined in json file.\n");
|
||||
|
|
|
|||
|
|
@ -289,8 +289,7 @@ void QSplashScreen::setPixmap(const QPixmap &pixmap)
|
|||
// 1) If a QDesktopScreenWidget is found in the parent hierarchy, use that (see docs on
|
||||
// QSplashScreen(QWidget *, QPixmap).
|
||||
// 2) If a widget with associated QWindow is found, use that
|
||||
// 3) When nothing can be found, do not position the widget, allowing for
|
||||
// QPlatformWindow::initialGeometry() to center it over the cursor
|
||||
// 3) When nothing can be found, try to center it over the cursor
|
||||
|
||||
static inline int screenNumberOf(const QDesktopScreenWidget *dsw)
|
||||
{
|
||||
|
|
@ -307,7 +306,15 @@ const QScreen *QSplashScreenPrivate::screenFor(const QWidget *w)
|
|||
if (QWindow *window = p->windowHandle())
|
||||
return window->screen();
|
||||
}
|
||||
return nullptr;
|
||||
#if QT_CONFIG(cursor)
|
||||
// Note: We could rely on QPlatformWindow::initialGeometry() to center it
|
||||
// over the cursor, but not all platforms (namely Android) use that.
|
||||
if (QGuiApplication::screens().size() > 1) {
|
||||
if (auto screenAtCursor = QGuiApplication::screenAt(QCursor::pos()))
|
||||
return screenAtCursor;
|
||||
}
|
||||
#endif // cursor
|
||||
return QGuiApplication::primaryScreen();
|
||||
}
|
||||
|
||||
void QSplashScreenPrivate::setPixmap(const QPixmap &p, const QScreen *screen)
|
||||
|
|
|
|||
|
|
@ -2,4 +2,4 @@
|
|||
windows
|
||||
osx
|
||||
[basic_chrono]
|
||||
macos
|
||||
osx
|
||||
|
|
|
|||
|
|
@ -230,6 +230,8 @@ private slots:
|
|||
|
||||
void convertColorTable();
|
||||
|
||||
void wideImage();
|
||||
|
||||
#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT)
|
||||
void toWinHBITMAP_data();
|
||||
void toWinHBITMAP();
|
||||
|
|
@ -3535,6 +3537,24 @@ void tst_QImage::convertColorTable()
|
|||
QCOMPARE(rgb32.pixel(0,0), 0xffffffff);
|
||||
}
|
||||
|
||||
void tst_QImage::wideImage()
|
||||
{
|
||||
// QTBUG-73731 and QTBUG-73732
|
||||
QImage i(538994187, 2, QImage::Format_ARGB32);
|
||||
QImage i2(32, 32, QImage::Format_ARGB32);
|
||||
i2.fill(Qt::white);
|
||||
|
||||
// Test that it doesn't crash:
|
||||
QPainter painter(&i);
|
||||
// With the composition mode is SourceOver out it's an invalid write
|
||||
// With the composition mode is Source it's an invalid read
|
||||
painter.drawImage(0, 0, i2);
|
||||
painter.setCompositionMode(QPainter::CompositionMode_Source);
|
||||
painter.drawImage(0, 0, i2);
|
||||
|
||||
// Qt6: Test that it actually works on 64bit architectures.
|
||||
}
|
||||
|
||||
#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT)
|
||||
QT_BEGIN_NAMESPACE
|
||||
Q_GUI_EXPORT HBITMAP qt_imageToWinHBITMAP(const QImage &p, int hbitmapFormat = 0);
|
||||
|
|
|
|||
Loading…
Reference in New Issue