Merge "Merge remote-tracking branch 'origin/5.13.1' into 5.13"
This commit is contained in:
commit
a8f77509cf
141
dist/changes-5.13.1
vendored
Normal file
141
dist/changes-5.13.1
vendored
Normal file
@ -0,0 +1,141 @@
|
|||||||
|
Qt 5.13.1 is a bug-fix release. It maintains both forward and backward
|
||||||
|
compatibility (source and binary) with Qt 5.13.0.
|
||||||
|
|
||||||
|
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.13 series is binary compatible with the 5.12.x series.
|
||||||
|
Applications compiled for 5.12 will continue to run with 5.13.
|
||||||
|
|
||||||
|
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 *
|
||||||
|
****************************************************************************
|
||||||
|
|
||||||
|
- [QTBUG-76521] RCC's default compression algorithm was changed back to
|
||||||
|
Zlib, as it was in all previous releases until 5.13.0. The default will
|
||||||
|
remain Zlib for all Qt 5.x releases but will change in Qt 6.0. To
|
||||||
|
activate Zstd compression for your resources, either pass the
|
||||||
|
--compress-algo=zstd option to the rcc tool or add the XML attribute
|
||||||
|
compression-algorithm="zstd" to the <file> tags in the .qrc file.
|
||||||
|
|
||||||
|
****************************************************************************
|
||||||
|
* Android *
|
||||||
|
****************************************************************************
|
||||||
|
|
||||||
|
- [QTBUG-76293] Fix NDK r20 linking.
|
||||||
|
|
||||||
|
****************************************************************************
|
||||||
|
* QtCore *
|
||||||
|
****************************************************************************
|
||||||
|
|
||||||
|
- Global:
|
||||||
|
* [QTBUG-72073] Added the QT_NO_FLOAT16_OPERATORS macro in order to work
|
||||||
|
around a Microsoft <= VS2017 compiler bug that is exposed when using
|
||||||
|
std::bitset along with any Qt header that includes <qfloat16.h>.
|
||||||
|
|
||||||
|
- QCborStreamReader:
|
||||||
|
* Fixed a bug that caused the QIODevice that the data was being read
|
||||||
|
from not to show the entire CBOR message as consumed. This allows the
|
||||||
|
user to consume data that may follow the CBOR payload.
|
||||||
|
|
||||||
|
- QDeadlineTimer:
|
||||||
|
* [QTBUG-69750] Fixed integer overflows leading to immediate timeouts.
|
||||||
|
|
||||||
|
- QStorageInfo:
|
||||||
|
* Fixed a bug that caused QStorageInfo to be unable to report all
|
||||||
|
filesystems if the options to mounted filesystems were too long (over
|
||||||
|
900 characters, roughly), such as those found in Docker overlay
|
||||||
|
mounts.
|
||||||
|
|
||||||
|
- QTextBoundaryFinder:
|
||||||
|
* Sentence breaking now no longer breaks between uppercase letters and
|
||||||
|
comma. This is a deviation from the Unicode specification, but
|
||||||
|
produces less surprising behavior.
|
||||||
|
|
||||||
|
- QTimeZone:
|
||||||
|
* The IANA timezone database backend now properly follows symlinks even
|
||||||
|
when they point to variable locations like /run or /var (useful when
|
||||||
|
/etc is mounted read-only).
|
||||||
|
|
||||||
|
- QVector:
|
||||||
|
* Fixed a regression that caused fill() not to detach, corrupting shared
|
||||||
|
copies.
|
||||||
|
|
||||||
|
****************************************************************************
|
||||||
|
* QtNetwork *
|
||||||
|
****************************************************************************
|
||||||
|
|
||||||
|
- Windows:
|
||||||
|
* Correctly emit errors when trying to reach unreachable hosts or
|
||||||
|
services
|
||||||
|
|
||||||
|
- QNetworkAccessManager:
|
||||||
|
* Fixed QNetworkAccessManager::sendCustomRequest for Qt For WebAssembly.
|
||||||
|
|
||||||
|
****************************************************************************
|
||||||
|
* QtGui *
|
||||||
|
****************************************************************************
|
||||||
|
|
||||||
|
- [QTBUG-73231] QWindow::mapToGlobal()/mapFromGlobal() now handle windows
|
||||||
|
spanning screens correctly.
|
||||||
|
|
||||||
|
- QImage:
|
||||||
|
* Improve loading time when loading png files that have the same size as
|
||||||
|
the target.
|
||||||
|
|
||||||
|
- QPixmapCache:
|
||||||
|
* [QTBUG-76694][QTBUG-72523] Ignore unsafe access from non-main threads
|
||||||
|
|
||||||
|
- Text:
|
||||||
|
* [QTBUG-76219] Fixed a bug which could cause the font cache to grow
|
||||||
|
larger than it was supposed to.
|
||||||
|
* [QTBUG-55096][QTBUG-74761] Fixed bug where regular text rendered with
|
||||||
|
a color font would always display in black.
|
||||||
|
|
||||||
|
****************************************************************************
|
||||||
|
* QtWidgets *
|
||||||
|
****************************************************************************
|
||||||
|
|
||||||
|
- QSystemTrayIcon:
|
||||||
|
* On macOS, show the icon passed into showMessage in the notification
|
||||||
|
popup
|
||||||
|
|
||||||
|
- QDateTimeEdit:
|
||||||
|
* Use the information provided by the locale to determine the AM/PM
|
||||||
|
strings, unless they are already translated.
|
||||||
|
|
||||||
|
- QGraphicsView:
|
||||||
|
* Ignore disabled items when setting the mouse cursor.
|
||||||
|
|
||||||
|
- QMenu:
|
||||||
|
* Shortcuts are again shown by default in context menus, except on
|
||||||
|
macOS. They can be forced off by setting
|
||||||
|
AA_DontShowShortcutsInContextMenus to true.
|
||||||
|
|
||||||
|
- QSplashScreen:
|
||||||
|
* On macOS, lower the splash screen when a modal dialog is shown to make
|
||||||
|
sure the user sees the dialog.
|
||||||
|
|
||||||
|
****************************************************************************
|
||||||
|
* Third-Party Code *
|
||||||
|
****************************************************************************
|
||||||
|
|
||||||
|
- Updated bundled SQLite to version 3.28.0
|
||||||
|
- Updated QLocale's data to CLDR v35.1
|
||||||
|
|
||||||
|
****************************************************************************
|
||||||
|
* qmake *
|
||||||
|
****************************************************************************
|
||||||
|
|
||||||
|
- [QTBUG-75653] The CONFIG value c++latest was added to select the latest
|
||||||
|
C++ standard the currently used toolchain supports.
|
@ -1,6 +1,8 @@
|
|||||||
TEMPLATE = aux
|
TEMPLATE = aux
|
||||||
|
|
||||||
global_docs.files = $$PWD/global
|
global_docs.files = \
|
||||||
|
$$PWD/global \
|
||||||
|
$$PWD/config
|
||||||
global_docs.path = $$[QT_INSTALL_DOCS]
|
global_docs.path = $$[QT_INSTALL_DOCS]
|
||||||
INSTALLS += global_docs
|
INSTALLS += global_docs
|
||||||
!prefix_build:!equals(OUT_PWD, $$PWD): \
|
!prefix_build:!equals(OUT_PWD, $$PWD): \
|
||||||
|
@ -825,6 +825,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(!project->isActiveConfig("staticlib")) { //DUMP LIBRARIES
|
if(!project->isActiveConfig("staticlib")) { //DUMP LIBRARIES
|
||||||
|
const ProStringList defaultLibDirs = project->values("QMAKE_DEFAULT_LIBDIRS");
|
||||||
ProStringList &libdirs = project->values("QMAKE_PBX_LIBPATHS"),
|
ProStringList &libdirs = project->values("QMAKE_PBX_LIBPATHS"),
|
||||||
&frameworkdirs = project->values("QMAKE_FRAMEWORKPATH");
|
&frameworkdirs = project->values("QMAKE_FRAMEWORKPATH");
|
||||||
static const char * const libs[] = { "LIBS", "LIBS_PRIVATE",
|
static const char * const libs[] = { "LIBS", "LIBS_PRIVATE",
|
||||||
@ -943,8 +944,10 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
|
|||||||
}
|
}
|
||||||
if(slsh != -1) {
|
if(slsh != -1) {
|
||||||
const QString path = QFileInfo(library.left(slsh)).absoluteFilePath();
|
const QString path = QFileInfo(library.left(slsh)).absoluteFilePath();
|
||||||
if(!path.isEmpty() && !libdirs.contains(path))
|
if (!path.isEmpty() && !libdirs.contains(path)
|
||||||
|
&& !defaultLibDirs.contains(path)) {
|
||||||
libdirs += path;
|
libdirs += path;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
library = fileFixify(library, FileFixifyFromOutdir | FileFixifyAbsolute);
|
library = fileFixify(library, FileFixifyFromOutdir | FileFixifyAbsolute);
|
||||||
QString key = keyFor(library);
|
QString key = keyFor(library);
|
||||||
|
@ -1206,8 +1206,10 @@ void UnixMakefileGenerator::init2()
|
|||||||
project->values("QMAKE_FRAMEWORK_VERSION").append(project->first("VER_MAJ"));
|
project->values("QMAKE_FRAMEWORK_VERSION").append(project->first("VER_MAJ"));
|
||||||
|
|
||||||
if (project->first("TEMPLATE") == "aux") {
|
if (project->first("TEMPLATE") == "aux") {
|
||||||
project->values("PRL_TARGET") =
|
project->values("PRL_TARGET") = {
|
||||||
project->values("TARGET").first().prepend(project->first("QMAKE_PREFIX_STATICLIB"));
|
project->first("QMAKE_PREFIX_STATICLIB") +
|
||||||
|
project->first("TARGET")
|
||||||
|
};
|
||||||
} else if (!project->values("QMAKE_APP_FLAG").isEmpty()) {
|
} else if (!project->values("QMAKE_APP_FLAG").isEmpty()) {
|
||||||
if(!project->isEmpty("QMAKE_BUNDLE")) {
|
if(!project->isEmpty("QMAKE_BUNDLE")) {
|
||||||
ProString bundle_loc = project->first("QMAKE_BUNDLE_LOCATION");
|
ProString bundle_loc = project->first("QMAKE_BUNDLE_LOCATION");
|
||||||
|
@ -74,7 +74,7 @@ QT_BEGIN_NAMESPACE
|
|||||||
# define QLIBRARY_AS_DEBUG true
|
# define QLIBRARY_AS_DEBUG true
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(Q_OS_UNIX) || defined(Q_CC_MINGW)
|
#if defined(Q_OS_UNIX)
|
||||||
// We don't use separate debug and release libs on UNIX, so we want
|
// We don't use separate debug and release libs on UNIX, so we want
|
||||||
// to allow loading plugins, regardless of how they were built.
|
// to allow loading plugins, regardless of how they were built.
|
||||||
# define QT_NO_DEBUG_PLUGIN_CHECK
|
# define QT_NO_DEBUG_PLUGIN_CHECK
|
||||||
|
@ -399,6 +399,7 @@ struct QBidiAlgorithm {
|
|||||||
analysis[i].bidiDirection = (level & 1) ? QChar::DirR : QChar::DirL;
|
analysis[i].bidiDirection = (level & 1) ? QChar::DirR : QChar::DirL;
|
||||||
runHasContent = true;
|
runHasContent = true;
|
||||||
lastRunWithContent = -1;
|
lastRunWithContent = -1;
|
||||||
|
++isolatePairPosition;
|
||||||
}
|
}
|
||||||
int runBeforeIsolate = runs.size();
|
int runBeforeIsolate = runs.size();
|
||||||
ushort newLevel = isRtl ? ((stack.top().level + 1) | 1) : ((stack.top().level + 2) & ~1);
|
ushort newLevel = isRtl ? ((stack.top().level + 1) | 1) : ((stack.top().level + 2) & ~1);
|
||||||
@ -440,21 +441,19 @@ struct QBidiAlgorithm {
|
|||||||
doEmbed(true, true, false);
|
doEmbed(true, true, false);
|
||||||
break;
|
break;
|
||||||
case QChar::DirLRI:
|
case QChar::DirLRI:
|
||||||
Q_ASSERT(isolatePairs.at(isolatePairPosition).start == i);
|
|
||||||
doEmbed(false, false, true);
|
doEmbed(false, false, true);
|
||||||
++isolatePairPosition;
|
|
||||||
break;
|
break;
|
||||||
case QChar::DirRLI:
|
case QChar::DirRLI:
|
||||||
Q_ASSERT(isolatePairs.at(isolatePairPosition).start == i);
|
|
||||||
doEmbed(true, false, true);
|
doEmbed(true, false, true);
|
||||||
++isolatePairPosition;
|
|
||||||
break;
|
break;
|
||||||
case QChar::DirFSI: {
|
case QChar::DirFSI: {
|
||||||
const auto &pair = isolatePairs.at(isolatePairPosition);
|
bool isRtl = false;
|
||||||
Q_ASSERT(pair.start == i);
|
if (isolatePairPosition < isolatePairs.size()) {
|
||||||
bool isRtl = QStringView(text + pair.start + 1, pair.end - pair.start - 1).isRightToLeft();
|
const auto &pair = isolatePairs.at(isolatePairPosition);
|
||||||
|
Q_ASSERT(pair.start == i);
|
||||||
|
isRtl = QStringView(text + pair.start + 1, pair.end - pair.start - 1).isRightToLeft();
|
||||||
|
}
|
||||||
doEmbed(isRtl, false, true);
|
doEmbed(isRtl, false, true);
|
||||||
++isolatePairPosition;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -138,6 +138,7 @@ private slots:
|
|||||||
void noModificationOfInputString();
|
void noModificationOfInputString();
|
||||||
void superscriptCrash_qtbug53911();
|
void superscriptCrash_qtbug53911();
|
||||||
void showLineAndParagraphSeparatorsCrash();
|
void showLineAndParagraphSeparatorsCrash();
|
||||||
|
void tooManyDirectionalCharctersCrash_qtbug77819();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QFont testFont;
|
QFont testFont;
|
||||||
@ -2309,5 +2310,21 @@ void tst_QTextLayout::nbspWithFormat()
|
|||||||
QCOMPARE(layout.lineAt(1).textLength(), s2.length() + 1 + s3.length());
|
QCOMPARE(layout.lineAt(1).textLength(), s2.length() + 1 + s3.length());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tst_QTextLayout::tooManyDirectionalCharctersCrash_qtbug77819()
|
||||||
|
{
|
||||||
|
QString data;
|
||||||
|
data += QString::fromUtf8("\xe2\x81\xa8"); // U+2068 FSI character
|
||||||
|
data += QString::fromUtf8("\xe2\x81\xa7"); // U+2067 RLI character
|
||||||
|
|
||||||
|
// duplicating the text
|
||||||
|
for (int i = 0; i < 10; i++)
|
||||||
|
data += data;
|
||||||
|
|
||||||
|
// Nothing to test. It must not crash in beginLayout().
|
||||||
|
QTextLayout tl(data);
|
||||||
|
tl.beginLayout();
|
||||||
|
tl.endLayout();
|
||||||
|
}
|
||||||
|
|
||||||
QTEST_MAIN(tst_QTextLayout)
|
QTEST_MAIN(tst_QTextLayout)
|
||||||
#include "tst_qtextlayout.moc"
|
#include "tst_qtextlayout.moc"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user