summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/Qt5CTestMacros.cmake3
-rw-r--r--src/corelib/global/qlogging.cpp69
-rw-r--r--src/corelib/io/qprocess_unix.cpp2
-rw-r--r--src/corelib/kernel/qmetatype.h2
-rw-r--r--src/gui/image/qimage.cpp57
-rw-r--r--src/gui/image/qimage_p.h2
-rw-r--r--src/gui/opengl/qopenglframebufferobject.cpp8
-rw-r--r--src/gui/text/qdistancefield.cpp4
-rw-r--r--src/gui/text/qfontengine.cpp5
-rw-r--r--src/gui/text/qfontengine_ft.cpp13
-rw-r--r--src/gui/text/qfontengine_ft_p.h1
-rw-r--r--src/gui/text/qfontengine_p.h2
-rw-r--r--src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm5
-rw-r--r--src/platformsupport/fontdatabases/mac/qfontengine_coretext_p.h1
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmscursor.cpp6
-rw-r--r--src/plugins/platforms/windows/qwindowsdialoghelpers.cpp10
-rw-r--r--src/plugins/platforms/windows/qwindowsfontengine.cpp5
-rw-r--r--src/plugins/platforms/windows/qwindowsfontengine.h1
-rw-r--r--src/plugins/platforms/windows/qwindowsfontenginedirectwrite.cpp5
-rw-r--r--src/plugins/platforms/windows/qwindowsfontenginedirectwrite.h1
-rw-r--r--src/plugins/platforms/windows/qwindowsinputcontext.cpp17
-rw-r--r--src/plugins/platforms/windows/qwindowsinputcontext.h3
-rw-r--r--src/tools/moc/main.cpp2
-rw-r--r--src/widgets/graphicsview/qgraphicsgridlayout.cpp9
-rw-r--r--src/widgets/graphicsview/qgraphicslinearlayout.cpp10
-rw-r--r--src/widgets/graphicsview/qgraphicsview.cpp2
-rw-r--r--src/widgets/itemviews/qabstractitemview.cpp6
-rw-r--r--src/widgets/itemviews/qtreeview.cpp6
-rw-r--r--src/widgets/styles/qcommonstyle.cpp6
-rw-r--r--src/widgets/styles/qmacstyle_mac.mm3
-rw-r--r--src/widgets/util/qscroller.cpp2
-rw-r--r--src/widgets/widgets/qplaintextedit.cpp32
-rw-r--r--src/widgets/widgets/qprogressbar.cpp2
-rw-r--r--src/widgets/widgets/qtabbar.cpp27
-rw-r--r--src/widgets/widgets/qtabbar_p.h15
-rw-r--r--src/widgets/widgets/qtextedit.cpp30
-rw-r--r--tests/auto/auto.pro2
-rw-r--r--tests/auto/cmake/CMakeLists.txt7
-rw-r--r--tests/auto/cmake/test_testlib_definitions/CMakeLists.txt4
-rw-r--r--tests/auto/corelib/global/qlogging/tst_qlogging.cpp11
-rw-r--r--tests/auto/corelib/io/qstandardpaths/BLACKLIST2
-rw-r--r--tests/auto/corelib/kernel/qpointer/tst_qpointer.cpp16
-rw-r--r--tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp27
-rw-r--r--tests/auto/gui/image/qimage/tst_qimage.cpp29
-rw-r--r--tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp_16x16.pngbin1454 -> 1335 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp_32x32.pngbin1721 -> 1577 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp_48x48.pngbin1967 -> 1778 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/loadFromData/designer_argb32.pngbin4189 -> 2874 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_no_alpha.pngbin2431 -> 2365 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_with_alpha.pngbin1405 -> 1339 bytes
-rw-r--r--tests/auto/gui/kernel/qwindow/BLACKLIST2
-rw-r--r--tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp2
-rw-r--r--tests/auto/opengl/qgl/BLACKLIST2
-rw-r--r--tests/auto/other/lancelot/images/alpha2x2.pngbin169 -> 78 bytes
-rw-r--r--tests/auto/other/lancelot/images/solid2x2.pngbin169 -> 75 bytes
-rw-r--r--tests/auto/other/lancelot/scripts/statictext.qps20
-rw-r--r--tests/auto/other/lancelot/scripts/text.qps8
-rw-r--r--tests/auto/tools/moc/tst_moc.cpp27
-rw-r--r--tests/auto/widgets/dialogs/qfontdialog/BLACKLIST4
-rw-r--r--tests/auto/widgets/effects/qpixmapfilter/noise.pngbin7517 -> 6305 bytes
-rw-r--r--tests/auto/widgets/gestures/qgesturerecognizer/BLACKLIST6
-rw-r--r--tests/auto/widgets/kernel/qwidget/BLACKLIST3
-rw-r--r--tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp66
-rw-r--r--tests/auto/widgets/styles/qstyle/tst_qstyle.cpp48
-rw-r--r--tests/auto/widgets/widgets/qcombobox/qtlogoinverted.pngbin2827 -> 2297 bytes
-rw-r--r--tests/auto/widgets/widgets/qmdisubwindow/BLACKLIST2
-rw-r--r--tests/auto/widgets/widgets/qmenu/BLACKLIST3
-rw-r--r--tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp13
-rw-r--r--tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp13
-rw-r--r--tests/benchmarks/corelib/kernel/qcoreapplication/qcoreapplication.pro2
-rw-r--r--tests/benchmarks/corelib/kernel/qvariant/qvariant.pro1
-rw-r--r--tests/benchmarks/corelib/kernel/qvariant/tst_qvariant.cpp8
-rw-r--r--tests/benchmarks/network/access/qnetworkdiskcache/qnetworkdiskcache.pro3
-rw-r--r--tests/benchmarks/network/access/qnetworkreply_from_cache/qnetworkreply_from_cache.pro2
74 files changed, 545 insertions, 162 deletions
diff --git a/src/corelib/Qt5CTestMacros.cmake b/src/corelib/Qt5CTestMacros.cmake
index 40106fe919..962d49d6b2 100644
--- a/src/corelib/Qt5CTestMacros.cmake
+++ b/src/corelib/Qt5CTestMacros.cmake
@@ -39,6 +39,9 @@ if (CMAKE_VERBOSE_MAKEFILE)
list(APPEND BUILD_OPTIONS_LIST "-DCMAKE_VERBOSE_MAKEFILE=1")
endif()
+if (NO_GUI)
+ list(APPEND BUILD_OPTIONS_LIST "-DNO_GUI=True")
+endif()
if (NO_WIDGETS)
list(APPEND BUILD_OPTIONS_LIST "-DNO_WIDGETS=True")
endif()
diff --git a/src/corelib/global/qlogging.cpp b/src/corelib/global/qlogging.cpp
index 8cd1190e32..de37731b1a 100644
--- a/src/corelib/global/qlogging.cpp
+++ b/src/corelib/global/qlogging.cpp
@@ -982,13 +982,16 @@ struct QMessagePattern {
// 0 terminated arrays of literal tokens / literal or placeholder tokens
const char **literals;
const char **tokens;
- QString timeFormat;
+ QList<QString> timeArgs; // timeFormats in sequence of %{time
#ifndef QT_BOOTSTRAPPED
QElapsedTimer timer;
#endif
#ifdef QLOGGING_HAVE_BACKTRACE
- QString backtraceSeparator;
- int backtraceDepth;
+ struct BacktraceParams {
+ QString backtraceSeparator;
+ int backtraceDepth;
+ };
+ QList<BacktraceParams> backtraceArgs; // backtrace argumens in sequence of %{backtrace
#endif
bool fromEnvironment;
@@ -1000,10 +1003,6 @@ QBasicMutex QMessagePattern::mutex;
QMessagePattern::QMessagePattern()
: literals(0)
, tokens(0)
-#ifdef QLOGGING_HAVE_BACKTRACE
- , backtraceSeparator(QLatin1Char('|'))
- , backtraceDepth(5)
-#endif
, fromEnvironment(false)
{
#ifndef QT_BOOTSTRAPPED
@@ -1106,10 +1105,14 @@ void QMessagePattern::setPattern(const QString &pattern)
tokens[i] = timeTokenC;
int spaceIdx = lexeme.indexOf(QChar::fromLatin1(' '));
if (spaceIdx > 0)
- timeFormat = lexeme.mid(spaceIdx + 1, lexeme.length() - spaceIdx - 2);
+ timeArgs.append(lexeme.mid(spaceIdx + 1, lexeme.length() - spaceIdx - 2));
+ else
+ timeArgs.append(QString());
} else if (lexeme.startsWith(QLatin1String(backtraceTokenC))) {
#ifdef QLOGGING_HAVE_BACKTRACE
tokens[i] = backtraceTokenC;
+ QString backtraceSeparator = QStringLiteral("|");
+ int backtraceDepth = 5;
QRegularExpression depthRx(QStringLiteral(" depth=(?|\"([^\"]*)\"|([^ }]*))"));
QRegularExpression separatorRx(QStringLiteral(" separator=(?|\"([^\"]*)\"|([^ }]*))"));
QRegularExpressionMatch m = depthRx.match(lexeme);
@@ -1123,6 +1126,10 @@ void QMessagePattern::setPattern(const QString &pattern)
m = separatorRx.match(lexeme);
if (m.hasMatch())
backtraceSeparator = m.captured(1);
+ BacktraceParams backtraceParams;
+ backtraceParams.backtraceDepth = backtraceDepth;
+ backtraceParams.backtraceSeparator = backtraceSeparator;
+ backtraceArgs.append(backtraceParams);
#else
error += QStringLiteral("QT_MESSAGE_PATTERN: %{backtrace} is not supported by this Qt build\n");
#endif
@@ -1265,13 +1272,29 @@ QString qFormatLogMessage(QtMsgType type, const QMessageLogContext &context, con
bool skip = false;
+#ifndef QT_BOOTSTRAPPED
+ int timeArgsIdx = 0;
+#ifdef QLOGGING_HAVE_BACKTRACE
+ int backtraceArgsIdx = 0;
+#endif
+#endif
+
// we do not convert file, function, line literals to local encoding due to overhead
for (int i = 0; pattern->tokens[i] != 0; ++i) {
const char *token = pattern->tokens[i];
if (token == endifTokenC) {
skip = false;
} else if (skip) {
- // do nothing
+ // we skip adding messages, but we have to iterate over
+ // timeArgsIdx and backtraceArgsIdx anyway
+#ifndef QT_BOOTSTRAPPED
+ if (token == timeTokenC)
+ timeArgsIdx++;
+#ifdef QLOGGING_HAVE_BACKTRACE
+ else if (token == backtraceTokenC)
+ backtraceArgsIdx++;
+#endif
+#endif
} else if (token == messageTokenC) {
message.append(str);
} else if (token == categoryTokenC) {
@@ -1309,11 +1332,15 @@ QString qFormatLogMessage(QtMsgType type, const QMessageLogContext &context, con
message.append(QString::number(qlonglong(QThread::currentThread()->currentThread()), 16));
#ifdef QLOGGING_HAVE_BACKTRACE
} else if (token == backtraceTokenC) {
- QVarLengthArray<void*, 32> buffer(7 + pattern->backtraceDepth);
+ QMessagePattern::BacktraceParams backtraceParams = pattern->backtraceArgs.at(backtraceArgsIdx);
+ QString backtraceSeparator = backtraceParams.backtraceSeparator;
+ int backtraceDepth = backtraceParams.backtraceDepth;
+ backtraceArgsIdx++;
+ QVarLengthArray<void*, 32> buffer(7 + backtraceDepth);
int n = backtrace(buffer.data(), buffer.size());
if (n > 0) {
int numberPrinted = 0;
- for (int i = 0; i < n && numberPrinted < pattern->backtraceDepth; ++i) {
+ for (int i = 0; i < n && numberPrinted < backtraceDepth; ++i) {
QScopedPointer<char*, QScopedPointerPodDeleter> strings(backtrace_symbols(buffer.data() + i, 1));
QString trace = QString::fromLatin1(strings.data()[0]);
// The results of backtrace_symbols looks like this:
@@ -1343,7 +1370,7 @@ QString qFormatLogMessage(QtMsgType type, const QMessageLogContext &context, con
}
if (numberPrinted > 0)
- message.append(pattern->backtraceSeparator);
+ message.append(backtraceSeparator);
if (function.isEmpty()) {
if (numberPrinted == 0 && context.function)
@@ -1357,27 +1384,29 @@ QString qFormatLogMessage(QtMsgType type, const QMessageLogContext &context, con
} else {
if (numberPrinted == 0)
continue;
- message += pattern->backtraceSeparator + QLatin1String("???");
+ message += backtraceSeparator + QLatin1String("???");
}
numberPrinted++;
}
}
#endif
} else if (token == timeTokenC) {
- if (pattern->timeFormat == QLatin1String("process")) {
- quint64 ms = pattern->timer.elapsed();
- message.append(QString::asprintf("%6d.%03d", uint(ms / 1000), uint(ms % 1000)));
- } else if (pattern->timeFormat == QLatin1String("boot")) {
+ QString timeFormat = pattern->timeArgs.at(timeArgsIdx);
+ timeArgsIdx++;
+ if (timeFormat == QLatin1String("process")) {
+ quint64 ms = pattern->timer.elapsed();
+ message.append(QString::asprintf("%6d.%03d", uint(ms / 1000), uint(ms % 1000)));
+ } else if (timeFormat == QLatin1String("boot")) {
// just print the milliseconds since the elapsed timer reference
// like the Linux kernel does
QElapsedTimer now;
now.start();
uint ms = now.msecsSinceReference();
message.append(QString::asprintf("%6d.%03d", uint(ms / 1000), uint(ms % 1000)));
- } else if (pattern->timeFormat.isEmpty()) {
- message.append(QDateTime::currentDateTime().toString(Qt::ISODate));
+ } else if (timeFormat.isEmpty()) {
+ message.append(QDateTime::currentDateTime().toString(Qt::ISODate));
} else {
- message.append(QDateTime::currentDateTime().toString(pattern->timeFormat));
+ message.append(QDateTime::currentDateTime().toString(timeFormat));
}
#endif
} else if (token == ifCategoryTokenC) {
diff --git a/src/corelib/io/qprocess_unix.cpp b/src/corelib/io/qprocess_unix.cpp
index 93807e13eb..a5b7692fc9 100644
--- a/src/corelib/io/qprocess_unix.cpp
+++ b/src/corelib/io/qprocess_unix.cpp
@@ -701,7 +701,7 @@ qint64 QProcessPrivate::writeToStdin(const char *data, qint64 maxlen)
void QProcessPrivate::terminateProcess()
{
#if defined (QPROCESS_DEBUG)
- qDebug("QProcessPrivate::killProcess()");
+ qDebug("QProcessPrivate::terminateProcess()");
#endif
if (pid)
::kill(pid_t(pid), SIGTERM);
diff --git a/src/corelib/kernel/qmetatype.h b/src/corelib/kernel/qmetatype.h
index e6a66dbc86..ebe118dce4 100644
--- a/src/corelib/kernel/qmetatype.h
+++ b/src/corelib/kernel/qmetatype.h
@@ -1232,7 +1232,7 @@ public:
inline void destroyIter() { _destroyIter(&_iterator); }
- inline VariantData getCurrentKey() const { return _getKey(&_iterator, _metaType_id_key, _metaType_flags_value); }
+ inline VariantData getCurrentKey() const { return _getKey(&_iterator, _metaType_id_key, _metaType_flags_key); }
inline VariantData getCurrentValue() const { return _getValue(&_iterator, _metaType_id_value, _metaType_flags_value); }
inline void find(const VariantData &key)
diff --git a/src/gui/image/qimage.cpp b/src/gui/image/qimage.cpp
index f902f1b715..64a53b4c0e 100644
--- a/src/gui/image/qimage.cpp
+++ b/src/gui/image/qimage.cpp
@@ -104,35 +104,22 @@ QImageData::QImageData()
{
}
-/*! \fn QImageData * QImageData::create(const QSize &size, QImage::Format format, int numColors)
+/*! \fn QImageData * QImageData::create(const QSize &size, QImage::Format format)
\internal
Creates a new image data.
Returns 0 if invalid parameters are give or anything else failed.
*/
-QImageData * QImageData::create(const QSize &size, QImage::Format format, int numColors)
+QImageData * QImageData::create(const QSize &size, QImage::Format format)
{
- if (!size.isValid() || numColors < 0 || format == QImage::Format_Invalid)
+ if (!size.isValid() || format == QImage::Format_Invalid)
return 0; // invalid parameter(s)
uint width = size.width();
uint height = size.height();
uint depth = qt_depthForFormat(format);
- switch (format) {
- case QImage::Format_Mono:
- case QImage::Format_MonoLSB:
- numColors = 2;
- break;
- case QImage::Format_Indexed8:
- numColors = qBound(0, numColors, 256);
- break;
- default:
- numColors = 0;
- break;
- }
-
const int bytes_per_line = ((width * depth + 31) >> 5) << 2; // bytes per scanline (must be multiple of 4)
// sanity check for potential overflows
@@ -144,13 +131,16 @@ QImageData * QImageData::create(const QSize &size, QImage::Format format, int nu
return 0;
QScopedPointer<QImageData> d(new QImageData);
- d->colortable.resize(numColors);
- if (depth == 1) {
+
+ switch (format) {
+ case QImage::Format_Mono:
+ case QImage::Format_MonoLSB:
+ d->colortable.resize(2);
d->colortable[0] = QColor(Qt::black).rgba();
d->colortable[1] = QColor(Qt::white).rgba();
- } else {
- for (int i = 0; i < numColors; ++i)
- d->colortable[i] = 0;
+ break;
+ default:
+ break;
}
d->width = width;
@@ -779,7 +769,7 @@ QImage::QImage() Q_DECL_NOEXCEPT
QImage::QImage(int width, int height, Format format)
: QPaintDevice()
{
- d = QImageData::create(QSize(width, height), format, 0);
+ d = QImageData::create(QSize(width, height), format);
}
/*!
@@ -794,7 +784,7 @@ QImage::QImage(int width, int height, Format format)
QImage::QImage(const QSize &size, Format format)
: QPaintDevice()
{
- d = QImageData::create(size, format, 0);
+ d = QImageData::create(size, format);
}
@@ -838,6 +828,17 @@ QImageData *QImageData::create(uchar *data, int width, int height, int bpl, QIm
d->cleanupFunction = cleanupFunction;
d->cleanupInfo = cleanupInfo;
+ switch (format) {
+ case QImage::Format_Mono:
+ case QImage::Format_MonoLSB:
+ d->colortable.resize(2);
+ d->colortable[0] = QColor(Qt::black).rgba();
+ d->colortable[1] = QColor(Qt::white).rgba();
+ break;
+ default:
+ break;
+ }
+
return d;
}
@@ -2242,7 +2243,15 @@ QRgb QImage::pixel(int x, int y) const
case Format_MonoLSB:
return d->colortable.at((*(s + (x >> 3)) >> (x & 7)) & 1);
case Format_Indexed8:
- return d->colortable.at((int)s[x]);
+ {
+ int index = (int)s[x];
+ if (index < d->colortable.size()) {
+ return d->colortable.at(index);
+ } else {
+ qWarning("QImage::pixel: color table index %d out of range.", index);
+ return 0;
+ }
+ }
case Format_RGB32:
return 0xff000000 | reinterpret_cast<const QRgb *>(s)[x];
case Format_ARGB32: // Keep old behaviour.
diff --git a/src/gui/image/qimage_p.h b/src/gui/image/qimage_p.h
index 8106289ad1..3e76f39b94 100644
--- a/src/gui/image/qimage_p.h
+++ b/src/gui/image/qimage_p.h
@@ -63,7 +63,7 @@ class QImageWriter;
struct Q_GUI_EXPORT QImageData { // internal image data
QImageData();
~QImageData();
- static QImageData *create(const QSize &size, QImage::Format format, int numColors = 0);
+ static QImageData *create(const QSize &size, QImage::Format format);
static QImageData *create(uchar *data, int w, int h, int bpl, QImage::Format format, bool readOnly, QImageCleanupFunction cleanupFunction = 0, void *cleanupInfo = 0);
QAtomicInt ref;
diff --git a/src/gui/opengl/qopenglframebufferobject.cpp b/src/gui/opengl/qopenglframebufferobject.cpp
index 5f5b7f46ec..597d347915 100644
--- a/src/gui/opengl/qopenglframebufferobject.cpp
+++ b/src/gui/opengl/qopenglframebufferobject.cpp
@@ -1287,9 +1287,13 @@ static inline QImage qt_gl_read_framebuffer_rgba8(const QSize &size, bool includ
const char *renderer = reinterpret_cast<const char *>(funcs->glGetString(GL_RENDERER));
const char *ver = reinterpret_cast<const char *>(funcs->glGetString(GL_VERSION));
- // Blacklist PowerVR Rogue G6200 as it has problems with its BGRA support.
+ // Blacklist GPU chipsets that have problems with their BGRA support.
const bool blackListed = (qstrcmp(renderer, "PowerVR Rogue G6200") == 0
- && ::strstr(ver, "1.3") != 0);
+ && ::strstr(ver, "1.3") != 0) ||
+ (qstrcmp(renderer, "Mali-T760") == 0
+ && ::strstr(ver, "3.1") != 0) ||
+ (qstrcmp(renderer, "Mali-T720") == 0
+ && ::strstr(ver, "3.1") != 0);
const bool supports_bgra = has_bgra_ext && !blackListed;
diff --git a/src/gui/text/qdistancefield.cpp b/src/gui/text/qdistancefield.cpp
index 473ddd0172..d90134482d 100644
--- a/src/gui/text/qdistancefield.cpp
+++ b/src/gui/text/qdistancefield.cpp
@@ -693,8 +693,10 @@ static void makeDistanceField(QDistanceFieldData *data, const QPainterPath &path
static bool imageHasNarrowOutlines(const QImage &im)
{
- if (im.isNull())
+ if (im.isNull() || im.width() < 1 || im.height() < 1)
return false;
+ else if (im.width() == 1 || im.height() == 1)
+ return true;
int minHThick = 999;
int minVThick = 999;
diff --git a/src/gui/text/qfontengine.cpp b/src/gui/text/qfontengine.cpp
index 96f7e06a47..74317e99c3 100644
--- a/src/gui/text/qfontengine.cpp
+++ b/src/gui/text/qfontengine.cpp
@@ -1222,6 +1222,11 @@ int QFontEngine::glyphCount() const
return count;
}
+Qt::HANDLE QFontEngine::handle() const
+{
+ return Q_NULLPTR;
+}
+
const uchar *QFontEngine::getCMap(const uchar *table, uint tableSize, bool *isSymbolFont, int *cmapSize)
{
const uchar *header = table;
diff --git a/src/gui/text/qfontengine_ft.cpp b/src/gui/text/qfontengine_ft.cpp
index 9d62a03f4c..86fb0e8ae4 100644
--- a/src/gui/text/qfontengine_ft.cpp
+++ b/src/gui/text/qfontengine_ft.cpp
@@ -1782,6 +1782,12 @@ void QFontEngineFT::unlockAlphaMapForGlyph()
QFontEngine::unlockAlphaMapForGlyph();
}
+static inline bool is2dRotation(const QTransform &t)
+{
+ return qFuzzyCompare(t.m11(), t.m22()) && qFuzzyCompare(t.m12(), -t.m21())
+ && qFuzzyCompare(t.m11()*t.m22() - t.m12()*t.m21(), 1.0);
+}
+
QFontEngineFT::Glyph *QFontEngineFT::loadGlyphFor(glyph_t g,
QFixed subPixelPosition,
GlyphFormat format,
@@ -1795,7 +1801,7 @@ QFontEngineFT::Glyph *QFontEngineFT::loadGlyphFor(glyph_t g,
Glyph *glyph = glyphSet != 0 ? glyphSet->getGlyph(g, subPixelPosition) : 0;
if (!glyph || glyph->format != format || (!fetchBoundingBox && !glyph->data)) {
QScopedValueRollback<HintStyle> saved_default_hint_style(default_hint_style);
- if (t.type() >= QTransform::TxScale)
+ if (t.type() >= QTransform::TxScale && !is2dRotation(t))
default_hint_style = HintNone; // disable hinting if the glyphs are transformed
lockFace();
@@ -2007,6 +2013,11 @@ QFontEngine *QFontEngineFT::cloneWithSize(qreal pixelSize) const
}
}
+Qt::HANDLE QFontEngineFT::handle() const
+{
+ return non_locked_face();
+}
+
QT_END_NAMESPACE
#endif // QT_NO_FREETYPE
diff --git a/src/gui/text/qfontengine_ft_p.h b/src/gui/text/qfontengine_ft_p.h
index f9b37ff039..3421c873d5 100644
--- a/src/gui/text/qfontengine_ft_p.h
+++ b/src/gui/text/qfontengine_ft_p.h
@@ -288,6 +288,7 @@ private:
void setDefaultHintStyle(HintStyle style) Q_DECL_OVERRIDE;
QFontEngine *cloneWithSize(qreal pixelSize) const Q_DECL_OVERRIDE;
+ Qt::HANDLE handle() const Q_DECL_OVERRIDE;
bool initFromFontEngine(const QFontEngineFT *fontEngine);
HintStyle defaultHintStyle() const { return default_hint_style; }
diff --git a/src/gui/text/qfontengine_p.h b/src/gui/text/qfontengine_p.h
index 1ef3a360d4..1430444c7e 100644
--- a/src/gui/text/qfontengine_p.h
+++ b/src/gui/text/qfontengine_p.h
@@ -235,6 +235,8 @@ public:
virtual QFontEngine *cloneWithSize(qreal /*pixelSize*/) const { return 0; }
+ virtual Qt::HANDLE handle() const;
+
void *harfbuzzFont() const;
void *harfbuzzFace() const;
bool supportsScript(QChar::Script script) const;
diff --git a/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm b/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm
index 92430c35bd..c7209fe696 100644
--- a/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm
+++ b/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm
@@ -746,6 +746,11 @@ QFontEngine *QCoreTextFontEngine::cloneWithSize(qreal pixelSize) const
return new QCoreTextFontEngine(cgFont, newFontDef);
}
+Qt::HANDLE QCoreTextFontEngine::handle() const
+{
+ return (Qt::HANDLE)ctfont;
+}
+
bool QCoreTextFontEngine::supportsTransformation(const QTransform &transform) const
{
if (transform.type() < QTransform::TxScale)
diff --git a/src/platformsupport/fontdatabases/mac/qfontengine_coretext_p.h b/src/platformsupport/fontdatabases/mac/qfontengine_coretext_p.h
index 6f12f5a705..67a5a3185b 100644
--- a/src/platformsupport/fontdatabases/mac/qfontengine_coretext_p.h
+++ b/src/platformsupport/fontdatabases/mac/qfontengine_coretext_p.h
@@ -108,6 +108,7 @@ public:
bool supportsTransformation(const QTransform &transform) const Q_DECL_OVERRIDE;
QFontEngine *cloneWithSize(qreal pixelSize) const Q_DECL_OVERRIDE;
+ Qt::HANDLE handle() const Q_DECL_OVERRIDE;
int glyphMargin(QFontEngine::GlyphFormat format) Q_DECL_OVERRIDE { Q_UNUSED(format); return 0; }
QFontEngine::Properties properties() const Q_DECL_OVERRIDE;
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmscursor.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmscursor.cpp
index f4383efd1f..ac966d23ee 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmscursor.cpp
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmscursor.cpp
@@ -70,6 +70,12 @@ QEglFSKmsCursor::QEglFSKmsCursor(QEglFSKmsScreen *screen)
, m_cursorImage(0, 0, 0, 0, 0, 0)
, m_visible(true)
{
+ QByteArray hideCursorVal = qgetenv("QT_QPA_EGLFS_HIDECURSOR");
+ if (!hideCursorVal.isEmpty())
+ m_visible = hideCursorVal.toInt() == 0;
+ if (!m_visible)
+ return;
+
uint64_t width, height;
if ((drmGetCap(m_screen->device()->fd(), DRM_CAP_CURSOR_WIDTH, &width) == 0)
&& (drmGetCap(m_screen->device()->fd(), DRM_CAP_CURSOR_HEIGHT, &height) == 0)) {
diff --git a/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp b/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp
index 0eab37aed2..d5e5f87e5c 100644
--- a/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp
+++ b/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp
@@ -1331,7 +1331,7 @@ void QWindowsNativeFileDialogBase::setLabelText(QFileDialogOptions::DialogLabel
static inline bool isClsid(const QString &s)
{
// detect "374DE290-123F-4565-9164-39C4925E467B".
- static const QRegularExpression pattern(QLatin1String("[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{8}"));
+ static const QRegularExpression pattern(QLatin1String("\\A[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}\\z"));
Q_ASSERT(pattern.isValid());
return pattern.match(s).hasMatch();
}
@@ -2179,6 +2179,7 @@ namespace QWindowsDialogs {
// QWindowsDialogHelperBase creation functions
bool useHelper(QPlatformTheme::DialogType type)
{
+#if !defined(_WIN32_WCE) || _WIN32_WCE < 0x800
if (QWindowsIntegration::instance()->options() & QWindowsIntegration::NoNativeDialogs)
return false;
switch (type) {
@@ -2197,10 +2198,14 @@ bool useHelper(QPlatformTheme::DialogType type)
break;
}
return false;
+#else
+ return false;
+#endif // !defined(_WIN32_WCE) || _WIN32_WCE < 0x800
}
QPlatformDialogHelper *createHelper(QPlatformTheme::DialogType type)
{
+#if !defined(_WIN32_WCE) || _WIN32_WCE < 0x800
if (QWindowsIntegration::instance()->options() & QWindowsIntegration::NoNativeDialogs)
return 0;
switch (type) {
@@ -2228,6 +2233,9 @@ QPlatformDialogHelper *createHelper(QPlatformTheme::DialogType type)
break;
}
return 0;
+#else
+ return 0;
+#endif // !defined(_WIN32_WCE) || _WIN32_WCE < 0x800
}
} // namespace QWindowsDialogs
diff --git a/src/plugins/platforms/windows/qwindowsfontengine.cpp b/src/plugins/platforms/windows/qwindowsfontengine.cpp
index a3e3870d90..806af6458b 100644
--- a/src/plugins/platforms/windows/qwindowsfontengine.cpp
+++ b/src/plugins/platforms/windows/qwindowsfontengine.cpp
@@ -1260,6 +1260,11 @@ QFontEngine *QWindowsFontEngine::cloneWithSize(qreal pixelSize) const
return fontEngine;
}
+Qt::HANDLE QWindowsFontEngine::handle() const
+{
+ return hfont;
+}
+
void QWindowsFontEngine::initFontInfo(const QFontDef &request,
int dpi)
{
diff --git a/src/plugins/platforms/windows/qwindowsfontengine.h b/src/plugins/platforms/windows/qwindowsfontengine.h
index 7d85b7ef24..d4d98422a1 100644
--- a/src/plugins/platforms/windows/qwindowsfontengine.h
+++ b/src/plugins/platforms/windows/qwindowsfontengine.h
@@ -114,6 +114,7 @@ public:
glyph_metrics_t alphaMapBoundingBox(glyph_t glyph, QFixed, const QTransform &matrix, GlyphFormat) Q_DECL_OVERRIDE;
QFontEngine *cloneWithSize(qreal pixelSize) const Q_DECL_OVERRIDE;
+ Qt::HANDLE handle() const Q_DECL_OVERRIDE;
bool supportsTransformation(const QTransform &transform) const Q_DECL_OVERRIDE;
#ifndef Q_CC_MINGW
diff --git a/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.cpp b/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.cpp
index eeb9e5eb6e..9dbfac34ef 100644
--- a/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.cpp
+++ b/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.cpp
@@ -645,6 +645,11 @@ QFontEngine *QWindowsFontEngineDirectWrite::cloneWithSize(qreal pixelSize) const
return fontEngine;
}
+Qt::HANDLE QWindowsFontEngineDirectWrite::handle() const
+{
+ return m_directWriteFontFace;
+}
+
void QWindowsFontEngineDirectWrite::initFontInfo(const QFontDef &request,
int dpi)
{
diff --git a/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.h b/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.h
index 4558cfbdcc..0aa7e41500 100644
--- a/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.h
+++ b/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.h
@@ -98,6 +98,7 @@ public:
QImage alphaRGBMapForGlyph(glyph_t t, QFixed subPixelPosition, const QTransform &xform) Q_DECL_OVERRIDE;
QFontEngine *cloneWithSize(qreal pixelSize) const Q_DECL_OVERRIDE;
+ Qt::HANDLE handle() const Q_DECL_OVERRIDE;
const QSharedPointer<QWindowsFontEngineData> &fontEngineData() const { return m_fontEngineData; }
diff --git a/src/plugins/platforms/windows/qwindowsinputcontext.cpp b/src/plugins/platforms/windows/qwindowsinputcontext.cpp
index d0c3b80707..ea68ba8cab 100644
--- a/src/plugins/platforms/windows/qwindowsinputcontext.cpp
+++ b/src/plugins/platforms/windows/qwindowsinputcontext.cpp
@@ -54,6 +54,8 @@
#include <QtGui/QPalette>
#include <QtGui/QGuiApplication>
+#include <private/qhighdpiscaling_p.h>
+
#include <algorithm>
QT_BEGIN_NAMESPACE
@@ -165,7 +167,8 @@ Q_CORE_EXPORT QLocale qt_localeFromLCID(LCID id); // from qlocale_win.cpp
HIMC QWindowsInputContext::m_defaultContext = 0;
QWindowsInputContext::CompositionContext::CompositionContext() :
- hwnd(0), haveCaret(false), position(0), isComposing(false)
+ hwnd(0), haveCaret(false), position(0), isComposing(false),
+ factor(1)
{
}
@@ -274,9 +277,12 @@ void QWindowsInputContext::cursorRectChanged()
if (!m_compositionContext.hwnd)
return;
const QInputMethod *inputMethod = QGuiApplication::inputMethod();
- const QRect cursorRectangle = inputMethod->cursorRectangle().toRect();
- if (!cursorRectangle.isValid())
+ const QRectF cursorRectangleF = inputMethod->cursorRectangle();
+ if (!cursorRectangleF.isValid())
return;
+ const QRect cursorRectangle =
+ QRectF(cursorRectangleF.topLeft() * m_compositionContext.factor,
+ cursorRectangleF.size() * m_compositionContext.factor).toRect();
qCDebug(lcQpaInputMethods) << __FUNCTION__<< cursorRectangle;
@@ -394,7 +400,7 @@ bool QWindowsInputContext::startComposition(HWND hwnd)
qCDebug(lcQpaInputMethods) << __FUNCTION__ << fo << window << "language=" << m_languageId;
if (!fo || QWindowsWindow::handleOf(window) != hwnd)
return false;
- initContext(hwnd, fo);
+ initContext(hwnd, QHighDpiScaling::factor(window), fo);
startContextComposition();
return true;
}
@@ -526,12 +532,13 @@ bool QWindowsInputContext::endComposition(HWND hwnd)
return true;
}
-void QWindowsInputContext::initContext(HWND hwnd, QObject *focusObject)
+void QWindowsInputContext::initContext(HWND hwnd, qreal factor, QObject *focusObject)
{
if (m_compositionContext.hwnd)
doneContext();
m_compositionContext.hwnd = hwnd;
m_compositionContext.focusObject = focusObject;
+ m_compositionContext.factor = factor;
// Create a hidden caret which is kept at the microfocus
// position in update(). This is important for some
// Chinese input methods.
diff --git a/src/plugins/platforms/windows/qwindowsinputcontext.h b/src/plugins/platforms/windows/qwindowsinputcontext.h
index f8ff08aa7c..4c08fa0ef2 100644
--- a/src/plugins/platforms/windows/qwindowsinputcontext.h
+++ b/src/plugins/platforms/windows/qwindowsinputcontext.h
@@ -65,6 +65,7 @@ class QWindowsInputContext : public QPlatformInputContext
int position;
bool isComposing;
QPointer<QObject> focusObject;
+ qreal factor;
};
public:
explicit QWindowsInputContext();
@@ -94,7 +95,7 @@ private slots:
void cursorRectChanged();
private:
- void initContext(HWND hwnd, QObject *focusObject);
+ void initContext(HWND hwnd, qreal factor, QObject *focusObject);
void doneContext();
void startContextComposition();
void endContextComposition();
diff --git a/src/tools/moc/main.cpp b/src/tools/moc/main.cpp
index bdf01c8a62..06d1c86d54 100644
--- a/src/tools/moc/main.cpp
+++ b/src/tools/moc/main.cpp
@@ -277,6 +277,8 @@ int runMoc(int argc, char **argv)
QStringLiteral("Read additional options from option-file."));
const QStringList arguments = argumentsFromCommandLineAndFile(app.arguments());
+ if (arguments.isEmpty())
+ return 1;
parser.process(arguments);
diff --git a/src/widgets/graphicsview/qgraphicsgridlayout.cpp b/src/widgets/graphicsview/qgraphicsgridlayout.cpp
index 422193d4dd..ae761d3478 100644
--- a/src/widgets/graphicsview/qgraphicsgridlayout.cpp
+++ b/src/widgets/graphicsview/qgraphicsgridlayout.cpp
@@ -89,6 +89,7 @@
#include "qgraphicswidget.h"
#include "qgraphicsgridlayoutengine_p.h"
#include "qgraphicslayoutstyleinfo_p.h"
+#include "qscopedpointer.h"
#ifdef QT_DEBUG
# include <QtCore/qdebug.h>
#endif
@@ -98,10 +99,10 @@ QT_BEGIN_NAMESPACE
class QGraphicsGridLayoutPrivate : public QGraphicsLayoutPrivate
{
public:
- QGraphicsGridLayoutPrivate(): m_styleInfo(0) { }
+ QGraphicsGridLayoutPrivate() { }
QGraphicsLayoutStyleInfo *styleInfo() const;
- mutable QGraphicsLayoutStyleInfo *m_styleInfo;
+ mutable QScopedPointer<QGraphicsLayoutStyleInfo> m_styleInfo;
QGraphicsGridLayoutEngine engine;
#ifdef QGRIDLAYOUTENGINE_DEBUG
@@ -113,8 +114,8 @@ public:
QGraphicsLayoutStyleInfo *QGraphicsGridLayoutPrivate::styleInfo() const
{
if (!m_styleInfo)
- m_styleInfo = new QGraphicsLayoutStyleInfo(this);
- return m_styleInfo;
+ m_styleInfo.reset(new QGraphicsLayoutStyleInfo(this));
+ return m_styleInfo.data();
}
/*!
diff --git a/src/widgets/graphicsview/qgraphicslinearlayout.cpp b/src/widgets/graphicsview/qgraphicslinearlayout.cpp
index 524649bf12..6763af7905 100644
--- a/src/widgets/graphicsview/qgraphicslinearlayout.cpp
+++ b/src/widgets/graphicsview/qgraphicslinearlayout.cpp
@@ -122,6 +122,7 @@
#include "qgraphicswidget.h"
#include "qgraphicsgridlayoutengine_p.h"
#include "qgraphicslayoutstyleinfo_p.h"
+#include "qscopedpointer.h"
#ifdef QT_DEBUG
#include <QtCore/qdebug.h>
#endif
@@ -132,8 +133,7 @@ class QGraphicsLinearLayoutPrivate : public QGraphicsLayoutPrivate
{
public:
QGraphicsLinearLayoutPrivate(Qt::Orientation orientation)
- : orientation(orientation),
- m_styleInfo(0)
+ : orientation(orientation)
{ }
void removeGridItem(QGridLayoutItem *gridItem);
@@ -143,7 +143,7 @@ public:
int gridColumn(int index) const;
Qt::Orientation orientation;
- mutable QGraphicsLayoutStyleInfo *m_styleInfo;
+ mutable QScopedPointer<QGraphicsLayoutStyleInfo> m_styleInfo;
QGraphicsGridLayoutEngine engine;
};
@@ -178,8 +178,8 @@ int QGraphicsLinearLayoutPrivate::gridColumn(int index) const
QGraphicsLayoutStyleInfo *QGraphicsLinearLayoutPrivate::styleInfo() const
{
if (!m_styleInfo)
- m_styleInfo = new QGraphicsLayoutStyleInfo(this);
- return m_styleInfo;
+ m_styleInfo.reset(new QGraphicsLayoutStyleInfo(this));
+ return m_styleInfo.data();
}
/*!
diff --git a/src/widgets/graphicsview/qgraphicsview.cpp b/src/widgets/graphicsview/qgraphicsview.cpp
index 450d5a7d9c..fc5dbdd80a 100644
--- a/src/widgets/graphicsview/qgraphicsview.cpp
+++ b/src/widgets/graphicsview/qgraphicsview.cpp
@@ -3831,7 +3831,7 @@ QTransform QGraphicsView::transform() const
}
/*!
- Returns a matrix that maps viewport coordinates to scene coordinates.
+ Returns a matrix that maps scene coordinates to viewport coordinates.
\sa mapToScene(), mapFromScene()
*/
diff --git a/src/widgets/itemviews/qabstractitemview.cpp b/src/widgets/itemviews/qabstractitemview.cpp
index 1bdb4352af..6c38c53a77 100644
--- a/src/widgets/itemviews/qabstractitemview.cpp
+++ b/src/widgets/itemviews/qabstractitemview.cpp
@@ -2981,7 +2981,11 @@ void QAbstractItemView::keyboardSearch(const QString &search)
: d->model->index(0, 0, d->root);
bool skipRow = false;
bool keyboardTimeWasValid = d->keyboardInputTime.isValid();
- qint64 keyboardInputTimeElapsed = d->keyboardInputTime.restart();
+ qint64 keyboardInputTimeElapsed;
+ if (keyboardTimeWasValid)
+ keyboardInputTimeElapsed = d->keyboardInputTime.restart();
+ else
+ d->keyboardInputTime.start();
if (search.isEmpty() || !keyboardTimeWasValid
|| keyboardInputTimeElapsed > QApplication::keyboardInputInterval()) {
d->keyboardInput = search;
diff --git a/src/widgets/itemviews/qtreeview.cpp b/src/widgets/itemviews/qtreeview.cpp
index 95f14bec78..8031d538a6 100644
--- a/src/widgets/itemviews/qtreeview.cpp
+++ b/src/widgets/itemviews/qtreeview.cpp
@@ -1024,7 +1024,11 @@ void QTreeView::keyboardSearch(const QString &search)
bool skipRow = false;
bool keyboardTimeWasValid = d->keyboardInputTime.isValid();
- qint64 keyboardInputTimeElapsed = d->keyboardInputTime.restart();
+ qint64 keyboardInputTimeElapsed;
+ if (keyboardTimeWasValid)
+ keyboardInputTimeElapsed = d->keyboardInputTime.restart();
+ else
+ d->keyboardInputTime.start();
if (search.isEmpty() || !keyboardTimeWasValid
|| keyboardInputTimeElapsed > QApplication::keyboardInputInterval()) {
d->keyboardInput = search;
diff --git a/src/widgets/styles/qcommonstyle.cpp b/src/widgets/styles/qcommonstyle.cpp
index 5ac2293751..63024360ae 100644
--- a/src/widgets/styles/qcommonstyle.cpp
+++ b/src/widgets/styles/qcommonstyle.cpp
@@ -1616,7 +1616,7 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt,
if (!hasArrow) {
proxy()->drawItemPixmap(p, pr, Qt::AlignCenter, pm);
} else {
- drawArrow(this, toolbutton, pr, p, widget);
+ drawArrow(proxy(), toolbutton, pr, p, widget);
}
alignment |= Qt::AlignCenter;
} else {
@@ -1626,7 +1626,7 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt,
if (!hasArrow) {
proxy()->drawItemPixmap(p, QStyle::visualRect(opt->direction, rect, pr), Qt::AlignCenter, pm);
} else {
- drawArrow(this, toolbutton, pr, p, widget);
+ drawArrow(proxy(), toolbutton, pr, p, widget);
}
alignment |= Qt::AlignLeft | Qt::AlignVCenter;
}
@@ -1637,7 +1637,7 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt,
} else {
rect.translate(shiftX, shiftY);
if (hasArrow) {
- drawArrow(this, toolbutton, rect, p, widget);
+ drawArrow(proxy(), toolbutton, rect, p, widget);
} else {
proxy()->drawItemPixmap(p, rect, Qt::AlignCenter, pm);
}
diff --git a/src/widgets/styles/qmacstyle_mac.mm b/src/widgets/styles/qmacstyle_mac.mm
index d29ff93382..e51f750916 100644
--- a/src/widgets/styles/qmacstyle_mac.mm
+++ b/src/widgets/styles/qmacstyle_mac.mm
@@ -4954,6 +4954,9 @@ QRect QMacStyle::subElementRect(SubElement sr, const QStyleOption *opt,
break;
}
case SE_ProgressBarGroove:
+ // Wrong in the secondary dimension, but accurate enough in the main dimension.
+ rect = opt->rect;
+ break;
case SE_ProgressBarLabel:
break;
case SE_ProgressBarContents:
diff --git a/src/widgets/util/qscroller.cpp b/src/widgets/util/qscroller.cpp
index 2e48208402..f3b442928a 100644
--- a/src/widgets/util/qscroller.cpp
+++ b/src/widgets/util/qscroller.cpp
@@ -193,7 +193,7 @@ class QScrollTimer : public QAbstractAnimation
{
public:
QScrollTimer(QScrollerPrivate *_d)
- : d(_d), ignoreUpdate(false), skip(0)
+ : QAbstractAnimation(_d), d(_d), ignoreUpdate(false), skip(0)
{ }
int duration() const Q_DECL_OVERRIDE
diff --git a/src/widgets/widgets/qplaintextedit.cpp b/src/widgets/widgets/qplaintextedit.cpp
index 3772a7866e..17eac9db58 100644
--- a/src/widgets/widgets/qplaintextedit.cpp
+++ b/src/widgets/widgets/qplaintextedit.cpp
@@ -2194,27 +2194,25 @@ QVariant QPlainTextEdit::inputMethodQuery(Qt::InputMethodQuery property) const
/*!\internal
*/
-QVariant QPlainTextEdit::inputMethodQuery(Qt::InputMethodQuery property, QVariant argument) const
+QVariant QPlainTextEdit::inputMethodQuery(Qt::InputMethodQuery query, QVariant argument) const
{
Q_D(const QPlainTextEdit);
- QVariant v;
- switch (property) {
- case Qt::ImHints:
- v = QWidget::inputMethodQuery(property);
- break;
+ if (query == Qt::ImHints)
+ return QWidget::inputMethodQuery(query);
+ const QVariant v = d->control->inputMethodQuery(query, argument);
+ const QPointF offset = contentOffset();
+ switch (v.type()) {
+ case QVariant::RectF:
+ return v.toRectF().translated(offset);
+ case QVariant::PointF:
+ return v.toPointF() + offset;
+ case QVariant::Rect:
+ return v.toRect().translated(offset.toPoint());
+ case QVariant::Point:
+ return v.toPoint() + offset.toPoint();
default:
- v = d->control->inputMethodQuery(property, argument);
- const QPoint offset(-d->horizontalOffset(), -0);
- if (v.type() == QVariant::RectF)
- v = v.toRectF().toRect().translated(offset);
- else if (v.type() == QVariant::PointF)
- v = v.toPointF().toPoint() + offset;
- else if (v.type() == QVariant::Rect)
- v = v.toRect().translated(offset);
- else if (v.type() == QVariant::Point)
- v = v.toPoint() + offset;
+ break;
}
-
return v;
}
diff --git a/src/widgets/widgets/qprogressbar.cpp b/src/widgets/widgets/qprogressbar.cpp
index 1ba0d78622..10f005e6d3 100644
--- a/src/widgets/widgets/qprogressbar.cpp
+++ b/src/widgets/widgets/qprogressbar.cpp
@@ -161,7 +161,7 @@ bool QProgressBarPrivate::repaintRequired() const
QStyleOptionProgressBar opt;
q->initStyleOption(&opt);
int cw = q->style()->pixelMetric(QStyle::PM_ProgressBarChunkWidth, &opt, q);
- QRect groove = q->style()->subElementRect(QStyle::SE_ProgressBarGroove, &opt, q);
+ QRect groove = q->style()->subElementRect(QStyle::SE_ProgressBarGroove, &opt, q);
// This expression is basically
// (valueDifference / (maximum - minimum) > cw / groove.width())
// transformed to avoid integer division.
diff --git a/src/widgets/widgets/qtabbar.cpp b/src/widgets/widgets/qtabbar.cpp
index f56830c14b..6c748c09bb 100644
--- a/src/widgets/widgets/qtabbar.cpp
+++ b/src/widgets/widgets/qtabbar.cpp
@@ -70,6 +70,23 @@
QT_BEGIN_NAMESPACE
+QMovableTabWidget::QMovableTabWidget(QWidget *parent)
+ : QWidget(parent)
+{
+}
+
+void QMovableTabWidget::setPixmap(const QPixmap &pixmap)
+{
+ m_pixmap = pixmap;
+ update();
+}
+
+void QMovableTabWidget::paintEvent(QPaintEvent *e)
+{
+ Q_UNUSED(e);
+ QPainter p(this);
+ p.drawPixmap(0, 0, m_pixmap);
+}
inline static bool verticalTabs(QTabBar::Shape shape)
{
@@ -1992,13 +2009,14 @@ void QTabBarPrivate::setupMovableTab()
{
Q_Q(QTabBar);
if (!movingTab)
- movingTab = new QWidget(q);
+ movingTab = new QMovableTabWidget(q);
int taboverlap = q->style()->pixelMetric(QStyle::PM_TabBarTabOverlap, 0 ,q);
QRect grabRect = q->tabRect(pressedIndex);
grabRect.adjust(-taboverlap, 0, taboverlap, 0);
- QPixmap grabImage(grabRect.size());
+ QPixmap grabImage(grabRect.size() * q->devicePixelRatioF());
+ grabImage.setDevicePixelRatio(q->devicePixelRatioF());
grabImage.fill(Qt::transparent);
QStylePainter p(&grabImage, q);
p.initFrom(q);
@@ -2009,11 +2027,8 @@ void QTabBarPrivate::setupMovableTab()
p.drawControl(QStyle::CE_TabBarTab, tab);
p.end();
- QPalette pal;
- pal.setBrush(QPalette::All, QPalette::Window, grabImage);
- movingTab->setPalette(pal);
+ movingTab->setPixmap(grabImage);
movingTab->setGeometry(grabRect);
- movingTab->setAutoFillBackground(true);
movingTab->raise();
// Re-arrange widget order to avoid overlaps
diff --git a/src/widgets/widgets/qtabbar_p.h b/src/widgets/widgets/qtabbar_p.h
index c5eb0d42d7..48f235f050 100644
--- a/src/widgets/widgets/qtabbar_p.h
+++ b/src/widgets/widgets/qtabbar_p.h
@@ -67,6 +67,19 @@
QT_BEGIN_NAMESPACE
+class QMovableTabWidget : public QWidget
+{
+public:
+ explicit QMovableTabWidget(QWidget *parent = Q_NULLPTR);
+ void setPixmap(const QPixmap &pixmap);
+
+protected:
+ void paintEvent(QPaintEvent *e) Q_DECL_OVERRIDE;
+
+private:
+ QPixmap m_pixmap;
+};
+
class QTabBarPrivate : public QWidgetPrivate
{
Q_DECLARE_PUBLIC(QTabBar)
@@ -207,7 +220,7 @@ public:
int switchTabCurrentIndex;
int switchTabTimerId;
- QWidget *movingTab;
+ QMovableTabWidget *movingTab;
#ifdef Q_DEAD_CODE_FROM_QT4_MAC
int previousPressedIndex;
#endif
diff --git a/src/widgets/widgets/qtextedit.cpp b/src/widgets/widgets/qtextedit.cpp
index 3f2e4728ed..1dd774cf7a 100644
--- a/src/widgets/widgets/qtextedit.cpp
+++ b/src/widgets/widgets/qtextedit.cpp
@@ -1727,24 +1727,22 @@ QVariant QTextEdit::inputMethodQuery(Qt::InputMethodQuery property) const
QVariant QTextEdit::inputMethodQuery(Qt::InputMethodQuery query, QVariant argument) const
{
Q_D(const QTextEdit);
- QVariant v;
- switch (query) {
- case Qt::ImHints:
- v = QWidget::inputMethodQuery(query);
- break;
+ if (query == Qt::ImHints)
+ return QWidget::inputMethodQuery(query);
+ const QVariant v = d->control->inputMethodQuery(query, argument);
+ const QPointF offset(-d->horizontalOffset(), -d->verticalOffset());
+ switch (v.type()) {
+ case QVariant::RectF:
+ return v.toRectF().translated(offset);
+ case QVariant::PointF:
+ return v.toPointF() + offset;
+ case QVariant::Rect:
+ return v.toRect().translated(offset.toPoint());
+ case QVariant::Point:
+ return v.toPoint() + offset.toPoint();
default:
- v = d->control->inputMethodQuery(query, argument);
- const QPoint offset(-d->horizontalOffset(), -d->verticalOffset());
- if (v.type() == QVariant::RectF)
- v = v.toRectF().toRect().translated(offset);
- else if (v.type() == QVariant::PointF)
- v = v.toPointF().toPoint() + offset;
- else if (v.type() == QVariant::Rect)
- v = v.toRect().translated(offset);
- else if (v.type() == QVariant::Point)
- v = v.toPoint() + offset;
+ break;
}
-
return v;
}
diff --git a/tests/auto/auto.pro b/tests/auto/auto.pro
index dd70d78ae5..c40e3d1140 100644
--- a/tests/auto/auto.pro
+++ b/tests/auto/auto.pro
@@ -24,7 +24,7 @@ ios: SUBDIRS = corelib gui
wince: SUBDIRS -= printsupport
cross_compile: SUBDIRS -= tools cmake installed_cmake
!qtHaveModule(opengl): SUBDIRS -= opengl
-!qtHaveModule(gui): SUBDIRS -= gui cmake installed_cmake
+!qtHaveModule(gui): SUBDIRS -= gui
!qtHaveModule(widgets): SUBDIRS -= widgets
!qtHaveModule(printsupport): SUBDIRS -= printsupport
!qtHaveModule(concurrent): SUBDIRS -= concurrent
diff --git a/tests/auto/cmake/CMakeLists.txt b/tests/auto/cmake/CMakeLists.txt
index 1abbef0d68..c780096854 100644
--- a/tests/auto/cmake/CMakeLists.txt
+++ b/tests/auto/cmake/CMakeLists.txt
@@ -116,13 +116,18 @@ endif()
set(qt_module_includes
Core QObject
- Gui QImage
Network QHostInfo
Sql QSqlError
Test QTestEventList
Xml QDomDocument
)
+if (NOT NO_GUI)
+ list(APPEND qt_module_includes
+ Gui QImage
+ )
+endif()
+
if (NOT NO_WIDGETS)
list(APPEND qt_module_includes
Widgets QWidget
diff --git a/tests/auto/cmake/test_testlib_definitions/CMakeLists.txt b/tests/auto/cmake/test_testlib_definitions/CMakeLists.txt
index cc54bf5bc3..6fe7e56d24 100644
--- a/tests/auto/cmake/test_testlib_definitions/CMakeLists.txt
+++ b/tests/auto/cmake/test_testlib_definitions/CMakeLists.txt
@@ -34,7 +34,9 @@ macro(test_testlib_project _module)
endmacro()
add_subdirectory(core_only)
-add_subdirectory(gui)
+if(NOT NO_GUI)
+ add_subdirectory(gui)
+endif()
if(NOT NO_WIDGETS)
add_subdirectory(widgets)
endif()
diff --git a/tests/auto/corelib/global/qlogging/tst_qlogging.cpp b/tests/auto/corelib/global/qlogging/tst_qlogging.cpp
index f608a36214..ce227a6c8b 100644
--- a/tests/auto/corelib/global/qlogging/tst_qlogging.cpp
+++ b/tests/auto/corelib/global/qlogging/tst_qlogging.cpp
@@ -774,6 +774,17 @@ void tst_qmessagehandler::qMessagePattern_data()
<< true << (QList<QByteArray>()
<< ('/' + QDateTime::currentDateTime().toString("yyyy - MM - d").toUtf8() + "/qDebug"));
+ QTest::newRow("time-time") << "/%{time yyyy - MM - d}/%{time dd-MM-yy}/%{message}"
+ << true << (QList<QByteArray>()
+ << ('/' + QDateTime::currentDateTime().toString("yyyy - MM - d").toUtf8()
+ + '/' + QDateTime::currentDateTime().toString("dd-MM-yy").toUtf8()
+ + "/qDebug"));
+
+ QTest::newRow("skipped-time-shown-time")
+ << "/%{if-warning}%{time yyyy - MM - d}%{endif}%{if-debug}%{time dd-MM-yy}%{endif}/%{message}"
+ << true << (QList<QByteArray>()
+ << ('/' + QDateTime::currentDateTime().toString("dd-MM-yy").toUtf8() + "/qDebug"));
+
// %{time} should have a padding of 6 so if it takes less than 10 seconds to show
// the first message, there should be 5 spaces
QTest::newRow("time-process") << "<%{time process}>%{message}" << true << (QList<QByteArray>()
diff --git a/tests/auto/corelib/io/qstandardpaths/BLACKLIST b/tests/auto/corelib/io/qstandardpaths/BLACKLIST
deleted file mode 100644
index 8496a620b3..0000000000
--- a/tests/auto/corelib/io/qstandardpaths/BLACKLIST
+++ /dev/null
@@ -1,2 +0,0 @@
-[testRuntimeDirectory]
-rhel-7.1
diff --git a/tests/auto/corelib/kernel/qpointer/tst_qpointer.cpp b/tests/auto/corelib/kernel/qpointer/tst_qpointer.cpp
index 838120bb68..914f9e2b9b 100644
--- a/tests/auto/corelib/kernel/qpointer/tst_qpointer.cpp
+++ b/tests/auto/corelib/kernel/qpointer/tst_qpointer.cpp
@@ -54,6 +54,7 @@ private slots:
void qvariantCast();
void constPointer();
+ void constQPointer();
};
void tst_QPointer::constructors()
@@ -397,6 +398,21 @@ void tst_QPointer::constPointer()
delete fp.data();
}
+void tst_QPointer::constQPointer()
+{
+ // Check that const QPointers work. It's a bit weird to mark a pointer
+ // const if its value can change, but the shallow-const principle in C/C++
+ // allows this, and people use it, so document it with a test.
+ //
+ // It's unlikely that this test will fail in and out of itself, but it
+ // presents the use-case to static and dynamic checkers that can raise
+ // a warning (hopefully) should this become an issue.
+ QObject *o = new QObject(this);
+ const QPointer<QObject> p = o;
+ delete o;
+ QVERIFY(!p);
+}
+
QTEST_MAIN(tst_QPointer)
#include "tst_qpointer.moc"
diff --git a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp
index 32c2154da6..7f6e26eecb 100644
--- a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp
+++ b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp
@@ -276,6 +276,8 @@ private slots:
void compareSanity_data();
void compareSanity();
+ void accessSequentialContainerKey();
+
private:
void dataStream_data(QDataStream::Version version);
void loadQVariantFromDataStream(QDataStream::Version version);
@@ -4763,5 +4765,30 @@ void tst_QVariant::compareSanity()
}
}
+void tst_QVariant::accessSequentialContainerKey()
+{
+ QString nameResult;
+
+ {
+ QMap<QString, QObject*> mapping;
+ QString name = QString::fromLatin1("Seven");
+ mapping.insert(name, Q_NULLPTR);
+
+ QVariant variant = QVariant::fromValue(mapping);
+
+ QAssociativeIterable iterable = variant.value<QAssociativeIterable>();
+ QAssociativeIterable::const_iterator iit = iterable.begin();
+ const QAssociativeIterable::const_iterator end = iterable.end();
+ for ( ; iit != end; ++iit) {
+ nameResult += iit.key().toString();
+ }
+ } // Destroy mapping
+ // Regression test for QTBUG-52246 - no memory corruption/double deletion
+ // of the string key.
+
+ QCOMPARE(nameResult, QStringLiteral("Seven"));
+}
+
+
QTEST_MAIN(tst_QVariant)
#include "tst_qvariant.moc"
diff --git a/tests/auto/gui/image/qimage/tst_qimage.cpp b/tests/auto/gui/image/qimage/tst_qimage.cpp
index d8fb39f77f..91df1ca520 100644
--- a/tests/auto/gui/image/qimage/tst_qimage.cpp
+++ b/tests/auto/gui/image/qimage/tst_qimage.cpp
@@ -193,6 +193,7 @@ private slots:
void metadataPassthrough();
void pixelColor();
+ void pixel();
private:
const QString m_prefix;
@@ -3085,5 +3086,33 @@ void tst_QImage::pixelColor()
QCOMPARE(t.pixel(0,0), argb32pm.pixel(0,0));
}
+void tst_QImage::pixel()
+{
+ {
+ QImage mono(1, 1, QImage::Format_Mono);
+ QImage monolsb(1, 1, QImage::Format_MonoLSB);
+ QImage indexed(1, 1, QImage::Format_Indexed8);
+
+ mono.fill(0);
+ monolsb.fill(0);
+ indexed.fill(0);
+
+ QCOMPARE(QColor(mono.pixel(0, 0)), QColor(Qt::black));
+ QCOMPARE(QColor(monolsb.pixel(0, 0)), QColor(Qt::black));
+ indexed.pixel(0, 0); // Don't crash
+ }
+
+ {
+ uchar a = 0;
+ QImage mono(&a, 1, 1, QImage::Format_Mono);
+ QImage monolsb(&a, 1, 1, QImage::Format_MonoLSB);
+ QImage indexed(&a, 1, 1, QImage::Format_Indexed8);
+
+ QCOMPARE(QColor(mono.pixel(0, 0)), QColor(Qt::black));
+ QCOMPARE(QColor(monolsb.pixel(0, 0)), QColor(Qt::black));
+ indexed.pixel(0, 0); // Don't crash
+ }
+}
+
QTEST_GUILESS_MAIN(tst_QImage)
#include "tst_qimage.moc"
diff --git a/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp_16x16.png b/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp_16x16.png
index e9a995e19e..03b1a65f70 100644
--- a/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp_16x16.png
+++ b/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp_16x16.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp_32x32.png b/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp_32x32.png
index 41ef57f94d..0ef47c556d 100644
--- a/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp_32x32.png
+++ b/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp_32x32.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp_48x48.png b/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp_48x48.png
index 35d60d138b..2060854802 100644
--- a/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp_48x48.png
+++ b/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp_48x48.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/loadFromData/designer_argb32.png b/tests/auto/gui/image/qpixmap/loadFromData/designer_argb32.png
index 55d8247cfc..a35316b9c9 100644
--- a/tests/auto/gui/image/qpixmap/loadFromData/designer_argb32.png
+++ b/tests/auto/gui/image/qpixmap/loadFromData/designer_argb32.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_no_alpha.png b/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_no_alpha.png
index 28cd2f06d1..3dd2115df1 100644
--- a/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_no_alpha.png
+++ b/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_no_alpha.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_with_alpha.png b/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_with_alpha.png
index 09735a9752..99cbf4f13a 100644
--- a/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_with_alpha.png
+++ b/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_with_alpha.png
Binary files differ
diff --git a/tests/auto/gui/kernel/qwindow/BLACKLIST b/tests/auto/gui/kernel/qwindow/BLACKLIST
index 0622ba30b7..0cf16b043e 100644
--- a/tests/auto/gui/kernel/qwindow/BLACKLIST
+++ b/tests/auto/gui/kernel/qwindow/BLACKLIST
@@ -1,5 +1,3 @@
-[testInputEvents]
-rhel-7.1
[positioning:default]
ubuntu-14.04
[modalWindowPosition]
diff --git a/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp b/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp
index d553854cb2..b5032c8c35 100644
--- a/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp
+++ b/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp
@@ -603,7 +603,7 @@ void tst_QLocalSocket::readBufferOverflow()
serverSocket->write(buffer, dataBufferSize);
#ifndef Q_OS_WIN
// The data is not immediately sent, but buffered.
- // On Windows, the flushing is done asynchronously by a separate thread.
+ // On Windows, the flushing is done by an asynchronous write operation.
// However, this operation will never complete as long as the data is not
// read by the other end, so the call below always times out.
// On Unix, the flushing is synchronous and thus needs to be done before
diff --git a/tests/auto/opengl/qgl/BLACKLIST b/tests/auto/opengl/qgl/BLACKLIST
index 547a9a2a73..fa7c829b30 100644
--- a/tests/auto/opengl/qgl/BLACKLIST
+++ b/tests/auto/opengl/qgl/BLACKLIST
@@ -1,5 +1,3 @@
-[]
-rhel-7.1
[glWidgetRendering]
windows
[glFBORendering]
diff --git a/tests/auto/other/lancelot/images/alpha2x2.png b/tests/auto/other/lancelot/images/alpha2x2.png
index 67ecc04286..8e99feb4cc 100644
--- a/tests/auto/other/lancelot/images/alpha2x2.png
+++ b/tests/auto/other/lancelot/images/alpha2x2.png
Binary files differ
diff --git a/tests/auto/other/lancelot/images/solid2x2.png b/tests/auto/other/lancelot/images/solid2x2.png
index ad67cd3e12..f34562f964 100644
--- a/tests/auto/other/lancelot/images/solid2x2.png
+++ b/tests/auto/other/lancelot/images/solid2x2.png
Binary files differ
diff --git a/tests/auto/other/lancelot/scripts/statictext.qps b/tests/auto/other/lancelot/scripts/statictext.qps
index c5ddda197f..6b7b97d8fa 100644
--- a/tests/auto/other/lancelot/scripts/statictext.qps
+++ b/tests/auto/other/lancelot/scripts/statictext.qps
@@ -9,7 +9,7 @@ save
setFont "sansserif" 12 normal
drawStaticText 0 40 "sansserif 12pt, normal"
- setFont "sansserif" 10 bold
+ setFont "sansserif" 12 bold
drawStaticText 0 60 "sansserif 12pt, bold"
setFont "sansserif" 10 bold italic
@@ -25,7 +25,7 @@ save
setFont "sansserif" 12 normal
drawStaticText 0 40 "alpha sansserif 12pt, normal"
- setFont "sansserif" 10 bold
+ setFont "sansserif" 12 bold
drawStaticText 0 60 "alpha sansserif 12pt, bold"
setFont "sansserif" 10 bold italic
@@ -43,7 +43,7 @@ save
setFont "sansserif" 12 normal
drawStaticText 0 40 "scaled sansserif 12pt, normal"
- setFont "sansserif" 10 bold
+ setFont "sansserif" 12 bold
drawStaticText 0 60 "scaled sansserif 12pt, bold"
setFont "sansserif" 10 bold italic
@@ -61,7 +61,7 @@ save
setFont "sansserif" 12 normal
drawStaticText 0 40 "flipped sansserif 12pt, normal"
- setFont "sansserif" 10 bold
+ setFont "sansserif" 12 bold
drawStaticText 0 60 "flipped sansserif 12pt, bold"
setFont "sansserif" 10 bold italic
@@ -75,16 +75,16 @@ save
rotate 185
setFont "sansserif" 10 normal
- drawStaticText 0 20 "scaled sansserif 10pt, normal"
+ drawStaticText 0 20 "rotated sansserif 10pt, normal"
setFont "sansserif" 12 normal
- drawStaticText 0 40 "scaled sansserif 12pt, normal"
+ drawStaticText 0 40 "rotated sansserif 12pt, normal"
- setFont "sansserif" 10 bold
- drawStaticText 0 60 "scaled sansserif 12pt, bold"
+ setFont "sansserif" 12 bold
+ drawStaticText 0 60 "rotated sansserif 12pt, bold"
setFont "sansserif" 10 bold italic
- drawStaticText 0 80 "scaled sansserif 10pt, bold italic"
+ drawStaticText 0 80 "rotated sansserif 10pt, bold italic"
restore
translate 0 100
@@ -100,7 +100,7 @@ save
setFont "sansserif" 12 normal
drawStaticText 0 20 "gradient sansserif 12pt, normal"
- setFont "sansserif" 10 bold
+ setFont "sansserif" 12 bold
drawStaticText 0 40 "gradient sansserif 12pt, bold"
setFont "sansserif" 10 bold italic
diff --git a/tests/auto/other/lancelot/scripts/text.qps b/tests/auto/other/lancelot/scripts/text.qps
index 169549a5bd..1b4fe4f064 100644
--- a/tests/auto/other/lancelot/scripts/text.qps
+++ b/tests/auto/other/lancelot/scripts/text.qps
@@ -77,16 +77,16 @@ save
rotate 185
setFont "sansserif" 10 normal
- drawText 0 20 "scaled sansserif 10pt, normal"
+ drawText 0 20 "rotated sansserif 10pt, normal"
setFont "sansserif" 12 normal
- drawText 0 40 "scaled sansserif 12pt, normal"
+ drawText 0 40 "rotated sansserif 12pt, normal"
setFont "sansserif" 12 bold
- drawText 0 60 "scaled sansserif 12pt, bold"
+ drawText 0 60 "rotated sansserif 12pt, bold"
setFont "sansserif" 10 bold italic
- drawText 0 80 "scaled sansserif 10pt, bold italic"
+ drawText 0 80 "rotated sansserif 10pt, bold italic"
restore
translate 0 100
diff --git a/tests/auto/tools/moc/tst_moc.cpp b/tests/auto/tools/moc/tst_moc.cpp
index 5154351bb1..4a423b036c 100644
--- a/tests/auto/tools/moc/tst_moc.cpp
+++ b/tests/auto/tools/moc/tst_moc.cpp
@@ -622,6 +622,8 @@ private slots:
void unnamedNamespaceObjectsAndGadgets();
void veryLongStringData();
void gadgetHierarchy();
+ void optionsFileError_data();
+ void optionsFileError();
signals:
void sigWithUnsignedArg(unsigned foo);
@@ -3497,6 +3499,31 @@ void tst_Moc::gadgetHierarchy()
QCOMPARE(GrandParentGadget::DerivedGadget::staticMetaObject.superClass(), &GrandParentGadget::BaseGadget::staticMetaObject);
}
+void tst_Moc::optionsFileError_data()
+{
+ QTest::addColumn<QString>("optionsArgument");
+ QTest::newRow("no filename") << QStringLiteral("@");
+ QTest::newRow("nonexistent file") << QStringLiteral("@letshuntasnark");
+}
+
+void tst_Moc::optionsFileError()
+{
+#ifdef MOC_CROSS_COMPILED
+ QSKIP("Not tested when cross-compiled");
+#endif
+#if !defined(QT_NO_PROCESS)
+ QFETCH(QString, optionsArgument);
+ QProcess p;
+ p.start(m_moc, QStringList(optionsArgument));
+ QVERIFY(p.waitForFinished());
+ QCOMPARE(p.exitCode(), 1);
+ QVERIFY(p.readAllStandardOutput().isEmpty());
+ const QByteArray err = p.readAllStandardError();
+ QVERIFY(err.contains("moc: "));
+ QVERIFY(!err.contains("QCommandLineParser"));
+#endif
+}
+
QTEST_MAIN(tst_Moc)
// the generated code must compile with QT_NO_KEYWORDS
diff --git a/tests/auto/widgets/dialogs/qfontdialog/BLACKLIST b/tests/auto/widgets/dialogs/qfontdialog/BLACKLIST
index 5fd026537e..669ec50978 100644
--- a/tests/auto/widgets/dialogs/qfontdialog/BLACKLIST
+++ b/tests/auto/widgets/dialogs/qfontdialog/BLACKLIST
@@ -1,7 +1,3 @@
[task256466_wrongStyle]
opensuse-13.1
rhel-7.1
-[setFont]
-ubuntu-14.04
-redhatenterpriselinuxworkstation-6.6
-rhel-7.1
diff --git a/tests/auto/widgets/effects/qpixmapfilter/noise.png b/tests/auto/widgets/effects/qpixmapfilter/noise.png
index 1bebaf528e..c8433602b2 100644
--- a/tests/auto/widgets/effects/qpixmapfilter/noise.png
+++ b/tests/auto/widgets/effects/qpixmapfilter/noise.png
Binary files differ
diff --git a/tests/auto/widgets/gestures/qgesturerecognizer/BLACKLIST b/tests/auto/widgets/gestures/qgesturerecognizer/BLACKLIST
index 14c41711ac..7f55c2dae0 100644
--- a/tests/auto/widgets/gestures/qgesturerecognizer/BLACKLIST
+++ b/tests/auto/widgets/gestures/qgesturerecognizer/BLACKLIST
@@ -1,8 +1,2 @@
[panGesture:Two finger]
xcb
-[swipeGesture:SmallDirectionChange]
-rhel-7.1
-[swipeGesture:Line]
-rhel-7.1
-[pinchGesture:Standard]
-rhel-7.1
diff --git a/tests/auto/widgets/kernel/qwidget/BLACKLIST b/tests/auto/widgets/kernel/qwidget/BLACKLIST
index 8d18d40e05..4563da8d48 100644
--- a/tests/auto/widgets/kernel/qwidget/BLACKLIST
+++ b/tests/auto/widgets/kernel/qwidget/BLACKLIST
@@ -32,7 +32,6 @@ osx
osx
[widgetAt]
osx
-rhel-7.1
[sheetOpacity]
osx
[resizeEvent]
@@ -65,10 +64,8 @@ osx
osx
[taskQTBUG_4055_sendSyntheticEnterLeave]
osx
-rhel-7.1
[syntheticEnterLeave]
osx
-rhel-7.1
[maskedUpdate]
osx
[hideWhenFocusWidgetIsChild]
diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
index ae48445363..1a9d7ec4d2 100644
--- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
+++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
@@ -456,6 +456,8 @@ private slots:
void qmlSetParentHelper();
+ void testForOutsideWSRangeFlag();
+
private:
bool ensureScreenSize(int width, int height);
QWidget *testWidget;
@@ -10544,5 +10546,69 @@ void tst_QWidget::qmlSetParentHelper()
#endif
}
+void tst_QWidget::testForOutsideWSRangeFlag()
+{
+ // QTBUG-49445
+ {
+ QWidget widget;
+ widget.resize(0, 0);
+ widget.show();
+ QTest::qWait(100); // Wait for a while...
+ QVERIFY(!widget.windowHandle()->isExposed()); // The window should not be visible
+ QVERIFY(widget.isVisible()); // The widget should be in visible state
+ }
+ {
+ QWidget widget;
+
+ QWidget native(&widget);
+ native.setAttribute(Qt::WA_NativeWindow);
+ native.resize(0, 0);
+
+ widget.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&widget));
+ QVERIFY(!native.windowHandle()->isExposed());
+ }
+ {
+ QWidget widget;
+ QWidget native(&widget);
+
+ widget.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&widget));
+ QVERIFY(native.isVisible());
+
+ native.resize(0, 0);
+ native.setAttribute(Qt::WA_NativeWindow);
+ QTest::qWait(100); // Wait for a while...
+ QVERIFY(!native.windowHandle()->isExposed());
+ }
+
+ // QTBUG-48321
+ {
+ QWidget widget;
+
+ QWidget native(&widget);
+ native.setAttribute(Qt::WA_NativeWindow);
+
+ widget.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&widget));
+ QVERIFY(native.windowHandle()->isExposed());
+
+ native.resize(0, 0);
+ QTest::qWait(100); // Wait for a while...
+ QVERIFY(!native.windowHandle()->isExposed());
+ }
+
+ // QTBUG-51788
+ {
+ QWidget widget;
+ widget.setLayout(new QGridLayout);
+ widget.layout()->addWidget(new QLineEdit);
+ widget.resize(0, 0);
+ widget.show();
+ // The layout should change the size, so the widget must be visible!
+ QVERIFY(QTest::qWaitForWindowExposed(&widget));
+ }
+}
+
QTEST_MAIN(tst_QWidget)
#include "tst_qwidget.moc"
diff --git a/tests/auto/widgets/styles/qstyle/tst_qstyle.cpp b/tests/auto/widgets/styles/qstyle/tst_qstyle.cpp
index f667d6f8fb..37b72cc99c 100644
--- a/tests/auto/widgets/styles/qstyle/tst_qstyle.cpp
+++ b/tests/auto/widgets/styles/qstyle/tst_qstyle.cpp
@@ -124,6 +124,8 @@ private slots:
void defaultFont();
void testDrawingShortcuts();
void testFrameOnlyAroundContents();
+
+ void testProxyCalled();
private:
void lineUpLayoutTest(QStyle *);
QWidget *testWidget;
@@ -789,5 +791,51 @@ void tst_QStyle::testFrameOnlyAroundContents()
}
+class ProxyTest: public QProxyStyle
+{
+ Q_OBJECT
+public:
+ ProxyTest(QStyle *style = 0)
+ :QProxyStyle(style)
+ , called(false)
+ {}
+
+ void drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p, const QWidget *w) const Q_DECL_OVERRIDE {
+ called = true;
+ return QProxyStyle::drawPrimitive(pe, opt, p, w);
+ }
+ mutable bool called;
+};
+
+
+void tst_QStyle::testProxyCalled()
+{
+ QToolButton b;
+ b.setArrowType(Qt::DownArrow);
+ QStyleOptionToolButton opt;
+ opt.init(&b);
+ opt.features |= QStyleOptionToolButton::Arrow;
+ QPixmap surface(QSize(200, 200));
+ QPainter painter(&surface);
+
+ QStringList keys = QStyleFactory::keys();
+ QVector<QStyle*> styles;
+ styles.reserve(keys.size() + 1);
+
+ styles << new QCommonStyle();
+
+ Q_FOREACH (const QString &key, keys) {
+ styles << QStyleFactory::create(key);
+ }
+
+ Q_FOREACH (QStyle *style, styles) {
+ ProxyTest testStyle;
+ testStyle.setBaseStyle(style);
+ style->drawControl(QStyle::CE_ToolButtonLabel, &opt, &painter, &b);
+ QVERIFY(testStyle.called);
+ delete style;
+ }
+}
+
QTEST_MAIN(tst_QStyle)
#include "tst_qstyle.moc"
diff --git a/tests/auto/widgets/widgets/qcombobox/qtlogoinverted.png b/tests/auto/widgets/widgets/qcombobox/qtlogoinverted.png
index 61efb2f001..af150a697b 100644
--- a/tests/auto/widgets/widgets/qcombobox/qtlogoinverted.png
+++ b/tests/auto/widgets/widgets/qcombobox/qtlogoinverted.png
Binary files differ
diff --git a/tests/auto/widgets/widgets/qmdisubwindow/BLACKLIST b/tests/auto/widgets/widgets/qmdisubwindow/BLACKLIST
deleted file mode 100644
index a10cf663d0..0000000000
--- a/tests/auto/widgets/widgets/qmdisubwindow/BLACKLIST
+++ /dev/null
@@ -1,2 +0,0 @@
-[setSystemMenu]
-rhel-7.1
diff --git a/tests/auto/widgets/widgets/qmenu/BLACKLIST b/tests/auto/widgets/widgets/qmenu/BLACKLIST
index dbc3e26837..de49d5ff45 100644
--- a/tests/auto/widgets/widgets/qmenu/BLACKLIST
+++ b/tests/auto/widgets/widgets/qmenu/BLACKLIST
@@ -1,5 +1,2 @@
[task258920_mouseBorder]
osx
-rhel-7.1
-[pushButtonPopulateOnAboutToShow]
-rhel-7.1
diff --git a/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp b/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp
index 63f3522214..6ad13cd781 100644
--- a/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp
+++ b/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp
@@ -149,6 +149,7 @@ private slots:
#ifndef QT_NO_CONTEXTMENU
void contextMenu();
#endif
+ void inputMethodCursorRect();
private:
void createSelection();
@@ -1722,5 +1723,17 @@ void tst_QPlainTextEdit::contextMenu()
}
#endif // QT_NO_CONTEXTMENU
+// QTBUG-51923: Verify that the cursor rectangle returned by the input
+// method query correctly reflects the viewport offset.
+void tst_QPlainTextEdit::inputMethodCursorRect()
+{
+ ed->setPlainText("Line1\nLine2Line3\nLine3");
+ ed->moveCursor(QTextCursor::End);
+ const QRectF cursorRect = ed->cursorRect();
+ const QVariant cursorRectV = ed->inputMethodQuery(Qt::ImCursorRectangle);
+ QCOMPARE(cursorRectV.type(), QVariant::RectF);
+ QCOMPARE(cursorRectV.toRect(), cursorRect.toRect());
+}
+
QTEST_MAIN(tst_QPlainTextEdit)
#include "tst_qplaintextedit.moc"
diff --git a/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp b/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp
index 26ccc08f9b..f1ebfda88b 100644
--- a/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp
+++ b/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp
@@ -186,6 +186,7 @@ private slots:
void inputMethodQuery();
void inputMethodQueryImHints_data();
void inputMethodQueryImHints();
+ void inputMethodCursorRect();
void highlightLongLine();
@@ -2468,6 +2469,18 @@ void tst_QTextEdit::inputMethodQueryImHints()
QCOMPARE(static_cast<Qt::InputMethodHints>(value.toInt()), hints);
}
+// QTBUG-51923: Verify that the cursor rectangle returned by the input
+// method query correctly reflects the viewport offset.
+void tst_QTextEdit::inputMethodCursorRect()
+{
+ ed->setPlainText("Line1\nLine2Line3\nLine3");
+ ed->moveCursor(QTextCursor::End);
+ const QRectF cursorRect = ed->cursorRect();
+ const QVariant cursorRectV = ed->inputMethodQuery(Qt::ImCursorRectangle);
+ QCOMPARE(cursorRectV.type(), QVariant::RectF);
+ QCOMPARE(cursorRectV.toRect(), cursorRect.toRect());
+}
+
void tst_QTextEdit::highlightLongLine()
{
QTextEdit edit;
diff --git a/tests/benchmarks/corelib/kernel/qcoreapplication/qcoreapplication.pro b/tests/benchmarks/corelib/kernel/qcoreapplication/qcoreapplication.pro
index 6896b3ff55..8bf8487a5f 100644
--- a/tests/benchmarks/corelib/kernel/qcoreapplication/qcoreapplication.pro
+++ b/tests/benchmarks/corelib/kernel/qcoreapplication/qcoreapplication.pro
@@ -1,4 +1,4 @@
-QT += testlib
+QT = core testlib
TEMPLATE = app
TARGET = tst_bench_qcoreapplication
diff --git a/tests/benchmarks/corelib/kernel/qvariant/qvariant.pro b/tests/benchmarks/corelib/kernel/qvariant/qvariant.pro
index 8ea7200d53..8a8e9f25d3 100644
--- a/tests/benchmarks/corelib/kernel/qvariant/qvariant.pro
+++ b/tests/benchmarks/corelib/kernel/qvariant/qvariant.pro
@@ -1,5 +1,6 @@
TARGET = tst_bench_qvariant
QT += testlib
+!qtHaveModule(gui): QT -= gui
CONFIG += release
#CONFIG += debug
diff --git a/tests/benchmarks/corelib/kernel/qvariant/tst_qvariant.cpp b/tests/benchmarks/corelib/kernel/qvariant/tst_qvariant.cpp
index 1d4d840ec1..9abb9466df 100644
--- a/tests/benchmarks/corelib/kernel/qvariant/tst_qvariant.cpp
+++ b/tests/benchmarks/corelib/kernel/qvariant/tst_qvariant.cpp
@@ -27,7 +27,9 @@
****************************************************************************/
#include <QtCore>
-#include <QtGui/QPixmap>
+#ifdef QT_GUI_LIB
+# include <QtGui/QPixmap>
+#endif
#include <qtest.h>
#define ITERATION_COUNT 1e5
@@ -42,7 +44,9 @@ private slots:
void floatVariantCreation();
void rectVariantCreation();
void stringVariantCreation();
+#ifdef QT_GUI_LIB
void pixmapVariantCreation();
+#endif
void stringListVariantCreation();
void bigClassVariantCreation();
void smallClassVariantCreation();
@@ -153,10 +157,12 @@ void tst_qvariant::stringVariantCreation()
variantCreation<QString>(QString());
}
+#ifdef QT_GUI_LIB
void tst_qvariant::pixmapVariantCreation()
{
variantCreation<QPixmap>(QPixmap());
}
+#endif
void tst_qvariant::stringListVariantCreation()
{
diff --git a/tests/benchmarks/network/access/qnetworkdiskcache/qnetworkdiskcache.pro b/tests/benchmarks/network/access/qnetworkdiskcache/qnetworkdiskcache.pro
index 9de05b5e65..a9e040bf1e 100644
--- a/tests/benchmarks/network/access/qnetworkdiskcache/qnetworkdiskcache.pro
+++ b/tests/benchmarks/network/access/qnetworkdiskcache/qnetworkdiskcache.pro
@@ -1,8 +1,7 @@
TEMPLATE = app
TARGET = tst_bench_qnetworkdiskcache
-QT += gui # for QDesktopServices
-QT += network testlib
+QT = core network testlib
CONFIG += release
diff --git a/tests/benchmarks/network/access/qnetworkreply_from_cache/qnetworkreply_from_cache.pro b/tests/benchmarks/network/access/qnetworkreply_from_cache/qnetworkreply_from_cache.pro
index bd3b34473f..e1fabffe4d 100644
--- a/tests/benchmarks/network/access/qnetworkreply_from_cache/qnetworkreply_from_cache.pro
+++ b/tests/benchmarks/network/access/qnetworkreply_from_cache/qnetworkreply_from_cache.pro
@@ -1,3 +1,3 @@
TARGET = tst_bench_qnetworkreply_from_cache
-QT += network testlib
+QT = core network testlib
SOURCES += tst_qnetworkreply_from_cache.cpp