summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.qmake.conf2
-rw-r--r--examples/gui/gui.pro2
-rw-r--r--examples/network/googlesuggest/googlesuggest.cpp2
-rw-r--r--examples/widgets/graphicsview/boxes/3rdparty/fbm.c2
-rw-r--r--examples/widgets/widgets.pro2
-rw-r--r--mkspecs/features/file_copies.prf5
-rw-r--r--mkspecs/features/qt_configure.prf4
-rw-r--r--mkspecs/features/winrt/default_pre.prf2
-rw-r--r--qmake/generators/makefile.cpp26
-rw-r--r--qmake/generators/unix/unixmake.cpp8
-rw-r--r--qmake/generators/win32/winmakefile.cpp5
-rw-r--r--qmake/main.cpp29
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtNative.java16
-rw-r--r--src/corelib/animation/qabstractanimation.cpp1
-rw-r--r--src/corelib/doc/snippets/code/src_corelib_io_qdiriterator.cpp9
-rw-r--r--src/corelib/global/qglobal.cpp6
-rw-r--r--src/corelib/global/qnamespace.qdoc2
-rw-r--r--src/corelib/io/qdiriterator.cpp6
-rw-r--r--src/corelib/io/qfile.cpp4
-rw-r--r--src/corelib/io/qfiledevice.cpp4
-rw-r--r--src/corelib/io/qfilesystemwatcher.cpp1
-rw-r--r--src/corelib/io/qfilesystemwatcher_inotify.cpp2
-rw-r--r--src/corelib/io/qfilesystemwatcher_polling.cpp3
-rw-r--r--src/corelib/io/qiodevice.cpp4
-rw-r--r--src/corelib/io/qnoncontiguousbytedevice.cpp1
-rw-r--r--src/corelib/io/qsavefile.cpp4
-rw-r--r--src/corelib/io/qsettings.cpp4
-rw-r--r--src/corelib/io/qstandardpaths.cpp4
-rw-r--r--src/corelib/io/qtemporarydir.cpp10
-rw-r--r--src/corelib/io/qtemporaryfile.cpp4
-rw-r--r--src/corelib/io/qtextstream.cpp3
-rw-r--r--src/corelib/itemmodels/qabstractitemmodel.cpp2
-rw-r--r--src/corelib/itemmodels/qitemselectionmodel.cpp3
-rw-r--r--src/corelib/itemmodels/qstringlistmodel.cpp2
-rw-r--r--src/corelib/kernel/qabstracteventdispatcher.cpp2
-rw-r--r--src/corelib/kernel/qcoreapplication.cpp4
-rw-r--r--src/corelib/kernel/qcoreevent.cpp2
-rw-r--r--src/corelib/kernel/qeventdispatcher_glib.cpp2
-rw-r--r--src/corelib/kernel/qeventdispatcher_unix.cpp2
-rw-r--r--src/corelib/kernel/qeventdispatcher_win.cpp4
-rw-r--r--src/corelib/kernel/qeventloop.cpp2
-rw-r--r--src/corelib/kernel/qmimedata.cpp2
-rw-r--r--src/corelib/kernel/qobjectcleanuphandler.cpp2
-rw-r--r--src/corelib/kernel/qobjectdefs_impl.h4
-rw-r--r--src/corelib/kernel/qsharedmemory.cpp2
-rw-r--r--src/corelib/kernel/qsocketnotifier.cpp2
-rw-r--r--src/corelib/kernel/qtimer.cpp1
-rw-r--r--src/corelib/kernel/qtranslator.cpp2
-rw-r--r--src/corelib/plugin/qfactoryloader.cpp2
-rw-r--r--src/corelib/plugin/qlibrary.cpp2
-rw-r--r--src/corelib/plugin/qpluginloader.cpp1
-rw-r--r--src/corelib/statemachine/qabstractstate.cpp2
-rw-r--r--src/corelib/statemachine/qabstracttransition.cpp2
-rw-r--r--src/corelib/statemachine/qeventtransition.cpp2
-rw-r--r--src/corelib/statemachine/qfinalstate.cpp2
-rw-r--r--src/corelib/statemachine/qhistorystate.cpp3
-rw-r--r--src/corelib/statemachine/qsignaltransition.cpp2
-rw-r--r--src/corelib/statemachine/qstate.cpp2
-rw-r--r--src/corelib/thread/qfuturewatcher.cpp2
-rw-r--r--src/corelib/thread/qthread.cpp2
-rw-r--r--src/corelib/thread/qthreadpool.cpp2
-rw-r--r--src/corelib/tools/qcryptographichash.cpp4
-rw-r--r--src/corelib/tools/qeasingcurve.cpp2
-rw-r--r--src/corelib/tools/qhash.h28
-rw-r--r--src/corelib/tools/qlocale.cpp13
-rw-r--r--src/corelib/tools/qtimeline.cpp2
-rw-r--r--src/gui/painting/qpainterpath.cpp33
-rw-r--r--src/network/access/qhttp2protocolhandler.cpp8
-rw-r--r--src/network/doc/src/bearermanagement.qdoc29
-rw-r--r--src/platformsupport/fontdatabases/mac/coretext.pri14
-rw-r--r--src/plugins/platforms/android/androidjniclipboard.cpp23
-rw-r--r--src/plugins/platforms/android/androidjniclipboard.h5
-rw-r--r--src/plugins/platforms/android/qandroidplatformclipboard.cpp2
-rw-r--r--src/plugins/platforms/cocoa/qcocoawindow.mm12
-rw-r--r--src/plugins/platforms/cocoa/qnsview.mm60
-rw-r--r--src/plugins/platforms/ios/qiostextresponder.mm11
-rw-r--r--src/plugins/platforms/windows/qwindowswindow.cpp27
-rw-r--r--src/tools/qdbusxml2cpp/qdbusxml2cpp.pro7
-rw-r--r--tests/auto/corelib/global/qlogging/app/app.pro2
-rw-r--r--tests/auto/corelib/itemmodels/qitemselectionmodel/tst_qitemselectionmodel.cpp74
-rw-r--r--tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp13
-rw-r--r--tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp4
-rw-r--r--tests/auto/corelib/kernel/qobject/tst_qobject.cpp820
-rw-r--r--tests/auto/corelib/kernel/qsocketnotifier/tst_qsocketnotifier.cpp4
-rw-r--r--tests/auto/corelib/tools/qhash/tst_qhash.cpp69
-rw-r--r--tests/auto/dbus/qdbusabstractadaptor/myobject.h5
-rw-r--r--tests/auto/dbus/qdbusmarshall/common.h2
-rw-r--r--tests/auto/gui/kernel/qinputmethod/tst_qinputmethod.cpp5
-rw-r--r--tests/auto/gui/kernel/qwindow/tst_qwindow.cpp15
-rw-r--r--tests/auto/gui/painting/qpainter/tst_qpainter.cpp4
-rw-r--r--tests/auto/gui/painting/qpainterpath/tst_qpainterpath.cpp61
-rw-r--r--tests/auto/other/qaccessibilitymac/tst_qaccessibilitymac.cpp15
-rw-r--r--tests/auto/other/qaccessibilitymac/tst_qaccessibilitymac_helpers.h2
-rw-r--r--tests/auto/other/qaccessibilitymac/tst_qaccessibilitymac_helpers.mm19
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsscene/BLACKLIST3
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp6
-rw-r--r--tests/auto/widgets/kernel/qapplication/BLACKLIST2
-rw-r--r--tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp2
-rw-r--r--tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp11
-rwxr-xr-xutil/includemocs/includemocs.pl138
100 files changed, 1144 insertions, 655 deletions
diff --git a/.qmake.conf b/.qmake.conf
index 6d42bbdd34..2e269c554b 100644
--- a/.qmake.conf
+++ b/.qmake.conf
@@ -4,4 +4,4 @@ CONFIG += warning_clean
QT_SOURCE_TREE = $$PWD
QT_BUILD_TREE = $$shadowed($$PWD)
-MODULE_VERSION = 5.9.0
+MODULE_VERSION = 5.9.1
diff --git a/examples/gui/gui.pro b/examples/gui/gui.pro
index a4d960d3f5..b8080c2075 100644
--- a/examples/gui/gui.pro
+++ b/examples/gui/gui.pro
@@ -6,5 +6,5 @@ CONFIG += no_docs_target
SUBDIRS += analogclock
SUBDIRS += rasterwindow
-qtConfig(opengl): \
+qtHaveModule(gui):qtConfig(opengl): \
SUBDIRS += openglwindow
diff --git a/examples/network/googlesuggest/googlesuggest.cpp b/examples/network/googlesuggest/googlesuggest.cpp
index a4ae9d9fe8..9fdfd8faa6 100644
--- a/examples/network/googlesuggest/googlesuggest.cpp
+++ b/examples/network/googlesuggest/googlesuggest.cpp
@@ -117,11 +117,13 @@ bool GSuggestCompletion::eventFilter(QObject *obj, QEvent *ev)
case Qt::Key_Return:
doneCompletion();
consumed = true;
+ break;
case Qt::Key_Escape:
editor->setFocus();
popup->hide();
consumed = true;
+ break;
case Qt::Key_Up:
case Qt::Key_Down:
diff --git a/examples/widgets/graphicsview/boxes/3rdparty/fbm.c b/examples/widgets/graphicsview/boxes/3rdparty/fbm.c
index 98eb87a33b..3eebaabfba 100644
--- a/examples/widgets/graphicsview/boxes/3rdparty/fbm.c
+++ b/examples/widgets/graphicsview/boxes/3rdparty/fbm.c
@@ -106,7 +106,7 @@ float noise3(float vec[3])
{
int bx0, bx1, by0, by1, bz0, bz1, b00, b10, b01, b11;
float rx0, rx1, ry0, ry1, rz0, rz1, *q, sy, sz, a, b, c, d, t, u, v;
- register int i, j;
+ int i, j;
if (start) {
start = 0;
diff --git a/examples/widgets/widgets.pro b/examples/widgets/widgets.pro
index 513ddc91f2..cef4936d32 100644
--- a/examples/widgets/widgets.pro
+++ b/examples/widgets/widgets.pro
@@ -22,7 +22,7 @@ SUBDIRS = \
tutorials \
widgets
-qtConfig(opengl): \
+qtHaveModule(gui):qtConfig(opengl): \
SUBDIRS += windowcontainer
contains(DEFINES, QT_NO_CURSOR): SUBDIRS -= mainwindows
diff --git a/mkspecs/features/file_copies.prf b/mkspecs/features/file_copies.prf
index a3520ba549..58e07bd393 100644
--- a/mkspecs/features/file_copies.prf
+++ b/mkspecs/features/file_copies.prf
@@ -44,10 +44,7 @@ for (cp, COPIES) {
$${pfx}.output = $$path/${QMAKE_FUNC_FILE_IN_qtStripSrcDir_$$cp}
}
$${pfx}.input = $${pfx}.files
- !$$dir: \
- $${pfx}.commands = $(QINSTALL_FILE) ${QMAKE_FILE_IN} ${QMAKE_FILE_OUT}
- else: \
- $${pfx}.commands = $(QINSTALL_DIR) ${QMAKE_FILE_IN} ${QMAKE_FILE_OUT}
+ $${pfx}.commands = $(QINSTALL) ${QMAKE_FILE_IN} ${QMAKE_FILE_OUT}
$${pfx}.name = COPY ${QMAKE_FILE_IN}
$${pfx}.CONFIG = no_link no_clean target_predeps
QMAKE_EXTRA_COMPILERS += $${pfx}
diff --git a/mkspecs/features/qt_configure.prf b/mkspecs/features/qt_configure.prf
index 966c43108c..5cbc0d4bfd 100644
--- a/mkspecs/features/qt_configure.prf
+++ b/mkspecs/features/qt_configure.prf
@@ -1919,8 +1919,10 @@ qtConfCheckErrors()
for (k, $${currentConfig}.features._KEYS_) {
pp = $$eval($${currentConfig}.features.$${k}.purpose)
!isEmpty(pp) {
+ pfx = $$eval($${currentConfig}.features.$${k}.section)
+ !isEmpty(pfx): pfx = "$$pfx: "
all_ft += $$qtConfPadCols($$k, ".......................", \
- $$section(pp, $$escape_expand(\\n), 0, 0))
+ $$pfx$$section(pp, $$escape_expand(\\n), 0, 0))
}
}
}
diff --git a/mkspecs/features/winrt/default_pre.prf b/mkspecs/features/winrt/default_pre.prf
index 8b9c1d7663..966d24f091 100644
--- a/mkspecs/features/winrt/default_pre.prf
+++ b/mkspecs/features/winrt/default_pre.prf
@@ -9,6 +9,6 @@ CONFIG(debug, debug|release): \
else: \
QMAKE_LIBS = ucrt.lib vcruntime.lib $$QMAKE_LIBS
-equals(TEMPLATE, "vcapp"): CONFIG += windeployqt
+equals(TEMPLATE, "vcapp"):!static: CONFIG += windeployqt
load(default_pre)
diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp
index c76708285a..d3221b7a25 100644
--- a/qmake/generators/makefile.cpp
+++ b/qmake/generators/makefile.cpp
@@ -1287,12 +1287,10 @@ MakefileGenerator::writeInstalls(QTextStream &t, bool noBuild)
dst_file += Option::dir_sep;
dst_file += fi.fileName();
QString cmd;
- if (fi.isDir())
- cmd = "-$(QINSTALL_DIR)";
- else if (is_target || fi.isExecutable())
- cmd = "-$(QINSTALL_PROGRAM)";
+ if (is_target || (!fi.isDir() && fi.isExecutable()))
+ cmd = QLatin1String("-$(QINSTALL_PROGRAM)");
else
- cmd = "-$(QINSTALL_FILE)";
+ cmd = QLatin1String("-$(QINSTALL)");
cmd += " " + escapeFilePath(wild) + " " + escapeFilePath(dst_file);
inst << cmd;
if (!project->isActiveConfig("debug_info") && !project->isActiveConfig("nostrip") &&
@@ -1307,17 +1305,14 @@ MakefileGenerator::writeInstalls(QTextStream &t, bool noBuild)
QDir::NoDotAndDotDot | QDir::AllEntries);
if (installConfigValues.contains("no_check_exist") && files.isEmpty()) {
QString dst_file = filePrefixRoot(root, dst_dir);
- QString cmd;
if (!dst_file.endsWith(Option::dir_sep))
dst_file += Option::dir_sep;
dst_file += filestr;
- if (installConfigValues.contains("directory")) {
- cmd = QLatin1String("-$(QINSTALL_DIR)");
- } else if (installConfigValues.contains("executable")) {
+ QString cmd;
+ if (installConfigValues.contains("executable"))
cmd = QLatin1String("-$(QINSTALL_PROGRAM)");
- } else {
- cmd = QLatin1String("-$(QINSTALL_FILE)");
- }
+ else
+ cmd = QLatin1String("-$(QINSTALL)");
cmd += " " + escapeFilePath(wild) + " " + escapeFilePath(dst_file);
inst << cmd;
uninst.append(rm_dir_contents + " " + escapeFilePath(filePrefixRoot(root, fileFixify(dst_dir + filestr, FileFixifyAbsolute, false))));
@@ -1330,7 +1325,7 @@ MakefileGenerator::writeInstalls(QTextStream &t, bool noBuild)
if (!dst_file.endsWith(Option::dir_sep))
dst_file += Option::dir_sep;
dst_file += fi.fileName();
- QString cmd = QString(fi.isDir() ? "-$(QINSTALL_DIR)" : "-$(QINSTALL_FILE)") + " " +
+ QString cmd = QLatin1String("-$(QINSTALL) ") +
escapeFilePath(dirstr + file) + " " + escapeFilePath(dst_file);
inst << cmd;
if (!project->isActiveConfig("debug_info") && !project->isActiveConfig("nostrip") &&
@@ -2242,9 +2237,8 @@ MakefileGenerator::writeDefaultVariables(QTextStream &t)
t << "INSTALL_FILE = " << var("QMAKE_INSTALL_FILE") << endl;
t << "INSTALL_PROGRAM = " << var("QMAKE_INSTALL_PROGRAM") << endl;
t << "INSTALL_DIR = " << var("QMAKE_INSTALL_DIR") << endl;
- t << "QINSTALL_FILE = " << var("QMAKE_QMAKE") << " -install qinstall file" << endl;
- t << "QINSTALL_PROGRAM = " << var("QMAKE_QMAKE") << " -install qinstall program" << endl;
- t << "QINSTALL_DIR = " << var("QMAKE_QMAKE") << " -install qinstall directory" << endl;
+ t << "QINSTALL = " << var("QMAKE_QMAKE") << " -install qinstall" << endl;
+ t << "QINSTALL_PROGRAM = " << var("QMAKE_QMAKE") << " -install qinstall -exe" << endl;
t << "DEL_FILE = " << var("QMAKE_DEL_FILE") << endl;
t << "SYMLINK = " << var("QMAKE_SYMBOLIC_LINK") << endl;
t << "DEL_DIR = " << var("QMAKE_DEL_DIR") << endl;
diff --git a/qmake/generators/unix/unixmake.cpp b/qmake/generators/unix/unixmake.cpp
index 20318f120c..b86594d191 100644
--- a/qmake/generators/unix/unixmake.cpp
+++ b/qmake/generators/unix/unixmake.cpp
@@ -600,7 +600,7 @@ UnixMakefileGenerator::defaultInstall(const QString &t)
dst = escapeFilePath(filePrefixRoot(root, targetdir + src.section('/', -1)));
if(!ret.isEmpty())
ret += "\n\t";
- ret += "-$(QINSTALL_FILE) " + escapeFilePath(Option::fixPathToTargetOS(src, false)) + ' ' + dst;
+ ret += "-$(QINSTALL) " + escapeFilePath(Option::fixPathToTargetOS(src, false)) + ' ' + dst;
if(!uninst.isEmpty())
uninst.append("\n\t");
uninst.append("-$(DEL_FILE) " + dst);
@@ -636,9 +636,9 @@ UnixMakefileGenerator::defaultInstall(const QString &t)
QString copy_cmd;
if (bundle == SolidBundle) {
- copy_cmd += "-$(QINSTALL_DIR) " + src_targ + ' ' + plain_targ;
+ copy_cmd += "-$(QINSTALL) " + src_targ + ' ' + plain_targ;
} else if (project->first("TEMPLATE") == "lib" && project->isActiveConfig("staticlib")) {
- copy_cmd += "-$(QINSTALL_FILE) " + src_targ + ' ' + dst_targ;
+ copy_cmd += "-$(QINSTALL) " + src_targ + ' ' + dst_targ;
} else if (!isAux) {
if (bundle == SlicedBundle) {
if (!ret.isEmpty())
@@ -698,7 +698,7 @@ UnixMakefileGenerator::defaultInstall(const QString &t)
ret += "\n\t";
ret += mkdir_p_asstring("\"`dirname " + dst + "`\"", false) + "\n\t";
ret += "-$(DEL_FILE) " + dst + "\n\t"; // Can't overwrite symlinks to directories
- ret += "-$(QINSTALL_DIR) " + escapeFilePath(src) + " " + dst;
+ ret += "-$(QINSTALL) " + escapeFilePath(src) + " " + dst;
if (!uninst.isEmpty())
uninst.append("\n\t");
uninst.append("-$(DEL_FILE) " + dst);
diff --git a/qmake/generators/win32/winmakefile.cpp b/qmake/generators/win32/winmakefile.cpp
index 2013698c99..6f2f43c03c 100644
--- a/qmake/generators/win32/winmakefile.cpp
+++ b/qmake/generators/win32/winmakefile.cpp
@@ -530,9 +530,8 @@ void Win32MakefileGenerator::writeStandardParts(QTextStream &t)
t << "INSTALL_FILE = " << var("QMAKE_INSTALL_FILE") << endl;
t << "INSTALL_PROGRAM = " << var("QMAKE_INSTALL_PROGRAM") << endl;
t << "INSTALL_DIR = " << var("QMAKE_INSTALL_DIR") << endl;
- t << "QINSTALL_FILE = " << var("QMAKE_QMAKE") << " -install qinstall file" << endl;
- t << "QINSTALL_PROGRAM = " << var("QMAKE_QMAKE") << " -install qinstall program" << endl;
- t << "QINSTALL_DIR = " << var("QMAKE_QMAKE") << " -install qinstall directory" << endl;
+ t << "QINSTALL = " << var("QMAKE_QMAKE") << " -install qinstall" << endl;
+ t << "QINSTALL_PROGRAM = " << var("QMAKE_QMAKE") << " -install qinstall -exe" << endl;
t << endl;
t << "####### Output directory\n\n";
diff --git a/qmake/main.cpp b/qmake/main.cpp
index f25b128d03..13b18d018a 100644
--- a/qmake/main.cpp
+++ b/qmake/main.cpp
@@ -273,7 +273,7 @@ static int installFile(const QString &source, const QString &target, bool exe =
return 0;
}
-static int installDirectory(const QString &source, const QString &target)
+static int installFileOrDirectory(const QString &source, const QString &target)
{
QFileInfo fi(source);
if (false) {
@@ -299,7 +299,7 @@ static int installDirectory(const QString &source, const QString &target)
const QFileInfo &entry = it.fileInfo();
const QString &entryTarget = target + QDir::separator() + entry.fileName();
- const int recursionResult = installDirectory(entry.filePath(), entryTarget);
+ const int recursionResult = installFileOrDirectory(entry.filePath(), entryTarget);
if (recursionResult != 0)
return recursionResult;
}
@@ -313,23 +313,24 @@ static int installDirectory(const QString &source, const QString &target)
static int doQInstall(int argc, char **argv)
{
- if (argc != 3) {
- fprintf(stderr, "Error: this qinstall command requires exactly three arguments (type, source, destination)\n");
+ bool installExecutable = false;
+ if (argc == 3 && !strcmp(argv[0], "-exe")) {
+ installExecutable = true;
+ --argc;
+ ++argv;
+ }
+
+ if (argc != 2 && !installExecutable) {
+ fprintf(stderr, "Error: usage: [-exe] source target\n");
return 3;
}
- const QString source = QString::fromLocal8Bit(argv[1]);
- const QString target = QString::fromLocal8Bit(argv[2]);
+ const QString source = QString::fromLocal8Bit(argv[0]);
+ const QString target = QString::fromLocal8Bit(argv[1]);
- if (!strcmp(argv[0], "file"))
- return installFile(source, target);
- if (!strcmp(argv[0], "program"))
+ if (installExecutable)
return installFile(source, target, /*exe=*/true);
- if (!strcmp(argv[0], "directory"))
- return installDirectory(source, target);
-
- fprintf(stderr, "Error: Unsupported qinstall command type %s\n", argv[0]);
- return 3;
+ return installFileOrDirectory(source, target);
}
diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
index c74e38d997..ccd8ec410e 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
@@ -52,7 +52,8 @@ import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Handler;
import android.os.Looper;
-import android.text.ClipboardManager;
+import android.content.ClipboardManager;
+import android.content.ClipboardManager.OnPrimaryClipChangedListener;
import android.os.Build;
import android.util.Log;
import android.view.ContextMenu;
@@ -584,7 +585,14 @@ public class QtNative
@Override
public void run() {
if (m_activity != null)
- m_clipboardManager = (android.text.ClipboardManager) m_activity.getSystemService(Context.CLIPBOARD_SERVICE);
+ m_clipboardManager = (android.content.ClipboardManager) m_activity.getSystemService(Context.CLIPBOARD_SERVICE);
+ if (m_clipboardManager != null) {
+ m_clipboardManager.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener() {
+ public void onPrimaryClipChanged() {
+ onClipboardDataChanged();
+ }
+ });
+ }
semaphore.release();
}
});
@@ -844,6 +852,10 @@ public class QtNative
public static native void onContextMenuClosed(Menu menu);
// menu methods
+ // clipboard methods
+ public static native void onClipboardDataChanged();
+ // clipboard methods
+
// activity methods
public static native void onActivityResult(int requestCode, int resultCode, Intent data);
public static native void onNewIntent(Intent data);
diff --git a/src/corelib/animation/qabstractanimation.cpp b/src/corelib/animation/qabstractanimation.cpp
index 8c189e9288..2041b8816e 100644
--- a/src/corelib/animation/qabstractanimation.cpp
+++ b/src/corelib/animation/qabstractanimation.cpp
@@ -1484,5 +1484,6 @@ void QAbstractAnimation::updateDirection(QAbstractAnimation::Direction direction
QT_END_NAMESPACE
#include "moc_qabstractanimation.cpp"
+#include "moc_qabstractanimation_p.cpp"
#endif //QT_NO_ANIMATION
diff --git a/src/corelib/doc/snippets/code/src_corelib_io_qdiriterator.cpp b/src/corelib/doc/snippets/code/src_corelib_io_qdiriterator.cpp
index 7a6ffeae06..31442a5516 100644
--- a/src/corelib/doc/snippets/code/src_corelib_io_qdiriterator.cpp
+++ b/src/corelib/doc/snippets/code/src_corelib_io_qdiriterator.cpp
@@ -60,3 +60,12 @@ while (it.hasNext()) {
// ...
}
//! [0]
+
+//! [1]
+QDirIterator it("/sys", QStringList() << "scaling_cur_freq", QDir::NoFilter, QDirIterator::Subdirectories);
+while (it.hasNext()) {
+ QFile f(it.next());
+ f.open(QIODevice::ReadOnly);
+ qDebug() << f.fileName() << f.readAll().trimmed().toDouble() / 1000 << "MHz";
+}
+//! [1]
diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp
index c37503f3db..22fc20d47e 100644
--- a/src/corelib/global/qglobal.cpp
+++ b/src/corelib/global/qglobal.cpp
@@ -3988,8 +3988,10 @@ bool QInternal::registerCallback(Callback cb, qInternalCallback callback)
bool QInternal::unregisterCallback(Callback cb, qInternalCallback callback)
{
if (cb >= 0 && cb < QInternal::LastCallback) {
- QInternal_CallBackTable *cbt = global_callback_table();
- return (bool) cbt->callbacks[cb].removeAll(callback);
+ if (global_callback_table.exists()) {
+ QInternal_CallBackTable *cbt = global_callback_table();
+ return (bool) cbt->callbacks[cb].removeAll(callback);
+ }
}
return false;
}
diff --git a/src/corelib/global/qnamespace.qdoc b/src/corelib/global/qnamespace.qdoc
index 404bbfe65a..463a9936f6 100644
--- a/src/corelib/global/qnamespace.qdoc
+++ b/src/corelib/global/qnamespace.qdoc
@@ -203,7 +203,7 @@
\value AA_SetPalette Indicates whether a palette was explicitly set on the
QApplication/QGuiApplication. This value has been added in Qt 5.5.
- \value AA_EnableHighDpiScaling. Enables high-DPI scaling in Qt on supported
+ \value AA_EnableHighDpiScaling Enables high-DPI scaling in Qt on supported
platforms (see also \l{High DPI Displays}). Supported platforms are
X11, Windows and Android. Enabling makes Qt scale the main (device
independent) coordinate system according to display scale factors
diff --git a/src/corelib/io/qdiriterator.cpp b/src/corelib/io/qdiriterator.cpp
index 5fd9edc552..648593b020 100644
--- a/src/corelib/io/qdiriterator.cpp
+++ b/src/corelib/io/qdiriterator.cpp
@@ -56,6 +56,10 @@
\snippet code/src_corelib_io_qdiriterator.cpp 0
+ Here's how to find and read all files filtered by name, recursively:
+
+ \snippet code/src_corelib_io_qdiriterator.cpp 1
+
The next() function returns the path to the next directory entry and
advances the iterator. You can also call filePath() to get the current
file path without advancing the iterator. The fileName() function returns
@@ -204,6 +208,8 @@ void QDirIteratorPrivate::pushDirectory(const QFileInfo &fileInfo)
QFileSystemIterator *it = new QFileSystemIterator(fileInfo.d_ptr->fileEntry,
filters, nameFilters, iteratorFlags);
nativeIterators << it;
+#else
+ qWarning("Qt was built with -no-feature-filesystemiterator: no files/plugins will be found!");
#endif
}
}
diff --git a/src/corelib/io/qfile.cpp b/src/corelib/io/qfile.cpp
index 41fae69bb2..06d706b915 100644
--- a/src/corelib/io/qfile.cpp
+++ b/src/corelib/io/qfile.cpp
@@ -1106,3 +1106,7 @@ qint64 QFile::size() const
}
QT_END_NAMESPACE
+
+#ifndef QT_NO_QOBJECT
+#include "moc_qfile.cpp"
+#endif
diff --git a/src/corelib/io/qfiledevice.cpp b/src/corelib/io/qfiledevice.cpp
index ce9c8275ce..715dc7293a 100644
--- a/src/corelib/io/qfiledevice.cpp
+++ b/src/corelib/io/qfiledevice.cpp
@@ -739,3 +739,7 @@ bool QFileDevice::unmap(uchar *address)
}
QT_END_NAMESPACE
+
+#ifndef QT_NO_QOBJECT
+#include "moc_qfiledevice.cpp"
+#endif
diff --git a/src/corelib/io/qfilesystemwatcher.cpp b/src/corelib/io/qfilesystemwatcher.cpp
index 612b3fa57c..ed597c415b 100644
--- a/src/corelib/io/qfilesystemwatcher.cpp
+++ b/src/corelib/io/qfilesystemwatcher.cpp
@@ -497,6 +497,7 @@ QStringList QFileSystemWatcher::files() const
QT_END_NAMESPACE
#include "moc_qfilesystemwatcher.cpp"
+#include "moc_qfilesystemwatcher_p.cpp"
#endif // QT_NO_FILESYSTEMWATCHER
diff --git a/src/corelib/io/qfilesystemwatcher_inotify.cpp b/src/corelib/io/qfilesystemwatcher_inotify.cpp
index 5564bc7dca..3cfc6a254f 100644
--- a/src/corelib/io/qfilesystemwatcher_inotify.cpp
+++ b/src/corelib/io/qfilesystemwatcher_inotify.cpp
@@ -417,4 +417,6 @@ QString QInotifyFileSystemWatcherEngine::getPathFromID(int id) const
QT_END_NAMESPACE
+#include "moc_qfilesystemwatcher_inotify_p.cpp"
+
#endif // QT_NO_FILESYSTEMWATCHER
diff --git a/src/corelib/io/qfilesystemwatcher_polling.cpp b/src/corelib/io/qfilesystemwatcher_polling.cpp
index cbcb68e7d2..5bef8127f7 100644
--- a/src/corelib/io/qfilesystemwatcher_polling.cpp
+++ b/src/corelib/io/qfilesystemwatcher_polling.cpp
@@ -151,4 +151,7 @@ void QPollingFileSystemWatcherEngine::timeout()
}
QT_END_NAMESPACE
+
+#include "moc_qfilesystemwatcher_polling_p.cpp"
+
#endif // !QT_NO_FILESYSTEMWATCHER
diff --git a/src/corelib/io/qiodevice.cpp b/src/corelib/io/qiodevice.cpp
index 41a4d7a1ba..80122eac5e 100644
--- a/src/corelib/io/qiodevice.cpp
+++ b/src/corelib/io/qiodevice.cpp
@@ -2059,3 +2059,7 @@ QDebug operator<<(QDebug debug, QIODevice::OpenMode modes)
#endif
QT_END_NAMESPACE
+
+#ifndef QT_NO_QOBJECT
+#include "moc_qiodevice.cpp"
+#endif
diff --git a/src/corelib/io/qnoncontiguousbytedevice.cpp b/src/corelib/io/qnoncontiguousbytedevice.cpp
index 61299b8aa8..beca6ccbf7 100644
--- a/src/corelib/io/qnoncontiguousbytedevice.cpp
+++ b/src/corelib/io/qnoncontiguousbytedevice.cpp
@@ -578,3 +578,4 @@ QIODevice* QNonContiguousByteDeviceFactory::wrap(QNonContiguousByteDevice* byteD
QT_END_NAMESPACE
+#include "moc_qnoncontiguousbytedevice_p.cpp"
diff --git a/src/corelib/io/qsavefile.cpp b/src/corelib/io/qsavefile.cpp
index d8166014db..0283c5f31f 100644
--- a/src/corelib/io/qsavefile.cpp
+++ b/src/corelib/io/qsavefile.cpp
@@ -412,4 +412,8 @@ bool QSaveFile::directWriteFallback() const
QT_END_NAMESPACE
+#ifndef QT_NO_QOBJECT
+#include "moc_qsavefile.cpp"
+#endif
+
#endif // QT_NO_TEMPORARYFILE
diff --git a/src/corelib/io/qsettings.cpp b/src/corelib/io/qsettings.cpp
index 16dab38a60..d5460238ec 100644
--- a/src/corelib/io/qsettings.cpp
+++ b/src/corelib/io/qsettings.cpp
@@ -3513,4 +3513,8 @@ QSettings::Format QSettings::registerFormat(const QString &extension, ReadFunc r
QT_END_NAMESPACE
+#ifndef QT_BOOTSTRAPPED
+#include "moc_qsettings.cpp"
+#endif
+
#endif // QT_NO_SETTINGS
diff --git a/src/corelib/io/qstandardpaths.cpp b/src/corelib/io/qstandardpaths.cpp
index 4cf3a3e9bd..f2368c3b23 100644
--- a/src/corelib/io/qstandardpaths.cpp
+++ b/src/corelib/io/qstandardpaths.cpp
@@ -645,4 +645,8 @@ bool QStandardPaths::isTestModeEnabled()
QT_END_NAMESPACE
+#ifndef QT_NO_QOBJECT
+#include "moc_qstandardpaths.cpp"
+#endif
+
#endif // QT_NO_STANDARDPATHS
diff --git a/src/corelib/io/qtemporarydir.cpp b/src/corelib/io/qtemporarydir.cpp
index b2bf9fce97..ffaee9c683 100644
--- a/src/corelib/io/qtemporarydir.cpp
+++ b/src/corelib/io/qtemporarydir.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2017 The Qt Company Ltd.
** Copyright (C) 2016 Intel Corporation.
** Contact: https://www.qt.io/licensing/
**
@@ -198,10 +198,10 @@ void QTemporaryDirPrivate::create(const QString &templateName)
\ingroup io
- QTemporaryDir is used to create unique temporary dirs safely.
- The dir itself is created by the constructor. The name of the
+ QTemporaryDir is used to create unique temporary directories safely.
+ The directory itself is created by the constructor. The name of the
temporary directory is guaranteed to be unique (i.e., you are
- guaranteed to not overwrite an existing dir), and the directory will
+ guaranteed to not overwrite an existing directory), and the directory will
subsequently be removed upon destruction of the QTemporaryDir
object. The directory name is either auto-generated, or created based
on a template, which is passed to QTemporaryDir's constructor.
@@ -214,7 +214,7 @@ void QTemporaryDirPrivate::create(const QString &templateName)
created, using isValid(). Do not use \l {QDir::exists()}{exists()}, since a default-constructed
QDir represents the current directory, which exists.
- The path to the temporary dir can be found by calling path().
+ The path to the temporary directory can be found by calling path().
A temporary directory will have some static part of the name and some
part that is calculated to be unique. The default path will be
diff --git a/src/corelib/io/qtemporaryfile.cpp b/src/corelib/io/qtemporaryfile.cpp
index 7aae128796..8a99873fee 100644
--- a/src/corelib/io/qtemporaryfile.cpp
+++ b/src/corelib/io/qtemporaryfile.cpp
@@ -796,4 +796,6 @@ QT_END_NAMESPACE
#endif // QT_NO_TEMPORARYFILE
-
+#ifndef QT_NO_QOBJECT
+#include "moc_qtemporaryfile.cpp"
+#endif
diff --git a/src/corelib/io/qtextstream.cpp b/src/corelib/io/qtextstream.cpp
index 9b565bff9d..5144ac0ec9 100644
--- a/src/corelib/io/qtextstream.cpp
+++ b/src/corelib/io/qtextstream.cpp
@@ -3188,3 +3188,6 @@ QLocale QTextStream::locale() const
QT_END_NAMESPACE
+#ifndef QT_NO_QOBJECT
+#include "moc_qtextstream_p.cpp"
+#endif
diff --git a/src/corelib/itemmodels/qabstractitemmodel.cpp b/src/corelib/itemmodels/qabstractitemmodel.cpp
index 0c87dd5659..c0737ffb36 100644
--- a/src/corelib/itemmodels/qabstractitemmodel.cpp
+++ b/src/corelib/itemmodels/qabstractitemmodel.cpp
@@ -3804,3 +3804,5 @@ void QAbstractItemModelPrivate::Persistent::insertMultiAtEnd(const QModelIndex&
}
QT_END_NAMESPACE
+
+#include "moc_qabstractitemmodel.cpp"
diff --git a/src/corelib/itemmodels/qitemselectionmodel.cpp b/src/corelib/itemmodels/qitemselectionmodel.cpp
index 74bd7abfcb..2ff311bc5a 100644
--- a/src/corelib/itemmodels/qitemselectionmodel.cpp
+++ b/src/corelib/itemmodels/qitemselectionmodel.cpp
@@ -945,13 +945,14 @@ static QItemSelection mergeRowLengths(const QVector<QPair<QPersistentModelIndex,
const uint nextLength = rowLengths.at(i).second;
if ((nextLength == length)
&& (next.row() == br.row() + 1)
+ && (next.column() == br.column())
&& (next.parent() == br.parent())) {
br = next;
} else {
break;
}
}
- result.append(QItemSelectionRange(tl, br.sibling(br.row(), length - 1)));
+ result.append(QItemSelectionRange(tl, br.sibling(br.row(), br.column() + length - 1)));
}
return result;
}
diff --git a/src/corelib/itemmodels/qstringlistmodel.cpp b/src/corelib/itemmodels/qstringlistmodel.cpp
index 0f7472aa5a..2b47d43469 100644
--- a/src/corelib/itemmodels/qstringlistmodel.cpp
+++ b/src/corelib/itemmodels/qstringlistmodel.cpp
@@ -328,4 +328,6 @@ Qt::DropActions QStringListModel::supportedDropActions() const
QT_END_NAMESPACE
+#include "moc_qstringlistmodel.cpp"
+
#endif // QT_NO_STRINGLISTMODEL
diff --git a/src/corelib/kernel/qabstracteventdispatcher.cpp b/src/corelib/kernel/qabstracteventdispatcher.cpp
index e94faa4587..d234949d14 100644
--- a/src/corelib/kernel/qabstracteventdispatcher.cpp
+++ b/src/corelib/kernel/qabstracteventdispatcher.cpp
@@ -521,3 +521,5 @@ bool QAbstractEventDispatcher::filterNativeEvent(const QByteArray &eventType, vo
*/
QT_END_NAMESPACE
+
+#include "moc_qabstracteventdispatcher.cpp"
diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp
index 0104ba0101..39e7c71a9c 100644
--- a/src/corelib/kernel/qcoreapplication.cpp
+++ b/src/corelib/kernel/qcoreapplication.cpp
@@ -2914,3 +2914,7 @@ void QCoreApplication::setEventDispatcher(QAbstractEventDispatcher *eventDispatc
*/
QT_END_NAMESPACE
+
+#ifndef QT_NO_QOBJECT
+#include "moc_qcoreapplication.cpp"
+#endif
diff --git a/src/corelib/kernel/qcoreevent.cpp b/src/corelib/kernel/qcoreevent.cpp
index 4efc38ac89..e90cd842ab 100644
--- a/src/corelib/kernel/qcoreevent.cpp
+++ b/src/corelib/kernel/qcoreevent.cpp
@@ -652,3 +652,5 @@ QDeferredDeleteEvent::~QDeferredDeleteEvent()
*/
QT_END_NAMESPACE
+
+#include "moc_qcoreevent.cpp"
diff --git a/src/corelib/kernel/qeventdispatcher_glib.cpp b/src/corelib/kernel/qeventdispatcher_glib.cpp
index 8ca2ac1c39..8cefa7a118 100644
--- a/src/corelib/kernel/qeventdispatcher_glib.cpp
+++ b/src/corelib/kernel/qeventdispatcher_glib.cpp
@@ -611,3 +611,5 @@ QEventDispatcherGlib::QEventDispatcherGlib(QEventDispatcherGlibPrivate &dd, QObj
}
QT_END_NAMESPACE
+
+#include "moc_qeventdispatcher_glib_p.cpp"
diff --git a/src/corelib/kernel/qeventdispatcher_unix.cpp b/src/corelib/kernel/qeventdispatcher_unix.cpp
index 802962d77d..a28f2e3f0a 100644
--- a/src/corelib/kernel/qeventdispatcher_unix.cpp
+++ b/src/corelib/kernel/qeventdispatcher_unix.cpp
@@ -553,3 +553,5 @@ void QEventDispatcherUNIX::flush()
{ }
QT_END_NAMESPACE
+
+#include "moc_qeventdispatcher_unix_p.cpp"
diff --git a/src/corelib/kernel/qeventdispatcher_win.cpp b/src/corelib/kernel/qeventdispatcher_win.cpp
index 40db5020ab..0952464f53 100644
--- a/src/corelib/kernel/qeventdispatcher_win.cpp
+++ b/src/corelib/kernel/qeventdispatcher_win.cpp
@@ -860,7 +860,7 @@ bool QEventDispatcherWin32::unregisterTimers(QObject *object)
Q_D(QEventDispatcherWin32);
if (d->timerVec.isEmpty())
return false;
- register WinTimerInfo *t;
+ WinTimerInfo *t;
for (int i=0; i<d->timerVec.size(); i++) {
t = d->timerVec.at(i);
if (t && t->obj == object) { // object found
@@ -957,7 +957,7 @@ int QEventDispatcherWin32::remainingTime(int timerId)
quint64 currentTime = qt_msectime();
- register WinTimerInfo *t;
+ WinTimerInfo *t;
for (int i=0; i<d->timerVec.size(); i++) {
t = d->timerVec.at(i);
if (t && t->timerId == timerId) { // timer found
diff --git a/src/corelib/kernel/qeventloop.cpp b/src/corelib/kernel/qeventloop.cpp
index e4b819d9d2..8974ff7709 100644
--- a/src/corelib/kernel/qeventloop.cpp
+++ b/src/corelib/kernel/qeventloop.cpp
@@ -441,3 +441,5 @@ QEventLoopLocker::~QEventLoopLocker()
}
QT_END_NAMESPACE
+
+#include "moc_qeventloop.cpp"
diff --git a/src/corelib/kernel/qmimedata.cpp b/src/corelib/kernel/qmimedata.cpp
index a550ca6ca1..73307e925a 100644
--- a/src/corelib/kernel/qmimedata.cpp
+++ b/src/corelib/kernel/qmimedata.cpp
@@ -678,3 +678,5 @@ void QMimeData::removeFormat(const QString &mimeType)
}
QT_END_NAMESPACE
+
+#include "moc_qmimedata.cpp"
diff --git a/src/corelib/kernel/qobjectcleanuphandler.cpp b/src/corelib/kernel/qobjectcleanuphandler.cpp
index f3d23c4b44..b6c62af4b3 100644
--- a/src/corelib/kernel/qobjectcleanuphandler.cpp
+++ b/src/corelib/kernel/qobjectcleanuphandler.cpp
@@ -145,3 +145,5 @@ void QObjectCleanupHandler::objectDestroyed(QObject *object)
}
QT_END_NAMESPACE
+
+#include "moc_qobjectcleanuphandler.cpp"
diff --git a/src/corelib/kernel/qobjectdefs_impl.h b/src/corelib/kernel/qobjectdefs_impl.h
index 3f5f2e78bb..29ab77b269 100644
--- a/src/corelib/kernel/qobjectdefs_impl.h
+++ b/src/corelib/kernel/qobjectdefs_impl.h
@@ -201,7 +201,6 @@ namespace QtPrivate {
typedef List<Args...> Arguments;
typedef Ret ReturnType;
typedef Ret (Obj::*Function) (Args...) noexcept;
- template <class Base> struct ChangeClass { typedef Ret (Base:: *Type)(Args...) noexcept; };
enum {ArgumentCount = sizeof...(Args), IsPointerToMemberFunction = true};
template <typename SignalArgs, typename R>
static void call(Function f, Obj *o, void **arg) {
@@ -214,7 +213,6 @@ namespace QtPrivate {
typedef List<Args...> Arguments;
typedef Ret ReturnType;
typedef Ret (Obj::*Function) (Args...) const noexcept;
- template <class Base> struct ChangeClass { typedef Ret (Base:: *Type)(Args...) const noexcept; };
enum {ArgumentCount = sizeof...(Args), IsPointerToMemberFunction = true};
template <typename SignalArgs, typename R>
static void call(Function f, Obj *o, void **arg) {
@@ -300,7 +298,7 @@ namespace QtPrivate {
static const typename RemoveRef<A1>::Type &dummy();
enum { value = sizeof(test(dummy())) == sizeof(int) };
#ifdef QT_NO_NARROWING_CONVERSIONS_IN_CONNECT
- struct AreArgumentsNarrowed : AreArgumentsNarrowedBase<typename RemoveRef<A1>::Type, typename RemoveRef<A2>::Type> {};
+ using AreArgumentsNarrowed = AreArgumentsNarrowedBase<typename RemoveRef<A1>::Type, typename RemoveRef<A2>::Type>;
Q_STATIC_ASSERT_X(!AreArgumentsNarrowed::value, "Signal and slot arguments are not compatible (narrowing)");
#endif
};
diff --git a/src/corelib/kernel/qsharedmemory.cpp b/src/corelib/kernel/qsharedmemory.cpp
index 29b3e87076..7f185ee9dc 100644
--- a/src/corelib/kernel/qsharedmemory.cpp
+++ b/src/corelib/kernel/qsharedmemory.cpp
@@ -598,3 +598,5 @@ QString QSharedMemory::errorString() const
#endif // QT_NO_SHAREDMEMORY
QT_END_NAMESPACE
+
+#include "moc_qsharedmemory.cpp"
diff --git a/src/corelib/kernel/qsocketnotifier.cpp b/src/corelib/kernel/qsocketnotifier.cpp
index 933eac19ab..2268cb83bb 100644
--- a/src/corelib/kernel/qsocketnotifier.cpp
+++ b/src/corelib/kernel/qsocketnotifier.cpp
@@ -270,3 +270,5 @@ bool QSocketNotifier::event(QEvent *e)
}
QT_END_NAMESPACE
+
+#include "moc_qsocketnotifier.cpp"
diff --git a/src/corelib/kernel/qtimer.cpp b/src/corelib/kernel/qtimer.cpp
index 0c314526cb..55f75ab17e 100644
--- a/src/corelib/kernel/qtimer.cpp
+++ b/src/corelib/kernel/qtimer.cpp
@@ -670,3 +670,4 @@ int QTimer::remainingTime() const
QT_END_NAMESPACE
#include "qtimer.moc"
+#include "moc_qtimer.cpp"
diff --git a/src/corelib/kernel/qtranslator.cpp b/src/corelib/kernel/qtranslator.cpp
index 04a5e7ed7a..2232e24a25 100644
--- a/src/corelib/kernel/qtranslator.cpp
+++ b/src/corelib/kernel/qtranslator.cpp
@@ -1143,4 +1143,6 @@ bool QTranslator::isEmpty() const
QT_END_NAMESPACE
+#include "moc_qtranslator.cpp"
+
#endif // QT_NO_TRANSLATION
diff --git a/src/corelib/plugin/qfactoryloader.cpp b/src/corelib/plugin/qfactoryloader.cpp
index 21f1007d5b..40000e7b24 100644
--- a/src/corelib/plugin/qfactoryloader.cpp
+++ b/src/corelib/plugin/qfactoryloader.cpp
@@ -346,4 +346,6 @@ int QFactoryLoader::indexOf(const QString &needle) const
QT_END_NAMESPACE
+#include "moc_qfactoryloader_p.cpp"
+
#endif // QT_NO_QOBJECT
diff --git a/src/corelib/plugin/qlibrary.cpp b/src/corelib/plugin/qlibrary.cpp
index 6421e7c5d8..3d04d0802d 100644
--- a/src/corelib/plugin/qlibrary.cpp
+++ b/src/corelib/plugin/qlibrary.cpp
@@ -1129,3 +1129,5 @@ bool qt_debug_component()
}
QT_END_NAMESPACE
+
+#include "moc_qlibrary.cpp"
diff --git a/src/corelib/plugin/qpluginloader.cpp b/src/corelib/plugin/qpluginloader.cpp
index dbd3bee556..aab00cc7eb 100644
--- a/src/corelib/plugin/qpluginloader.cpp
+++ b/src/corelib/plugin/qpluginloader.cpp
@@ -479,3 +479,4 @@ QJsonObject QStaticPlugin::metaData() const
QT_END_NAMESPACE
+#include "moc_qpluginloader.cpp"
diff --git a/src/corelib/statemachine/qabstractstate.cpp b/src/corelib/statemachine/qabstractstate.cpp
index 13bf41faa9..1a9ad4601d 100644
--- a/src/corelib/statemachine/qabstractstate.cpp
+++ b/src/corelib/statemachine/qabstractstate.cpp
@@ -234,3 +234,5 @@ bool QAbstractState::event(QEvent *e)
}
QT_END_NAMESPACE
+
+#include "moc_qabstractstate.cpp"
diff --git a/src/corelib/statemachine/qabstracttransition.cpp b/src/corelib/statemachine/qabstracttransition.cpp
index 8c30d5f11c..53c713d6a8 100644
--- a/src/corelib/statemachine/qabstracttransition.cpp
+++ b/src/corelib/statemachine/qabstracttransition.cpp
@@ -431,3 +431,5 @@ bool QAbstractTransition::event(QEvent *e)
}
QT_END_NAMESPACE
+
+#include "moc_qabstracttransition.cpp"
diff --git a/src/corelib/statemachine/qeventtransition.cpp b/src/corelib/statemachine/qeventtransition.cpp
index cd0cfe2f85..a90f147773 100644
--- a/src/corelib/statemachine/qeventtransition.cpp
+++ b/src/corelib/statemachine/qeventtransition.cpp
@@ -252,3 +252,5 @@ bool QEventTransition::event(QEvent *e)
}
QT_END_NAMESPACE
+
+#include "moc_qeventtransition.cpp"
diff --git a/src/corelib/statemachine/qfinalstate.cpp b/src/corelib/statemachine/qfinalstate.cpp
index bef9fc4239..d8bfd30974 100644
--- a/src/corelib/statemachine/qfinalstate.cpp
+++ b/src/corelib/statemachine/qfinalstate.cpp
@@ -137,3 +137,5 @@ bool QFinalState::event(QEvent *e)
}
QT_END_NAMESPACE
+
+#include "moc_qfinalstate.cpp"
diff --git a/src/corelib/statemachine/qhistorystate.cpp b/src/corelib/statemachine/qhistorystate.cpp
index b1c5a92d00..a179d7c75b 100644
--- a/src/corelib/statemachine/qhistorystate.cpp
+++ b/src/corelib/statemachine/qhistorystate.cpp
@@ -310,3 +310,6 @@ bool QHistoryState::event(QEvent *e)
*/
QT_END_NAMESPACE
+
+#include "moc_qhistorystate.cpp"
+#include "moc_qhistorystate_p.cpp"
diff --git a/src/corelib/statemachine/qsignaltransition.cpp b/src/corelib/statemachine/qsignaltransition.cpp
index 3b219bda53..c05b4617b2 100644
--- a/src/corelib/statemachine/qsignaltransition.cpp
+++ b/src/corelib/statemachine/qsignaltransition.cpp
@@ -284,3 +284,5 @@ void QSignalTransitionPrivate::callOnTransition(QEvent *e)
QT_END_NAMESPACE
+
+#include "moc_qsignaltransition.cpp"
diff --git a/src/corelib/statemachine/qstate.cpp b/src/corelib/statemachine/qstate.cpp
index 48456424cf..76dcbf784b 100644
--- a/src/corelib/statemachine/qstate.cpp
+++ b/src/corelib/statemachine/qstate.cpp
@@ -599,3 +599,5 @@ bool QState::event(QEvent *e)
*/
QT_END_NAMESPACE
+
+#include "moc_qstate.cpp"
diff --git a/src/corelib/thread/qfuturewatcher.cpp b/src/corelib/thread/qfuturewatcher.cpp
index aa6f00c317..d2ec18850f 100644
--- a/src/corelib/thread/qfuturewatcher.cpp
+++ b/src/corelib/thread/qfuturewatcher.cpp
@@ -592,4 +592,6 @@ void QFutureWatcherBasePrivate::sendCallOutEvent(QFutureCallOutEvent *event)
QT_END_NAMESPACE
+#include "moc_qfuturewatcher.cpp"
+
#endif // QT_NO_QFUTURE
diff --git a/src/corelib/thread/qthread.cpp b/src/corelib/thread/qthread.cpp
index 0828400733..996a1df9a0 100644
--- a/src/corelib/thread/qthread.cpp
+++ b/src/corelib/thread/qthread.cpp
@@ -901,3 +901,5 @@ QDaemonThread::~QDaemonThread()
}
QT_END_NAMESPACE
+
+#include "moc_qthread.cpp"
diff --git a/src/corelib/thread/qthreadpool.cpp b/src/corelib/thread/qthreadpool.cpp
index e45aaec103..f3ce1f258f 100644
--- a/src/corelib/thread/qthreadpool.cpp
+++ b/src/corelib/thread/qthreadpool.cpp
@@ -679,4 +679,6 @@ void QThreadPool::cancel(QRunnable *runnable)
QT_END_NAMESPACE
+#include "moc_qthreadpool.cpp"
+
#endif
diff --git a/src/corelib/tools/qcryptographichash.cpp b/src/corelib/tools/qcryptographichash.cpp
index 963a91b9a9..5410adc737 100644
--- a/src/corelib/tools/qcryptographichash.cpp
+++ b/src/corelib/tools/qcryptographichash.cpp
@@ -494,3 +494,7 @@ QByteArray QCryptographicHash::hash(const QByteArray &data, Algorithm method)
}
QT_END_NAMESPACE
+
+#ifndef QT_NO_QOBJECT
+#include "moc_qcryptographichash.cpp"
+#endif
diff --git a/src/corelib/tools/qeasingcurve.cpp b/src/corelib/tools/qeasingcurve.cpp
index 4b5f5e7830..03bb1a1411 100644
--- a/src/corelib/tools/qeasingcurve.cpp
+++ b/src/corelib/tools/qeasingcurve.cpp
@@ -1501,3 +1501,5 @@ QDataStream &operator>>(QDataStream &stream, QEasingCurve &easing)
#endif // QT_NO_DATASTREAM
QT_END_NAMESPACE
+
+#include "moc_qeasingcurve.cpp"
diff --git a/src/corelib/tools/qhash.h b/src/corelib/tools/qhash.h
index c59f789cb2..b2c3cf574d 100644
--- a/src/corelib/tools/qhash.h
+++ b/src/corelib/tools/qhash.h
@@ -51,6 +51,8 @@
#include <initializer_list>
#endif
+#include <algorithm>
+
#if defined(Q_CC_MSVC)
#pragma warning( push )
#pragma warning( disable : 4311 ) // disable pointer truncation warning
@@ -936,18 +938,24 @@ Q_OUTOFLINE_TEMPLATE bool QHash<Key, T>::operator==(const QHash &other) const
const_iterator it = begin();
while (it != end()) {
- const Key &akey = it.key();
+ // Build two equal ranges for i.key(); one for *this and one for other.
+ // For *this we can avoid a lookup via equal_range, as we know the beginning of the range.
+ auto thisEqualRangeEnd = it;
+ while (thisEqualRangeEnd != end() && it.key() == thisEqualRangeEnd.key())
+ ++thisEqualRangeEnd;
- const_iterator it2 = other.find(akey);
- do {
- if (it2 == other.end() || !(it2.key() == akey))
- return false;
- if (!(it.value() == it2.value()))
- return false;
- ++it;
- ++it2;
- } while (it != end() && it.key() == akey);
+ const auto otherEqualRange = other.equal_range(it.key());
+
+ if (std::distance(it, thisEqualRangeEnd) != std::distance(otherEqualRange.first, otherEqualRange.second))
+ return false;
+
+ // Keys in the ranges are equal by construction; this checks only the values.
+ if (!std::is_permutation(it, thisEqualRangeEnd, otherEqualRange.first))
+ return false;
+
+ it = thisEqualRangeEnd;
}
+
return true;
}
diff --git a/src/corelib/tools/qlocale.cpp b/src/corelib/tools/qlocale.cpp
index 697e0062dd..dcdf6b5ed7 100644
--- a/src/corelib/tools/qlocale.cpp
+++ b/src/corelib/tools/qlocale.cpp
@@ -3005,14 +3005,18 @@ QString QLocaleData::unsLongLongToString(const QChar zero, const QChar group,
int base, int width,
unsigned flags)
{
+ const QChar resultZero = base == 10 ? zero : QChar(QLatin1Char('0'));
+ QString num_str = l ? qulltoa(l, base, zero) : QString(resultZero);
+
bool precision_not_specified = false;
if (precision == -1) {
+ if (flags == NoFlags)
+ return num_str; // fast-path: nothing below applies, so we're done.
+
precision_not_specified = true;
precision = 1;
}
- QString num_str = qulltoa(l, base, zero);
-
uint cnt_thousand_sep = 0;
if (flags & ThousandsGroup && base == 10) {
for (int i = num_str.length() - 3; i > 0; i -=3) {
@@ -3021,7 +3025,6 @@ QString QLocaleData::unsLongLongToString(const QChar zero, const QChar group,
}
}
- const QChar resultZero = base == 10 ? zero : QChar(QLatin1Char('0'));
const int zeroPadding = precision - num_str.length()/* + cnt_thousand_sep*/;
if (zeroPadding > 0)
num_str.prepend(QString(zeroPadding, resultZero));
@@ -3665,3 +3668,7 @@ QDebug operator<<(QDebug dbg, const QLocale &l)
}
#endif
QT_END_NAMESPACE
+
+#ifndef QT_NO_QOBJECT
+#include "moc_qlocale.cpp"
+#endif
diff --git a/src/corelib/tools/qtimeline.cpp b/src/corelib/tools/qtimeline.cpp
index adbc2900e3..e70e7f8e16 100644
--- a/src/corelib/tools/qtimeline.cpp
+++ b/src/corelib/tools/qtimeline.cpp
@@ -784,3 +784,5 @@ void QTimeLine::timerEvent(QTimerEvent *event)
}
QT_END_NAMESPACE
+
+#include "moc_qtimeline.cpp"
diff --git a/src/gui/painting/qpainterpath.cpp b/src/gui/painting/qpainterpath.cpp
index 7dbc83b338..27bd2e59e6 100644
--- a/src/gui/painting/qpainterpath.cpp
+++ b/src/gui/painting/qpainterpath.cpp
@@ -1981,6 +1981,17 @@ static bool qt_isect_curve_vertical(const QBezier &bezier, qreal x, qreal y1, qr
return false;
}
+static bool pointOnEdge(const QRectF &rect, const QPointF &point)
+{
+ if ((point.x() == rect.left() || point.x() == rect.right()) &&
+ (point.y() >= rect.top() && point.y() <= rect.bottom()))
+ return true;
+ if ((point.y() == rect.top() || point.y() == rect.bottom()) &&
+ (point.x() >= rect.left() && point.x() <= rect.right()))
+ return true;
+ return false;
+}
+
/*
Returns \c true if any lines or curves cross the four edges in of rect
*/
@@ -1988,6 +1999,7 @@ static bool qt_painterpath_check_crossing(const QPainterPath *path, const QRectF
{
QPointF last_pt;
QPointF last_start;
+ enum { OnRect, InsideRect, OutsideRect} edgeStatus = OnRect;
for (int i=0; i<path->elementCount(); ++i) {
const QPainterPath::Element &e = path->elementAt(i);
@@ -2026,6 +2038,27 @@ static bool qt_painterpath_check_crossing(const QPainterPath *path, const QRectF
default:
break;
}
+ // Handle crossing the edges of the rect at the end-points of individual sub-paths.
+ // A point on on the edge itself is considered neither inside nor outside for this purpose.
+ if (!pointOnEdge(rect, last_pt)) {
+ bool contained = rect.contains(last_pt);
+ switch (edgeStatus) {
+ case OutsideRect:
+ if (contained)
+ return true;
+ break;
+ case InsideRect:
+ if (!contained)
+ return true;
+ break;
+ case OnRect:
+ edgeStatus = contained ? InsideRect : OutsideRect;
+ break;
+ }
+ } else {
+ if (last_pt == last_start)
+ edgeStatus = OnRect;
+ }
}
// implicitly close last subpath
diff --git a/src/network/access/qhttp2protocolhandler.cpp b/src/network/access/qhttp2protocolhandler.cpp
index 555f1ba0ef..44ab637da8 100644
--- a/src/network/access/qhttp2protocolhandler.cpp
+++ b/src/network/access/qhttp2protocolhandler.cpp
@@ -528,7 +528,7 @@ void QHttp2ProtocolHandler::handleDATA()
auto &stream = activeStreams[streamID];
if (qint32(inboundFrame.payloadSize()) > stream.recvWindow) {
- finishStreamWithError(stream, QNetworkReply::ProtocolInvalidOperationError,
+ finishStreamWithError(stream, QNetworkReply::ProtocolFailure,
QLatin1String("flow control error"));
sendRST_STREAM(streamID, FLOW_CONTROL_ERROR);
markAsReset(streamID);
@@ -834,7 +834,7 @@ void QHttp2ProtocolHandler::handleWINDOW_UPDATE()
}
auto &stream = activeStreams[streamID];
if (!valid || sum_will_overflow(stream.sendWindow, delta)) {
- finishStreamWithError(stream, QNetworkReply::ProtocolInvalidOperationError,
+ finishStreamWithError(stream, QNetworkReply::ProtocolFailure,
QLatin1String("invalid WINDOW_UPDATE delta"));
sendRST_STREAM(streamID, PROTOCOL_ERROR);
markAsReset(streamID);
@@ -888,7 +888,7 @@ void QHttp2ProtocolHandler::handleContinuedHEADERS()
// We can receive HEADERS on streams initiated by our requests
// (these streams are in halfClosedLocal state) or remote-reserved
// streams from a server's PUSH_PROMISE.
- finishStreamWithError(stream, QNetworkReply::ProtocolInvalidOperationError,
+ finishStreamWithError(stream, QNetworkReply::ProtocolFailure,
QLatin1String("HEADERS on invalid stream"));
sendRST_STREAM(streamID, CANCEL);
markAsReset(streamID);
@@ -977,7 +977,7 @@ bool QHttp2ProtocolHandler::acceptSetting(Http2::Settings identifier, quint32 ne
for (auto id : brokenStreams) {
auto &stream = activeStreams[id];
- finishStreamWithError(stream, QNetworkReply::ProtocolInvalidOperationError,
+ finishStreamWithError(stream, QNetworkReply::ProtocolFailure,
QLatin1String("SETTINGS window overflow"));
sendRST_STREAM(id, PROTOCOL_ERROR);
markAsReset(id);
diff --git a/src/network/doc/src/bearermanagement.qdoc b/src/network/doc/src/bearermanagement.qdoc
index 52b5958996..f8d6a807d2 100644
--- a/src/network/doc/src/bearermanagement.qdoc
+++ b/src/network/doc/src/bearermanagement.qdoc
@@ -235,33 +235,6 @@ QNetworkSession is the central class for managing roaming related issues.
Some API features are not available on all platforms. The
\l QNetworkConfigurationManager::Capability should be used to detect
-platform features at runtime. The following table lists the various
-platform APIs being used by this API. This may assist in the process of
-determining the feature support:
-
-\table
- \header
- \li Platform
- \li Backend capabilities
- \row
- \li Linux\unicode{0xAE}
- \li Linux uses the \l {http://projects.gnome.org/NetworkManager}{NetworkManager}
- and \l {http://connman.net/}{ConnMan} / \l {http://ofono.org/}{oFono} APIs
- which support interface notifications and starting and stopping of network
- interfaces. Network Manager version 0.9 and above is supported.
- \row
- \li Windows\unicode{0xAE} XP
- \li This platform supports interface notifications without active polling.
- \row
- \li Windows XP SP2+Hotfixes, Windows XP SP3, Windows Vista, Windows 7
- \li In addition to standard Windows XP wifi access point monitoring has been improved which includes the ability to start and stop wifi interfaces. This requires Windows to manage the wifi interfaces.
- \row
- \li Mac OS\unicode{0xAE}
- \li This platform has full support by way of CoreWLAN offered in Mac OS 10.6. Previous
- versions of Mac OS - 10.5 and 10.4 have limited support.
- \row
- \li All other platforms (*nix, Windows Mobile)
- \li This backend is the fallback for all platforms supports network interface notifications via active polling only.
-\endtable
+platform features at runtime.
*/
diff --git a/src/platformsupport/fontdatabases/mac/coretext.pri b/src/platformsupport/fontdatabases/mac/coretext.pri
index a533234c26..2a9b32f65a 100644
--- a/src/platformsupport/fontdatabases/mac/coretext.pri
+++ b/src/platformsupport/fontdatabases/mac/coretext.pri
@@ -7,12 +7,16 @@ qtConfig(freetype) {
SOURCES += freetype/qfontengine_ft.cpp
}
-uikit: \
- # On iOS/tvOS/watchOS CoreText and CoreGraphics are stand-alone frameworks
- LIBS_PRIVATE += -framework CoreText -framework CoreGraphics
-else: \
- # On macOS they are re-exported by the AppKit framework
+LIBS_PRIVATE += \
+ -framework CoreFoundation \
+ -framework CoreGraphics \
+ -framework CoreText \
+ -framework Foundation
+
+macos: \
LIBS_PRIVATE += -framework AppKit
+else: \
+ LIBS_PRIVATE += -framework UIKit
# CoreText is documented to be available on watchOS, but the headers aren't present
# in the watchOS Simulator SDK like they are supposed to be. Work around the problem
diff --git a/src/plugins/platforms/android/androidjniclipboard.cpp b/src/plugins/platforms/android/androidjniclipboard.cpp
index 17ff0e0bbb..833996403c 100644
--- a/src/plugins/platforms/android/androidjniclipboard.cpp
+++ b/src/plugins/platforms/android/androidjniclipboard.cpp
@@ -38,7 +38,6 @@
****************************************************************************/
#include "androidjniclipboard.h"
-#include "androidjnimain.h"
#include <QtCore/private/qjni_p.h>
QT_BEGIN_NAMESPACE
@@ -46,10 +45,23 @@ QT_BEGIN_NAMESPACE
using namespace QtAndroid;
namespace QtAndroidClipboard
{
- void setClipboardListener(QAndroidPlatformClipboard *listener)
+ QAndroidPlatformClipboard *m_manager = nullptr;
+
+ static char const *const QtNativeClassName = "org/qtproject/qt5/android/QtNative";
+ static JNINativeMethod methods[] = {
+ {"onClipboardDataChanged", "()V", (void *)onClipboardDataChanged}
+ };
+
+ void setClipboardManager(QAndroidPlatformClipboard *manager)
{
- Q_UNUSED(listener);
+ m_manager = manager;
QJNIObjectPrivate::callStaticMethod<void>(applicationClass(), "registerClipboardManager");
+ jclass appClass = QtAndroid::applicationClass();
+ QJNIEnvironmentPrivate env;
+ if (env->RegisterNatives(appClass, methods, sizeof(methods) / sizeof(methods[0])) < 0) {
+ __android_log_print(ANDROID_LOG_FATAL,"Qt", "RegisterNatives failed");
+ return;
+ }
}
void setClipboardText(const QString &text)
@@ -73,6 +85,11 @@ namespace QtAndroidClipboard
"()Ljava/lang/String;");
return text.toString();
}
+
+ void onClipboardDataChanged(JNIEnv */*env*/, jobject /*thiz*/)
+ {
+ m_manager->emitChanged(QClipboard::Clipboard);
+ }
}
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/android/androidjniclipboard.h b/src/plugins/platforms/android/androidjniclipboard.h
index 9de6dc1f44..2ec566e729 100644
--- a/src/plugins/platforms/android/androidjniclipboard.h
+++ b/src/plugins/platforms/android/androidjniclipboard.h
@@ -41,6 +41,8 @@
#define ANDROIDJNICLIPBOARD_H
#include <QString>
+#include "qandroidplatformclipboard.h"
+#include "androidjnimain.h"
QT_BEGIN_NAMESPACE
@@ -48,10 +50,11 @@ class QAndroidPlatformClipboard;
namespace QtAndroidClipboard
{
// Clipboard support
- void setClipboardListener(QAndroidPlatformClipboard *listener);
+ void setClipboardManager(QAndroidPlatformClipboard *manager);
void setClipboardText(const QString &text);
bool hasClipboardText();
QString clipboardText();
+ void onClipboardDataChanged(JNIEnv */*env*/, jobject /*thiz*/);
// Clipboard support
}
diff --git a/src/plugins/platforms/android/qandroidplatformclipboard.cpp b/src/plugins/platforms/android/qandroidplatformclipboard.cpp
index a2bc802680..dc5147b259 100644
--- a/src/plugins/platforms/android/qandroidplatformclipboard.cpp
+++ b/src/plugins/platforms/android/qandroidplatformclipboard.cpp
@@ -45,7 +45,7 @@ QT_BEGIN_NAMESPACE
QAndroidPlatformClipboard::QAndroidPlatformClipboard()
{
- QtAndroidClipboard::setClipboardListener(this);
+ QtAndroidClipboard::setClipboardManager(this);
}
QMimeData *QAndroidPlatformClipboard::mimeData(QClipboard::Mode mode)
diff --git a/src/plugins/platforms/cocoa/qcocoawindow.mm b/src/plugins/platforms/cocoa/qcocoawindow.mm
index b85fb97f67..5ff5d01a99 100644
--- a/src/plugins/platforms/cocoa/qcocoawindow.mm
+++ b/src/plugins/platforms/cocoa/qcocoawindow.mm
@@ -291,6 +291,8 @@ static void qt_closePopups()
- (void)closeAndRelease
{
+ qCDebug(lcQpaCocoaWindow) << "closeAndRelease" << self;
+
[self close];
if (self.helper.grabbingMouse) {
@@ -361,6 +363,8 @@ static void qt_closePopups()
- (void)closeAndRelease
{
+ qCDebug(lcQpaCocoaWindow) << "closeAndRelease" << self;
+
[self.helper detachFromPlatformWindow];
[self close];
[self release];
@@ -1584,7 +1588,7 @@ void QCocoaWindow::recreateWindowIfNeeded()
if (isChildNSWindow() != shouldBeChildNSWindow)
recreateReason |= ChildNSWindowChanged;
- const bool shouldBeContentView = !parentWindow || shouldBeChildNSWindow;
+ const bool shouldBeContentView = (!parentWindow && !m_viewIsEmbedded) || shouldBeChildNSWindow;
if (isContentView() != shouldBeContentView)
recreateReason |= ContentViewChanged;
@@ -1601,7 +1605,7 @@ void QCocoaWindow::recreateWindowIfNeeded()
return;
}
- qCDebug(lcQpaCocoaWindow) << "Recreating NSWindow due to" << recreateReason;
+ qCDebug(lcQpaCocoaWindow) << "Reconfiguring NSWindow due to" << recreateReason;
QCocoaWindow *parentCocoaWindow = static_cast<QCocoaWindow *>(parentWindow);
@@ -1616,6 +1620,7 @@ void QCocoaWindow::recreateWindowIfNeeded()
// Remove current window (if any)
if ((isContentView() && !shouldBeContentView) || (recreateReason & PanelChanged)) {
+ qCDebug(lcQpaCocoaWindow) << "Getting rid of existing window" << m_nsWindow;
[m_nsWindow closeAndRelease];
if (isChildNSWindow())
[m_view.window.parentWindow removeChildWindow:m_view.window];
@@ -1642,6 +1647,7 @@ void QCocoaWindow::recreateWindowIfNeeded()
// Move view to new NSWindow if needed
if (m_nsWindow.contentView != m_view) {
+ qCDebug(lcQpaCocoaWindow) << "Ensuring that view is content view for" << m_nsWindow;
[m_view setPostsFrameChangedNotifications:NO];
[m_view retain];
if (m_view.superview) // m_view comes from another NSWindow
@@ -1723,6 +1729,8 @@ void QCocoaWindow::requestActivateWindow()
QCocoaNSWindow *QCocoaWindow::createNSWindow(bool shouldBeChildNSWindow, bool shouldBePanel)
{
+ qCDebug(lcQpaCocoaWindow) << "createNSWindow" << shouldBeChildNSWindow << shouldBePanel;
+
QMacAutoReleasePool pool;
QRect rect = geometry();
diff --git a/src/plugins/platforms/cocoa/qnsview.mm b/src/plugins/platforms/cocoa/qnsview.mm
index 6494dd3386..72e90a5363 100644
--- a/src/plugins/platforms/cocoa/qnsview.mm
+++ b/src/plugins/platforms/cocoa/qnsview.mm
@@ -237,7 +237,7 @@ static bool _q_dontOverrideCtrlLMB = false;
- (void)viewDidMoveToSuperview
{
- if (m_platformWindow.isNull())
+ if (!m_platformWindow)
return;
if (!(m_platformWindow->m_viewIsToBeEmbedded))
@@ -260,7 +260,7 @@ static bool _q_dontOverrideCtrlLMB = false;
- (QWindow *)topLevelWindow
{
- if (m_platformWindow.isNull())
+ if (!m_platformWindow)
return nullptr;
QWindow *focusWindow = m_platformWindow->window();
@@ -278,7 +278,7 @@ static bool _q_dontOverrideCtrlLMB = false;
- (void)updateGeometry
{
- if (m_platformWindow.isNull())
+ if (!m_platformWindow)
return;
QRect geometry;
@@ -437,8 +437,11 @@ static bool _q_dontOverrideCtrlLMB = false;
}
}
-- (void) drawRect:(NSRect)dirtyRect
+- (void)drawRect:(NSRect)dirtyRect
{
+ if (!m_platformWindow)
+ return;
+
qCDebug(lcQpaCocoaWindow) << "[QNSView drawRect:]" << m_platformWindow->window() << QRectF::fromCGRect(NSRectToCGRect(dirtyRect));
#ifndef QT_NO_OPENGL
@@ -627,7 +630,7 @@ static bool _q_dontOverrideCtrlLMB = false;
- (void)handleMouseEvent:(NSEvent *)theEvent
{
- if (m_platformWindow.isNull())
+ if (!m_platformWindow)
return;
// Tablet events may come in via the mouse event handlers,
@@ -644,7 +647,7 @@ static bool _q_dontOverrideCtrlLMB = false;
else
m_platformWindow->m_forwardWindow.clear();
}
- if (targetView->m_platformWindow.isNull())
+ if (!targetView.platformWindow)
return;
// Popups implicitly grap mouse events; forward to the active popup if there is one
@@ -670,7 +673,7 @@ static bool _q_dontOverrideCtrlLMB = false;
- (void)handleFrameStrutMouseEvent:(NSEvent *)theEvent
{
- if (m_platformWindow.isNull())
+ if (!m_platformWindow)
return;
// get m_buttons in sync
@@ -955,7 +958,7 @@ static bool _q_dontOverrideCtrlLMB = false;
- (void)mouseMovedImpl:(NSEvent *)theEvent
{
- if (m_platformWindow.isNull())
+ if (!m_platformWindow)
return;
if ([self isTransparentForUserInput])
@@ -989,7 +992,7 @@ static bool _q_dontOverrideCtrlLMB = false;
- (void)mouseEnteredImpl:(NSEvent *)theEvent
{
Q_UNUSED(theEvent)
- if (m_platformWindow.isNull())
+ if (!m_platformWindow)
return;
m_platformWindow->m_windowUnderMouse = true;
@@ -1011,7 +1014,7 @@ static bool _q_dontOverrideCtrlLMB = false;
- (void)mouseExitedImpl:(NSEvent *)theEvent
{
Q_UNUSED(theEvent);
- if (m_platformWindow.isNull())
+ if (!m_platformWindow)
return;
m_platformWindow->m_windowUnderMouse = false;
@@ -1040,7 +1043,7 @@ Q_GLOBAL_STATIC(QCocoaTabletDeviceDataHash, tabletDeviceDataHash)
- (bool)handleTabletEvent: (NSEvent *)theEvent
{
- if (m_platformWindow.isNull())
+ if (!m_platformWindow)
return false;
NSEventType eventType = [theEvent type];
@@ -1200,7 +1203,7 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent)
- (bool)shouldSendSingleTouch
{
- if (m_platformWindow.isNull())
+ if (!m_platformWindow)
return true;
// QtWidgets expects single-point touch events, QtDeclarative does not.
@@ -1210,7 +1213,7 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent)
- (void)touchesBeganWithEvent:(NSEvent *)event
{
- if (m_platformWindow.isNull())
+ if (!m_platformWindow)
return;
const NSTimeInterval timestamp = [event timestamp];
@@ -1221,7 +1224,7 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent)
- (void)touchesMovedWithEvent:(NSEvent *)event
{
- if (m_platformWindow.isNull())
+ if (!m_platformWindow)
return;
const NSTimeInterval timestamp = [event timestamp];
@@ -1232,7 +1235,7 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent)
- (void)touchesEndedWithEvent:(NSEvent *)event
{
- if (m_platformWindow.isNull())
+ if (!m_platformWindow)
return;
const NSTimeInterval timestamp = [event timestamp];
@@ -1243,7 +1246,7 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent)
- (void)touchesCancelledWithEvent:(NSEvent *)event
{
- if (m_platformWindow.isNull())
+ if (!m_platformWindow)
return;
const NSTimeInterval timestamp = [event timestamp];
@@ -1273,7 +1276,7 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent)
}
- (void)magnifyWithEvent:(NSEvent *)event
{
- if (m_platformWindow.isNull())
+ if (!m_platformWindow)
return;
if ([self handleGestureAsBeginEnd:event])
@@ -1290,7 +1293,7 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent)
- (void)smartMagnifyWithEvent:(NSEvent *)event
{
- if (m_platformWindow.isNull())
+ if (!m_platformWindow)
return;
static bool zoomIn = true;
@@ -1306,7 +1309,7 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent)
- (void)rotateWithEvent:(NSEvent *)event
{
- if (m_platformWindow.isNull())
+ if (!m_platformWindow)
return;
if ([self handleGestureAsBeginEnd:event])
@@ -1322,7 +1325,7 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent)
- (void)swipeWithEvent:(NSEvent *)event
{
- if (m_platformWindow.isNull())
+ if (!m_platformWindow)
return;
qCDebug(lcQpaGestures) << "swipeWithEvent" << [event deltaX] << [event deltaY];
@@ -1347,7 +1350,7 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent)
- (void)beginGestureWithEvent:(NSEvent *)event
{
- if (m_platformWindow.isNull())
+ if (!m_platformWindow)
return;
const NSTimeInterval timestamp = [event timestamp];
@@ -1361,7 +1364,7 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent)
- (void)endGestureWithEvent:(NSEvent *)event
{
- if (m_platformWindow.isNull())
+ if (!m_platformWindow)
return;
qCDebug(lcQpaGestures) << "endGestureWithEvent";
@@ -1377,7 +1380,7 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent)
#ifndef QT_NO_WHEELEVENT
- (void)scrollWheel:(NSEvent *)theEvent
{
- if (m_platformWindow.isNull())
+ if (!m_platformWindow)
return;
if ([self isTransparentForUserInput])
@@ -1879,6 +1882,9 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent)
- (NSArray*)validAttributesForMarkedText
{
+ if (!m_platformWindow)
+ return nil;
+
if (m_platformWindow->window() != QGuiApplication::focusWindow())
return nil;
@@ -2050,7 +2056,7 @@ static QPoint mapWindowCoordinates(QWindow *source, QWindow *target, QPoint poin
// Sends drag update to Qt, return the action
- (NSDragOperation)handleDrag:(id <NSDraggingInfo>)sender
{
- if (m_platformWindow.isNull())
+ if (!m_platformWindow)
return NSDragOperationNone;
NSPoint windowPoint = [self convertPoint: [sender draggingLocation] fromView: nil];
@@ -2080,7 +2086,7 @@ static QPoint mapWindowCoordinates(QWindow *source, QWindow *target, QPoint poin
- (void)draggingExited:(id <NSDraggingInfo>)sender
{
- if (m_platformWindow.isNull())
+ if (!m_platformWindow)
return;
QWindow *target = findEventTargetWindow(m_platformWindow->window());
@@ -2097,7 +2103,7 @@ static QPoint mapWindowCoordinates(QWindow *source, QWindow *target, QPoint poin
// called on drop, send the drop to Qt and return if it was accepted.
- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender
{
- if (m_platformWindow.isNull())
+ if (!m_platformWindow)
return false;
QWindow *target = findEventTargetWindow(m_platformWindow->window());
@@ -2131,7 +2137,7 @@ static QPoint mapWindowCoordinates(QWindow *source, QWindow *target, QPoint poin
Q_UNUSED(session);
Q_UNUSED(operation);
- if (m_platformWindow.isNull())
+ if (!m_platformWindow)
return;
QWindow *target = findEventTargetWindow(m_platformWindow->window());
diff --git a/src/plugins/platforms/ios/qiostextresponder.mm b/src/plugins/platforms/ios/qiostextresponder.mm
index eab6792266..001985a128 100644
--- a/src/plugins/platforms/ios/qiostextresponder.mm
+++ b/src/plugins/platforms/ios/qiostextresponder.mm
@@ -242,11 +242,12 @@
if (platformData.value(kImePlatformDataHideShortcutsBar).toBool()) {
// According to the docs, leadingBarButtonGroups/trailingBarButtonGroups should be set to nil to hide the shortcuts bar.
// However, starting with iOS 10, the API has been surrounded with NS_ASSUME_NONNULL, which contradicts this and causes
- // compiler warnings. And assigning just an empty array causes layout asserts. Hence, we assign empty button groups instead.
- UIBarButtonItemGroup *leading = [[[UIBarButtonItemGroup alloc] initWithBarButtonItems:@[] representativeItem:nil] autorelease];
- UIBarButtonItemGroup *trailing = [[[UIBarButtonItemGroup alloc] initWithBarButtonItems:@[] representativeItem:nil] autorelease];
- self.inputAssistantItem.leadingBarButtonGroups = @[leading];
- self.inputAssistantItem.trailingBarButtonGroups = @[trailing];
+ // compiler warnings. Still it is the way to go to really hide the space reserved for that.
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wnonnull"
+ self.inputAssistantItem.leadingBarButtonGroups = nil;
+ self.inputAssistantItem.trailingBarButtonGroups = nil;
+#pragma clang diagnostic pop
}
}
#endif
diff --git a/src/plugins/platforms/windows/qwindowswindow.cpp b/src/plugins/platforms/windows/qwindowswindow.cpp
index 2875463e62..077511d4e1 100644
--- a/src/plugins/platforms/windows/qwindowswindow.cpp
+++ b/src/plugins/platforms/windows/qwindowswindow.cpp
@@ -870,13 +870,15 @@ void QWindowsBaseWindow::hide_sys() // Normal hide, do not activate other window
void QWindowsBaseWindow::raise_sys()
{
qCDebug(lcQpaWindows) << __FUNCTION__ << this << window();
- SetWindowPos(handle(), HWND_TOP, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
+ if ((window()->flags() & (Qt::WindowStaysOnTopHint | Qt::WindowStaysOnBottomHint)) == 0)
+ SetWindowPos(handle(), HWND_TOP, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
}
void QWindowsBaseWindow::lower_sys()
{
qCDebug(lcQpaWindows) << __FUNCTION__ << this << window();
- SetWindowPos(handle(), HWND_BOTTOM, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
+ if ((window()->flags() & (Qt::WindowStaysOnTopHint | Qt::WindowStaysOnBottomHint)) == 0)
+ SetWindowPos(handle(), HWND_BOTTOM, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
}
void QWindowsBaseWindow::setWindowTitle_sys(const QString &title)
@@ -1616,6 +1618,16 @@ static inline bool dwmIsCompositionEnabled()
return SUCCEEDED(DwmIsCompositionEnabled(&dWmCompositionEnabled)) && dWmCompositionEnabled == TRUE;
}
+static inline bool isSoftwareGl()
+{
+#if QT_CONFIG(dynamicgl)
+ return QOpenGLStaticContext::opengl32.moduleIsNotOpengl32()
+ && QOpenGLContext::openGLModuleType() == QOpenGLContext::LibGL;
+#else
+ return false;
+#endif // dynamicgl
+}
+
bool QWindowsWindow::handleWmPaint(HWND hwnd, UINT message,
WPARAM, LPARAM)
{
@@ -1627,15 +1639,10 @@ bool QWindowsWindow::handleWmPaint(HWND hwnd, UINT message,
return false;
PAINTSTRUCT ps;
-#if QT_CONFIG(dynamicgl)
- // QTBUG-58178: GL software rendering needs InvalidateRect() to suppress
- // artifacts while resizing.
- if (testFlag(OpenGLSurface)
- && QOpenGLStaticContext::opengl32.moduleIsNotOpengl32()
- && QOpenGLContext::openGLModuleType() == QOpenGLContext::LibGL) {
+ // GL software rendering (QTBUG-58178) and Windows 7/Aero off with some AMD cards
+ // (QTBUG-60527) need InvalidateRect() to suppress artifacts while resizing.
+ if (testFlag(OpenGLSurface) && (isSoftwareGl() || !dwmIsCompositionEnabled()))
InvalidateRect(hwnd, 0, false);
- }
-#endif // dynamicgl
BeginPaint(hwnd, &ps);
diff --git a/src/tools/qdbusxml2cpp/qdbusxml2cpp.pro b/src/tools/qdbusxml2cpp/qdbusxml2cpp.pro
index d9ee5de0be..95fcbcbc50 100644
--- a/src/tools/qdbusxml2cpp/qdbusxml2cpp.pro
+++ b/src/tools/qdbusxml2cpp/qdbusxml2cpp.pro
@@ -1,6 +1,9 @@
option(host_build)
-!force_bootstrap:!qtConfig(commandlineparser): \
- CONFIG += force_bootstrap
+!force_bootstrap {
+ include($$OUT_PWD/../../corelib/qtcore-config.pri)
+ !qtConfig(commandlineparser): \
+ CONFIG += force_bootstrap
+}
QT = core-private
force_bootstrap: QT += bootstrap_dbus-private
else: QT += dbus-private
diff --git a/tests/auto/corelib/global/qlogging/app/app.pro b/tests/auto/corelib/global/qlogging/app/app.pro
index 6fba1b6129..30751d89ec 100644
--- a/tests/auto/corelib/global/qlogging/app/app.pro
+++ b/tests/auto/corelib/global/qlogging/app/app.pro
@@ -13,5 +13,5 @@ DEFINES += QT_MESSAGELOGCONTEXT
gcc:!mingw:!haiku {
QMAKE_LFLAGS += -rdynamic
- contains(QT_ARCH, arm): QMAKE_CXXFLAGS += -funwind-tables
+ contains(QT_ARCH, arm): QMAKE_CXXFLAGS += -funwind-tables -fno-inline
}
diff --git a/tests/auto/corelib/itemmodels/qitemselectionmodel/tst_qitemselectionmodel.cpp b/tests/auto/corelib/itemmodels/qitemselectionmodel/tst_qitemselectionmodel.cpp
index fb3968c838..b05e3968ea 100644
--- a/tests/auto/corelib/itemmodels/qitemselectionmodel/tst_qitemselectionmodel.cpp
+++ b/tests/auto/corelib/itemmodels/qitemselectionmodel/tst_qitemselectionmodel.cpp
@@ -92,6 +92,9 @@ private slots:
void QTBUG48402_data();
void QTBUG48402();
+ void QTBUG58851_data();
+ void QTBUG58851();
+
private:
QAbstractItemModel *model;
QItemSelectionModel *selection;
@@ -2848,5 +2851,76 @@ void tst_QItemSelectionModel::QTBUG48402()
QCOMPARE(QItemSelectionRange(helper.tl, helper.br), QItemSelectionRange(dtl, dbr));
}
+void tst_QItemSelectionModel::QTBUG58851_data()
+{
+ using IntPair = std::pair<int, int>;
+ using IntPairList = QList<IntPair>;
+ using IntPairPair = std::pair<IntPair, IntPair>;
+ using IntPairPairList = QList<IntPairPair>;
+
+ QTest::addColumn<IntPairPairList>("rangesToSelect");
+ QTest::addColumn<IntPairList>("expectedSelectedIndexesPairs");
+ QTest::newRow("Single index in > 0 column")
+ << (IntPairPairList() << IntPairPair(IntPair(0, 1), IntPair(0, 1)))
+ << (IntPairList() << IntPair(0, 1));
+ QTest::newRow("Rectangle in > 0 column")
+ << (IntPairPairList() << IntPairPair(IntPair(0, 1), IntPair(1, 2)))
+ << (IntPairList() << IntPair(0, 1) << IntPair(0, 2) << IntPair(1, 1) << IntPair(1, 2));
+ QTest::newRow("Diagonal in > 0 column")
+ << (IntPairPairList()
+ << IntPairPair(IntPair(0, 1), IntPair(0, 1))
+ << IntPairPair(IntPair(1, 2), IntPair(1, 2))
+ << IntPairPair(IntPair(2, 3), IntPair(2, 3)))
+ << (IntPairList()
+ << IntPair(0, 1)
+ << IntPair(1, 2)
+ << IntPair(2, 3));
+}
+
+void tst_QItemSelectionModel::QTBUG58851()
+{
+ using IntPair = std::pair<int, int>;
+ using IntPairList = QList<IntPair>;
+ using IntPairPair = std::pair<IntPair, IntPair>;
+ using IntPairPairList = QList<IntPairPair>;
+
+ QFETCH(IntPairPairList, rangesToSelect);
+ QFETCH(IntPairList, expectedSelectedIndexesPairs);
+
+ QStandardItemModel model(4, 4);
+ for (int row = 0; row < model.rowCount(); ++row) {
+ for (int column = 0; column < model.columnCount(); ++column) {
+ QStandardItem *item = new QStandardItem(QString("%0%1").arg(row).arg(column));
+ model.setItem(row, column, item);
+ }
+ }
+
+ QSortFilterProxyModel proxy;
+ proxy.setSourceModel(&model);
+ proxy.setSortRole(Qt::DisplayRole);
+
+ std::vector<QPersistentModelIndex> expectedSelectedIndexes;
+ for (const IntPair &index : expectedSelectedIndexesPairs)
+ expectedSelectedIndexes.emplace_back(proxy.index(index.first, index.second));
+
+ QItemSelectionModel selections(&proxy);
+ for (const IntPairPair &range : rangesToSelect) {
+ const IntPair &tl = range.first;
+ const IntPair &br = range.second;
+ selections.select(QItemSelection(proxy.index(tl.first, tl.second),
+ proxy.index(br.first, br.second)),
+ QItemSelectionModel::Select);
+ }
+
+ for (const QPersistentModelIndex &i : expectedSelectedIndexes) {
+ QVERIFY(selections.isSelected(i));
+ }
+ proxy.sort(1, Qt::DescendingOrder);
+ QCOMPARE(selections.selectedIndexes().count(), (int)expectedSelectedIndexes.size());
+ for (const QPersistentModelIndex &i : expectedSelectedIndexes) {
+ QVERIFY(selections.isSelected(i));
+ }
+}
+
QTEST_MAIN(tst_QItemSelectionModel)
#include "tst_qitemselectionmodel.moc"
diff --git a/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp b/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp
index 31e76c4407..22f0d8ecaa 100644
--- a/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp
+++ b/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp
@@ -155,7 +155,9 @@ void tst_QCoreApplication::qAppName()
void tst_QCoreApplication::qAppVersion()
{
-#if defined(Q_OS_WIN)
+#if defined(Q_OS_WINRT)
+ const char appVersion[] = "1.0.0.0";
+#elif defined(Q_OS_WIN)
const char appVersion[] = "1.2.3.4";
#elif defined(Q_OS_DARWIN) || defined(Q_OS_ANDROID)
const char appVersion[] = "1.2.3";
@@ -946,9 +948,12 @@ void tst_QCoreApplication::addRemoveLibPaths()
char *argv[] = { const_cast<char*>(QTest::currentAppName()) };
TestApplication app(argc, argv);
- // Check that modifications stay alive across the creation of an application.
- QVERIFY(QCoreApplication::libraryPaths().contains(currentDir));
- QVERIFY(!QCoreApplication::libraryPaths().contains(paths[0]));
+ // If libraryPaths only contains currentDir, neither will be in libraryPaths now.
+ if (paths.length() != 1 && currentDir != paths[0]) {
+ // Check that modifications stay alive across the creation of an application.
+ QVERIFY(QCoreApplication::libraryPaths().contains(currentDir));
+ QVERIFY(!QCoreApplication::libraryPaths().contains(paths[0]));
+ }
QStringList replace;
replace << currentDir << paths[0];
diff --git a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp
index b6106e8c9e..f9ddd59aaa 100644
--- a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp
+++ b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp
@@ -1721,10 +1721,10 @@ void tst_QMetaType::metaObject()
}
#define METATYPE_ID_FUNCTION(Type, MetaTypeId, Name) \
- case ::qMetaTypeId< Name >(): metaType = MetaTypeIdStruct<MetaTypeId>::Value;
+ case ::qMetaTypeId< Name >(): metaType = MetaTypeIdStruct<MetaTypeId>::Value; break;
#define REGISTER_METATYPE_FUNCTION(Type, MetaTypeId, Name) \
- case qRegisterMetaType< Name >(): metaType = RegisterMetaTypeStruct<MetaTypeId>::Value;
+ case qRegisterMetaType< Name >(): metaType = RegisterMetaTypeStruct<MetaTypeId>::Value; break;
template<int>
struct MetaTypeIdStruct
diff --git a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp
index db6bdf0809..642d48d721 100644
--- a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp
+++ b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp
@@ -6926,309 +6926,261 @@ void tst_QObject::checkArgumentsForNarrowing()
enum UnscopedEnum {};
enum SignedUnscopedEnum { SignedUnscopedEnumV1 = -1, SignedUnscopedEnumV2 = 1 };
- QVERIFY(sizeof(UnscopedEnum) <= sizeof(int));
- QVERIFY(sizeof(SignedUnscopedEnum) <= sizeof(int));
+ // a constexpr would suffice, but MSVC2013 RTM doesn't support them...
+#define IS_UNSCOPED_ENUM_SIGNED (std::is_signed<typename std::underlying_type<UnscopedEnum>::type>::value)
+
+#define NARROWS_IF(x, y, test) Q_STATIC_ASSERT((QtPrivate::AreArgumentsNarrowedBase<x, y>::value) == (test))
+#define FITS_IF(x, y, test) Q_STATIC_ASSERT((QtPrivate::AreArgumentsNarrowedBase<x, y>::value) != (test))
+#define NARROWS(x, y) NARROWS_IF(x, y, true)
+#define FITS(x, y) FITS_IF(x, y, true)
+
+ Q_STATIC_ASSERT(sizeof(UnscopedEnum) <= sizeof(int));
+ Q_STATIC_ASSERT(sizeof(SignedUnscopedEnum) <= sizeof(int));
// floating point to integral
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<float, bool>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<double, bool>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<long double, bool>::value));
+ NARROWS(float, bool);
+ NARROWS(double, bool);
+ NARROWS(long double, bool);
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<float, char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<double, char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<long double, char>::value));
+ NARROWS(float, char);
+ NARROWS(double, char);
+ NARROWS(long double, char);
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<float, short>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<double, short>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<long double, short>::value));
+ NARROWS(float, short);
+ NARROWS(double, short);
+ NARROWS(long double, short);
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<float, int>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<double, int>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<long double, int>::value));
+ NARROWS(float, int);
+ NARROWS(double, int);
+ NARROWS(long double, int);
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<float, long>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<double, long>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<long double, long>::value));
+ NARROWS(float, long);
+ NARROWS(double, long);
+ NARROWS(long double, long);
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<float, long long>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<double, long long>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<long double, long long>::value));
+ NARROWS(float, long long);
+ NARROWS(double, long long);
+ NARROWS(long double, long long);
// floating point to a smaller floating point
- if (sizeof(double) > sizeof(float)) {
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<double, float>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<long double, float>::value));
- }
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<float, double>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<float, long double>::value));
+ NARROWS_IF(double, float, (sizeof(double) > sizeof(float)));
+ NARROWS_IF(long double, float, (sizeof(long double) > sizeof(float)));
+ FITS(float, double);
+ FITS(float, long double);
- if (sizeof(long double) > sizeof(double))
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<long double, float>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<double, long double>::value));
+ NARROWS_IF(long double, double, (sizeof(long double) > sizeof(double)));
+ FITS(double, long double);
// integral to floating point
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<bool, float>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<bool, double>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<bool, long double>::value));
+ NARROWS(bool, float);
+ NARROWS(bool, double);
+ NARROWS(bool, long double);
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<char, float>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<char, double>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<char, long double>::value));
+ NARROWS(char, float);
+ NARROWS(char, double);
+ NARROWS(char, long double);
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<short, float>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<short, double>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<short, long double>::value));
+ NARROWS(short, float);
+ NARROWS(short, double);
+ NARROWS(short, long double);
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<int, float>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<int, double>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<int, long double>::value));
+ NARROWS(int, float);
+ NARROWS(int, double);
+ NARROWS(int, long double);
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<long, float>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<long, double>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<long, long double>::value));
+ NARROWS(long, float);
+ NARROWS(long, double);
+ NARROWS(long, long double);
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<long long, float>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<long long, double>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<long long, long double>::value));
+ NARROWS(long long, float);
+ NARROWS(long long, double);
+ NARROWS(long long, long double);
// enum to floating point
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<UnscopedEnum, float>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<UnscopedEnum, double>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<UnscopedEnum, long double>::value));
+ NARROWS(UnscopedEnum, float);
+ NARROWS(UnscopedEnum, double);
+ NARROWS(UnscopedEnum, long double);
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<SignedUnscopedEnum, float>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<SignedUnscopedEnum, double>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<SignedUnscopedEnum, long double>::value));
+ NARROWS(SignedUnscopedEnum, float);
+ NARROWS(SignedUnscopedEnum, double);
+ NARROWS(SignedUnscopedEnum, long double);
// integral to smaller integral
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<bool, bool>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<char, char>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<signed char, signed char>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<signed char, short>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<signed char, int>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<signed char, long>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<signed char, long long>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<unsigned char, unsigned char>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<unsigned char, unsigned short>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<unsigned char, unsigned int>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<unsigned char, unsigned long>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<unsigned char, unsigned long long>::value));
-
- if (sizeof(bool) > sizeof(char))
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<bool, unsigned char>::value));
- else
- QVERIFY(!(QtPrivate::AreArgumentsNarrowedBase<bool, unsigned char>::value));
-
- if (sizeof(bool) > sizeof(short))
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<bool, unsigned short>::value));
- else
- QVERIFY(!(QtPrivate::AreArgumentsNarrowedBase<bool, unsigned short>::value));
-
- if (sizeof(bool) > sizeof(int))
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<bool, unsigned int>::value));
- else
- QVERIFY(!(QtPrivate::AreArgumentsNarrowedBase<bool, unsigned int>::value));
-
- if (sizeof(bool) > sizeof(long))
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<bool, unsigned long>::value));
- else
- QVERIFY(!(QtPrivate::AreArgumentsNarrowedBase<bool, unsigned long>::value));
-
- if (sizeof(bool) > sizeof(long long))
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<bool, unsigned long long>::value));
- else
- QVERIFY(!(QtPrivate::AreArgumentsNarrowedBase<bool, unsigned long long>::value));
-
- if (sizeof(short) > sizeof(char)) {
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<short, char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<short, unsigned char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<short, signed char>::value));
-
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<unsigned short, char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<unsigned short, unsigned char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<unsigned short, signed char>::value));
- }
-
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<short, short>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<short, int>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<short, long>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<short, long long>::value));
-
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<unsigned short, unsigned short>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<unsigned short, unsigned int>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<unsigned short, unsigned long>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<unsigned short, unsigned long long>::value));
-
- if (sizeof(int) > sizeof(short)) {
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<int, char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<int, unsigned char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<int, signed char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<int, short>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<int, unsigned short>::value));
-
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<unsigned int, char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<unsigned int, unsigned char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<unsigned int, signed char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<unsigned int, short>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<unsigned int, unsigned short>::value));
- }
-
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<int, int>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<int, long>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<int, long long>::value));
-
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<unsigned int, unsigned int>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<unsigned int, unsigned long>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<unsigned int, unsigned long long>::value));
-
- if (sizeof(long) > sizeof(int)) {
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<long, char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<long, unsigned char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<long, signed char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<long, short>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<long, unsigned short>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<long, int>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<long, unsigned int>::value));
-
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<unsigned long, char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<unsigned long, unsigned char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<unsigned long, signed char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<unsigned long, short>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<unsigned long, unsigned short>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<unsigned long, int>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<unsigned long, unsigned int>::value));
- }
-
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<long, long>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<long, long long>::value));
-
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<unsigned long, unsigned long>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<unsigned long, unsigned long long>::value));
-
- if (sizeof(long long) > sizeof(long)) {
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<long long, char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<long long, unsigned char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<long long, signed char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<long long, short>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<long long, unsigned short>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<long long, int>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<long long, unsigned int>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<long long, long>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<long long, unsigned long>::value));
-
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<unsigned long long, char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<unsigned long long, unsigned char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<unsigned long long, signed char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<unsigned long long, short>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<unsigned long long, unsigned short>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<unsigned long long, int>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<unsigned long long, unsigned int>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<unsigned long long, long>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<unsigned long long, unsigned long>::value));
- }
-
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<long long, long long>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<unsigned long long, unsigned long long>::value));
+ FITS(bool, bool);
+ FITS(char, char);
+ FITS(signed char, signed char);
+ FITS(signed char, short);
+ FITS(signed char, int);
+ FITS(signed char, long);
+ FITS(signed char, long long);
+ FITS(unsigned char, unsigned char);
+ FITS(unsigned char, unsigned short);
+ FITS(unsigned char, unsigned int);
+ FITS(unsigned char, unsigned long);
+ FITS(unsigned char, unsigned long long);
+
+ NARROWS_IF(bool, unsigned char, (sizeof(bool) > sizeof(char) || std::is_signed<bool>::value));
+ NARROWS_IF(bool, unsigned short, (sizeof(bool) > sizeof(short) || std::is_signed<bool>::value));
+ NARROWS_IF(bool, unsigned int, (sizeof(bool) > sizeof(int) || std::is_signed<bool>::value));
+ NARROWS_IF(bool, unsigned long, (sizeof(bool) > sizeof(long) || std::is_signed<bool>::value));
+ NARROWS_IF(bool, unsigned long long, (sizeof(bool) > sizeof(long long) || std::is_signed<bool>::value));
+
+ NARROWS_IF(short, char, (sizeof(short) > sizeof(char) || std::is_unsigned<char>::value));
+ NARROWS_IF(short, unsigned char, (sizeof(short) > sizeof(char)));
+ NARROWS_IF(short, signed char, (sizeof(short) > sizeof(char)));
+
+ NARROWS_IF(unsigned short, char, (sizeof(short) > sizeof(char) || std::is_signed<char>::value));
+ NARROWS_IF(unsigned short, unsigned char, (sizeof(short) > sizeof(char)));
+ NARROWS_IF(unsigned short, signed char, (sizeof(short) > sizeof(char)));
+
+ FITS(short, short);
+ FITS(short, int);
+ FITS(short, long);
+ FITS(short, long long);
+
+ FITS(unsigned short, unsigned short);
+ FITS(unsigned short, unsigned int);
+ FITS(unsigned short, unsigned long);
+ FITS(unsigned short, unsigned long long);
+
+ NARROWS_IF(int, char, (sizeof(int) > sizeof(char) || std::is_unsigned<char>::value));
+ NARROWS(int, unsigned char);
+ NARROWS_IF(int, signed char, (sizeof(int) > sizeof(char)));
+ NARROWS_IF(int, short, (sizeof(int) > sizeof(short)));
+ NARROWS(int, unsigned short);
+
+ NARROWS_IF(unsigned int, char, (sizeof(int) > sizeof(char) || std::is_signed<char>::value));
+ NARROWS_IF(unsigned int, unsigned char, (sizeof(int) > sizeof(char)));
+ NARROWS(unsigned int, signed char);
+ NARROWS(unsigned int, short);
+ NARROWS_IF(unsigned int, unsigned short, (sizeof(int) > sizeof(short)));
+
+ FITS(int, int);
+ FITS(int, long);
+ FITS(int, long long);
+
+ FITS(unsigned int, unsigned int);
+ FITS(unsigned int, unsigned long);
+ FITS(unsigned int, unsigned long long);
+
+ NARROWS_IF(long, char, (sizeof(long) > sizeof(char) || std::is_unsigned<char>::value));
+ NARROWS(long, unsigned char);
+ NARROWS_IF(long, signed char, (sizeof(long) > sizeof(char)));
+ NARROWS_IF(long, short, (sizeof(long) > sizeof(short)));
+ NARROWS(long, unsigned short);
+ NARROWS_IF(long, int, (sizeof(long) > sizeof(int)));
+ NARROWS(long, unsigned int);
+
+ NARROWS_IF(unsigned long, char, (sizeof(long) > sizeof(char) || std::is_signed<char>::value));
+ NARROWS_IF(unsigned long, unsigned char, (sizeof(long) > sizeof(char)));
+ NARROWS(unsigned long, signed char);
+ NARROWS(unsigned long, short);
+ NARROWS_IF(unsigned long, unsigned short, (sizeof(long) > sizeof(short)));
+ NARROWS(unsigned long, int);
+ NARROWS_IF(unsigned long, unsigned int, (sizeof(long) > sizeof(int)));
+
+ FITS(long, long);
+ FITS(long, long long);
+
+ FITS(unsigned long, unsigned long);
+ FITS(unsigned long, unsigned long long);
+
+ NARROWS_IF(long long, char, (sizeof(long long) > sizeof(char) || std::is_unsigned<char>::value));
+ NARROWS(long long, unsigned char);
+ NARROWS_IF(long long, signed char, (sizeof(long long) > sizeof(char)));
+ NARROWS_IF(long long, short, (sizeof(long long) > sizeof(short)));
+ NARROWS(long long, unsigned short);
+ NARROWS_IF(long long, int, (sizeof(long long) > sizeof(int)));
+ NARROWS(long long, unsigned int);
+ NARROWS_IF(long long, long, (sizeof(long long) > sizeof(long)));
+ NARROWS(long long, unsigned long);
+
+ NARROWS_IF(unsigned long long, char, (sizeof(long long) > sizeof(char) || std::is_signed<char>::value));
+ NARROWS_IF(unsigned long long, unsigned char, (sizeof(long long) > sizeof(char)));
+ NARROWS(unsigned long long, signed char);
+ NARROWS(unsigned long long, short);
+ NARROWS_IF(unsigned long long, unsigned short, (sizeof(long long) > sizeof(short)));
+ NARROWS(unsigned long long, int);
+ NARROWS_IF(unsigned long long, unsigned int, (sizeof(long long) > sizeof(int)));
+ NARROWS(unsigned long long, long);
+ NARROWS_IF(unsigned long long, unsigned long, (sizeof(long long) > sizeof(long)));
+
+ FITS(long long, long long);
+ FITS(unsigned long long, unsigned long long);
// integral to integral with different signedness. smaller ones tested above
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<signed char, unsigned char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<signed char, unsigned short>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<signed char, unsigned int>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<signed char, unsigned long>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<signed char, unsigned long long>::value));
+ NARROWS(signed char, unsigned char);
+ NARROWS(signed char, unsigned short);
+ NARROWS(signed char, unsigned int);
+ NARROWS(signed char, unsigned long);
+ NARROWS(signed char, unsigned long long);
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<unsigned char, signed char>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<unsigned char, short>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<unsigned char, int>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<unsigned char, long>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<unsigned char, long long>::value));
+ NARROWS(unsigned char, signed char);
+ FITS(unsigned char, short);
+ FITS(unsigned char, int);
+ FITS(unsigned char, long);
+ FITS(unsigned char, long long);
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<short, unsigned short>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<short, unsigned int>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<short, unsigned long>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<short, unsigned long long>::value));
+ NARROWS(short, unsigned short);
+ NARROWS(short, unsigned int);
+ NARROWS(short, unsigned long);
+ NARROWS(short, unsigned long long);
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<unsigned short, short>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<unsigned short, int>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<unsigned short, long>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<unsigned short, long long>::value));
+ NARROWS(unsigned short, short);
+ FITS(unsigned short, int);
+ FITS(unsigned short, long);
+ FITS(unsigned short, long long);
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<int, unsigned int>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<int, unsigned long>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<int, unsigned long long>::value));
+ NARROWS(int, unsigned int);
+ NARROWS(int, unsigned long);
+ NARROWS(int, unsigned long long);
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<unsigned int, int>::value));
- QCOMPARE((QtPrivate::AreArgumentsNarrowedBase<unsigned int, long>::value), sizeof(int) >= sizeof(long));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<unsigned int, long long>::value));
+ NARROWS(unsigned int, int);
+ NARROWS_IF(unsigned int, long, (sizeof(int) >= sizeof(long)));
+ FITS(unsigned int, long long);
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<long, unsigned long>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<long, unsigned long long>::value));
+ NARROWS(long, unsigned long);
+ NARROWS(long, unsigned long long);
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<unsigned long, long>::value));
- QCOMPARE((QtPrivate::AreArgumentsNarrowedBase<unsigned long, long long>::value), sizeof(long) >= sizeof(long long));
+ NARROWS(unsigned long, long);
+ NARROWS_IF(unsigned long, long long, (sizeof(long) >= sizeof(long long)));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<long long, unsigned long long>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<unsigned long long, long long>::value));
+ NARROWS(long long, unsigned long long);
+ NARROWS(unsigned long long, long long);
// enum to smaller integral
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<UnscopedEnum, UnscopedEnum>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<SignedUnscopedEnum, SignedUnscopedEnum>::value));
-
- if (std::is_signed<typename std::underlying_type<UnscopedEnum>::type>::value) {
- if (sizeof(UnscopedEnum) > sizeof(char))
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<UnscopedEnum, signed char>::value));
- else
- QVERIFY(!(QtPrivate::AreArgumentsNarrowedBase<UnscopedEnum, signed char>::value));
-
- if (sizeof(UnscopedEnum) > sizeof(short))
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<UnscopedEnum, short>::value));
- else
- QVERIFY(!(QtPrivate::AreArgumentsNarrowedBase<UnscopedEnum, short>::value));
-
- QVERIFY(!(QtPrivate::AreArgumentsNarrowedBase<UnscopedEnum, int>::value));
- QVERIFY(!(QtPrivate::AreArgumentsNarrowedBase<UnscopedEnum, long>::value));
- QVERIFY(!(QtPrivate::AreArgumentsNarrowedBase<UnscopedEnum, long long>::value));
- } else {
- if (sizeof(UnscopedEnum) > sizeof(bool))
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<UnscopedEnum, bool>::value));
- else
- QVERIFY(!(QtPrivate::AreArgumentsNarrowedBase<UnscopedEnum, bool>::value));
+ // (note that we know that sizeof(UnscopedEnum) <= sizeof(int)
+ FITS(UnscopedEnum, UnscopedEnum);
+ FITS(SignedUnscopedEnum, SignedUnscopedEnum);
- if (sizeof(UnscopedEnum) > sizeof(char))
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<UnscopedEnum, unsigned char>::value));
- else
- QVERIFY(!(QtPrivate::AreArgumentsNarrowedBase<UnscopedEnum, unsigned char>::value));
+ NARROWS_IF(UnscopedEnum, char, ((sizeof(UnscopedEnum) > sizeof(char)) || (sizeof(UnscopedEnum) == sizeof(char) && IS_UNSCOPED_ENUM_SIGNED == std::is_signed<char>::value)));
+ NARROWS_IF(UnscopedEnum, signed char, ((sizeof(UnscopedEnum) > sizeof(char)) || (sizeof(UnscopedEnum) == sizeof(char) && !IS_UNSCOPED_ENUM_SIGNED)));
+ NARROWS_IF(UnscopedEnum, unsigned char, ((sizeof(UnscopedEnum) > sizeof(char)) || IS_UNSCOPED_ENUM_SIGNED));
- if (sizeof(UnscopedEnum) > sizeof(short))
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<UnscopedEnum, unsigned short>::value));
- else
- QVERIFY(!(QtPrivate::AreArgumentsNarrowedBase<UnscopedEnum, unsigned short>::value));
+ NARROWS_IF(UnscopedEnum, short, ((sizeof(UnscopedEnum) > sizeof(short)) || (sizeof(UnscopedEnum) == sizeof(short) && !IS_UNSCOPED_ENUM_SIGNED)));
+ NARROWS_IF(UnscopedEnum, unsigned short, ((sizeof(UnscopedEnum) > sizeof(short)) || IS_UNSCOPED_ENUM_SIGNED));
- QVERIFY(!(QtPrivate::AreArgumentsNarrowedBase<UnscopedEnum, unsigned int>::value));
- QVERIFY(!(QtPrivate::AreArgumentsNarrowedBase<UnscopedEnum, unsigned long>::value));
- QVERIFY(!(QtPrivate::AreArgumentsNarrowedBase<UnscopedEnum, unsigned long long>::value));
- }
+ NARROWS_IF(UnscopedEnum, int, (sizeof(UnscopedEnum) == sizeof(int) && !IS_UNSCOPED_ENUM_SIGNED));
+ NARROWS_IF(UnscopedEnum, unsigned int, IS_UNSCOPED_ENUM_SIGNED);
- QVERIFY(std::is_signed<typename std::underlying_type<SignedUnscopedEnum>::type>::value);
+ NARROWS_IF(UnscopedEnum, long, (sizeof(UnscopedEnum) == sizeof(long) && !IS_UNSCOPED_ENUM_SIGNED));
+ NARROWS_IF(UnscopedEnum, unsigned long, IS_UNSCOPED_ENUM_SIGNED);
- if (sizeof(SignedUnscopedEnum) > sizeof(char))
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<SignedUnscopedEnum, signed char>::value));
- else
- QVERIFY(!(QtPrivate::AreArgumentsNarrowedBase<SignedUnscopedEnum, signed char>::value));
+ NARROWS_IF(UnscopedEnum, long long, (sizeof(UnscopedEnum) == sizeof(long long) && !IS_UNSCOPED_ENUM_SIGNED));
+ NARROWS_IF(UnscopedEnum, unsigned long long, IS_UNSCOPED_ENUM_SIGNED);
- if (sizeof(SignedUnscopedEnum) > sizeof(short))
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<SignedUnscopedEnum, short>::value));
- else
- QVERIFY(!(QtPrivate::AreArgumentsNarrowedBase<SignedUnscopedEnum, short>::value));
+ Q_STATIC_ASSERT(std::is_signed<typename std::underlying_type<SignedUnscopedEnum>::type>::value);
- QVERIFY(!(QtPrivate::AreArgumentsNarrowedBase<SignedUnscopedEnum, int>::value));
- QVERIFY(!(QtPrivate::AreArgumentsNarrowedBase<SignedUnscopedEnum, long>::value));
- QVERIFY(!(QtPrivate::AreArgumentsNarrowedBase<SignedUnscopedEnum, long long>::value));
+ NARROWS_IF(SignedUnscopedEnum, signed char, (sizeof(SignedUnscopedEnum) > sizeof(char)));
+ NARROWS_IF(SignedUnscopedEnum, short, (sizeof(SignedUnscopedEnum) > sizeof(short)));
+ FITS(SignedUnscopedEnum, int);
+ FITS(SignedUnscopedEnum, long);
+ FITS(SignedUnscopedEnum, long long);
enum class ScopedEnumBackedBySChar : signed char { A };
@@ -7242,192 +7194,190 @@ void tst_QObject::checkArgumentsForNarrowing()
enum class ScopedEnumBackedByLongLong : long long { A };
enum class ScopedEnumBackedByULongLong : unsigned long long { A };
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedBySChar, ScopedEnumBackedBySChar>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByUChar, ScopedEnumBackedByUChar>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByShort, ScopedEnumBackedByShort>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByUShort, ScopedEnumBackedByUShort>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByInt, ScopedEnumBackedByInt>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByUInt, ScopedEnumBackedByUInt>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByLong, ScopedEnumBackedByLong>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByULong, ScopedEnumBackedByULong>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByLongLong, ScopedEnumBackedByLongLong>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByULongLong, ScopedEnumBackedByULongLong>::value));
-
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedBySChar, signed char>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByUChar, unsigned char>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByShort, short>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByUShort, unsigned short>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByInt, int>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByUInt, unsigned int>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByLong, long>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByULong, unsigned long>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByLongLong, long long>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByULongLong, unsigned long long>::value));
-
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedBySChar, signed char>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedBySChar, short>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedBySChar, int>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedBySChar, long>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedBySChar, long long>::value));
-
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByUChar, unsigned char>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByUChar, unsigned short>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByUChar, unsigned int>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByUChar, unsigned long>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByUChar, unsigned long long>::value));
-
- if (sizeof(short) > sizeof(char)) {
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByShort, char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByUShort, char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByInt, char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByUInt, char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByLong, char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByULong, char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByLongLong, char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByULongLong, char>::value));
-
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByShort, signed char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByUShort, signed char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByInt, signed char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByUInt, signed char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByLong, signed char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByULong, signed char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByLongLong, signed char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByULongLong, signed char>::value));
-
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByShort, unsigned char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByUShort, unsigned char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByInt, unsigned char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByUInt, unsigned char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByLong, unsigned char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByULong, unsigned char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByLongLong, unsigned char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByULongLong, unsigned char>::value));
- }
-
- if (sizeof(int) > sizeof(short)) {
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByInt, short>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByUInt, short>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByLong, short>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByULong, short>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByLongLong, short>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByULongLong, short>::value));
-
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByInt, unsigned short>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByUInt, unsigned short>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByLong, unsigned short>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByULong, unsigned short>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByLongLong, unsigned short>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByULongLong, unsigned short>::value));
- }
-
- if (sizeof(long) > sizeof(int)) {
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByLong, int>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByULong, int>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByLongLong, int>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByULongLong, int>::value));
-
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByLong, unsigned int>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByULong, unsigned int>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByLongLong, unsigned int>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByULongLong, unsigned int>::value));
- }
-
- if (sizeof(long long) > sizeof(long)) {
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByLongLong, long>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByULongLong, long>::value));
-
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByLongLong, unsigned long>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByULongLong, unsigned long>::value));
- }
+ FITS(ScopedEnumBackedBySChar, ScopedEnumBackedBySChar);
+ FITS(ScopedEnumBackedByUChar, ScopedEnumBackedByUChar);
+ FITS(ScopedEnumBackedByShort, ScopedEnumBackedByShort);
+ FITS(ScopedEnumBackedByUShort, ScopedEnumBackedByUShort);
+ FITS(ScopedEnumBackedByInt, ScopedEnumBackedByInt);
+ FITS(ScopedEnumBackedByUInt, ScopedEnumBackedByUInt);
+ FITS(ScopedEnumBackedByLong, ScopedEnumBackedByLong);
+ FITS(ScopedEnumBackedByULong, ScopedEnumBackedByULong);
+ FITS(ScopedEnumBackedByLongLong, ScopedEnumBackedByLongLong);
+ FITS(ScopedEnumBackedByULongLong, ScopedEnumBackedByULongLong);
+
+ FITS(ScopedEnumBackedBySChar, signed char);
+ FITS(ScopedEnumBackedByUChar, unsigned char);
+ FITS(ScopedEnumBackedByShort, short);
+ FITS(ScopedEnumBackedByUShort, unsigned short);
+ FITS(ScopedEnumBackedByInt, int);
+ FITS(ScopedEnumBackedByUInt, unsigned int);
+ FITS(ScopedEnumBackedByLong, long);
+ FITS(ScopedEnumBackedByULong, unsigned long);
+ FITS(ScopedEnumBackedByLongLong, long long);
+ FITS(ScopedEnumBackedByULongLong, unsigned long long);
+
+ FITS(ScopedEnumBackedBySChar, signed char);
+ FITS(ScopedEnumBackedBySChar, short);
+ FITS(ScopedEnumBackedBySChar, int);
+ FITS(ScopedEnumBackedBySChar, long);
+ FITS(ScopedEnumBackedBySChar, long long);
+
+ FITS(ScopedEnumBackedByUChar, unsigned char);
+ FITS(ScopedEnumBackedByUChar, unsigned short);
+ FITS(ScopedEnumBackedByUChar, unsigned int);
+ FITS(ScopedEnumBackedByUChar, unsigned long);
+ FITS(ScopedEnumBackedByUChar, unsigned long long);
+
+ NARROWS_IF(ScopedEnumBackedByShort, char, (sizeof(short) > sizeof(char) || std::is_unsigned<char>::value));
+ NARROWS_IF(ScopedEnumBackedByUShort, char, (sizeof(short) > sizeof(char) || std::is_signed<char>::value));
+ NARROWS_IF(ScopedEnumBackedByInt, char, (sizeof(int) > sizeof(char) || std::is_unsigned<char>::value));
+ NARROWS_IF(ScopedEnumBackedByUInt, char, (sizeof(int) > sizeof(char) || std::is_signed<char>::value));
+ NARROWS_IF(ScopedEnumBackedByLong, char, (sizeof(long) > sizeof(char) || std::is_unsigned<char>::value));
+ NARROWS_IF(ScopedEnumBackedByULong, char, (sizeof(long) > sizeof(char) || std::is_signed<char>::value));
+ NARROWS_IF(ScopedEnumBackedByLongLong, char, (sizeof(long long) > sizeof(char) || std::is_unsigned<char>::value));
+ NARROWS_IF(ScopedEnumBackedByULongLong, char, (sizeof(long long) > sizeof(char) || std::is_signed<char>::value));
+
+ NARROWS_IF(ScopedEnumBackedByShort, signed char, (sizeof(short) > sizeof(char)));
+ NARROWS(ScopedEnumBackedByUShort, signed char);
+ NARROWS_IF(ScopedEnumBackedByInt, signed char, (sizeof(int) > sizeof(char)));
+ NARROWS(ScopedEnumBackedByUInt, signed char);
+ NARROWS_IF(ScopedEnumBackedByLong, signed char, (sizeof(long) > sizeof(char)));
+ NARROWS(ScopedEnumBackedByULong, signed char);
+ NARROWS_IF(ScopedEnumBackedByLongLong, signed char, (sizeof(long long) > sizeof(char)));
+ NARROWS(ScopedEnumBackedByULongLong, signed char);
+
+ NARROWS(ScopedEnumBackedByShort, unsigned char);
+ NARROWS_IF(ScopedEnumBackedByUShort, unsigned char, (sizeof(short) > sizeof(char)));
+ NARROWS(ScopedEnumBackedByInt, unsigned char);
+ NARROWS_IF(ScopedEnumBackedByUInt, unsigned char, (sizeof(int) > sizeof(char)));
+ NARROWS(ScopedEnumBackedByLong, unsigned char);
+ NARROWS_IF(ScopedEnumBackedByULong, unsigned char, (sizeof(long) > sizeof(char)));
+ NARROWS(ScopedEnumBackedByLongLong, unsigned char);
+ NARROWS_IF(ScopedEnumBackedByULongLong, unsigned char, (sizeof(long long) > sizeof(char)));
+
+ NARROWS_IF(ScopedEnumBackedByInt, short, (sizeof(int) > sizeof(short)));
+ NARROWS(ScopedEnumBackedByUInt, short);
+ NARROWS_IF(ScopedEnumBackedByLong, short, (sizeof(long) > sizeof(short)));
+ NARROWS(ScopedEnumBackedByULong, short);
+ NARROWS_IF(ScopedEnumBackedByLongLong, short, (sizeof(long long) > sizeof(short)));
+ NARROWS(ScopedEnumBackedByULongLong, short);
+
+ NARROWS(ScopedEnumBackedByInt, unsigned short);
+ NARROWS_IF(ScopedEnumBackedByUInt, unsigned short, (sizeof(int) > sizeof(short)));
+ NARROWS(ScopedEnumBackedByLong, unsigned short);
+ NARROWS_IF(ScopedEnumBackedByULong, unsigned short, (sizeof(long) > sizeof(short)));
+ NARROWS(ScopedEnumBackedByLongLong, unsigned short);
+ NARROWS_IF(ScopedEnumBackedByULongLong, unsigned short, (sizeof(long long) > sizeof(short)));
+
+ NARROWS_IF(ScopedEnumBackedByLong, int, (sizeof(long) > sizeof(int)));
+ NARROWS(ScopedEnumBackedByULong, int);
+ NARROWS_IF(ScopedEnumBackedByLongLong, int, (sizeof(long long) > sizeof(int)));
+ NARROWS(ScopedEnumBackedByULongLong, int);
+
+ NARROWS(ScopedEnumBackedByLong, unsigned int);
+ NARROWS_IF(ScopedEnumBackedByULong, unsigned int, (sizeof(long) > sizeof(int)));
+ NARROWS(ScopedEnumBackedByLongLong, unsigned int);
+ NARROWS_IF(ScopedEnumBackedByULongLong, unsigned int, (sizeof(long long) > sizeof(int)));
+
+ NARROWS_IF(ScopedEnumBackedByLongLong, long, (sizeof(long long) > sizeof(long)));
+ NARROWS(ScopedEnumBackedByULongLong, long);
+
+ NARROWS(ScopedEnumBackedByLongLong, unsigned long);
+ NARROWS_IF(ScopedEnumBackedByULongLong, unsigned long, (sizeof(long long) > sizeof(long)));
// different signedness of the underlying type
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<SignedUnscopedEnum, unsigned char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<SignedUnscopedEnum, unsigned short>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<SignedUnscopedEnum, unsigned int>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<SignedUnscopedEnum, unsigned long>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<SignedUnscopedEnum, unsigned long long>::value));
-
-
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedBySChar, unsigned char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedBySChar, unsigned short>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedBySChar, unsigned int>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedBySChar, unsigned long>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedBySChar, unsigned long long>::value));
-
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByShort, unsigned char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByShort, unsigned short>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByShort, unsigned int>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByShort, unsigned long>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByShort, unsigned long long>::value));
-
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByInt, unsigned char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByInt, unsigned short>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByInt, unsigned int>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByInt, unsigned long>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByInt, unsigned long long>::value));
-
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByLong, unsigned char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByLong, unsigned short>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByLong, unsigned int>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByLong, unsigned long>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByLong, unsigned long long>::value));
-
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByLongLong, unsigned char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByLongLong, unsigned short>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByLongLong, unsigned int>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByLongLong, unsigned long>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByLongLong, unsigned long long>::value));
-
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByUChar, signed char>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByUChar, short>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByUChar, int>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByUChar, long>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByUChar, long long>::value));
-
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByUShort, signed char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByUShort, short>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByUShort, int>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByUShort, long>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByUShort, long long>::value));
-
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByUInt, signed char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByUInt, short>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByUInt, int>::value));
- QCOMPARE((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByUInt, long>::value), sizeof(ScopedEnumBackedByUInt) >= sizeof(long));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByUInt, long long>::value));
-
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByULong, signed char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByULong, short>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByULong, int>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByULong, long>::value));
- QCOMPARE((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByULong, long long>::value), sizeof(ScopedEnumBackedByULong) >= sizeof(long long));
-
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByULongLong, signed char>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByULongLong, short>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByULongLong, int>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByULongLong, long>::value));
- QVERIFY((QtPrivate::AreArgumentsNarrowedBase<ScopedEnumBackedByULongLong, long long>::value));
+ NARROWS(SignedUnscopedEnum, unsigned char);
+ NARROWS(SignedUnscopedEnum, unsigned short);
+ NARROWS(SignedUnscopedEnum, unsigned int);
+ NARROWS(SignedUnscopedEnum, unsigned long);
+ NARROWS(SignedUnscopedEnum, unsigned long long);
+
+ NARROWS(ScopedEnumBackedBySChar, unsigned char);
+ NARROWS(ScopedEnumBackedBySChar, unsigned short);
+ NARROWS(ScopedEnumBackedBySChar, unsigned int);
+ NARROWS(ScopedEnumBackedBySChar, unsigned long);
+ NARROWS(ScopedEnumBackedBySChar, unsigned long long);
+
+ NARROWS(ScopedEnumBackedByShort, unsigned char);
+ NARROWS(ScopedEnumBackedByShort, unsigned short);
+ NARROWS(ScopedEnumBackedByShort, unsigned int);
+ NARROWS(ScopedEnumBackedByShort, unsigned long);
+ NARROWS(ScopedEnumBackedByShort, unsigned long long);
+
+ NARROWS(ScopedEnumBackedByInt, unsigned char);
+ NARROWS(ScopedEnumBackedByInt, unsigned short);
+ NARROWS(ScopedEnumBackedByInt, unsigned int);
+ NARROWS(ScopedEnumBackedByInt, unsigned long);
+ NARROWS(ScopedEnumBackedByInt, unsigned long long);
+
+ NARROWS(ScopedEnumBackedByLong, unsigned char);
+ NARROWS(ScopedEnumBackedByLong, unsigned short);
+ NARROWS(ScopedEnumBackedByLong, unsigned int);
+ NARROWS(ScopedEnumBackedByLong, unsigned long);
+ NARROWS(ScopedEnumBackedByLong, unsigned long long);
+
+ NARROWS(ScopedEnumBackedByLongLong, unsigned char);
+ NARROWS(ScopedEnumBackedByLongLong, unsigned short);
+ NARROWS(ScopedEnumBackedByLongLong, unsigned int);
+ NARROWS(ScopedEnumBackedByLongLong, unsigned long);
+ NARROWS(ScopedEnumBackedByLongLong, unsigned long long);
+
+ NARROWS(ScopedEnumBackedByUChar, signed char);
+ FITS_IF(ScopedEnumBackedByUChar, short, (sizeof(char) < sizeof(short)));
+ FITS_IF(ScopedEnumBackedByUChar, int, (sizeof(char) < sizeof(int)));
+ FITS_IF(ScopedEnumBackedByUChar, long, (sizeof(char) < sizeof(long)));
+ FITS_IF(ScopedEnumBackedByUChar, long long, (sizeof(char) < sizeof(long long)));
+
+ NARROWS(ScopedEnumBackedByUShort, signed char);
+ NARROWS(ScopedEnumBackedByUShort, short);
+ FITS_IF(ScopedEnumBackedByUShort, int, (sizeof(short) < sizeof(int)));
+ FITS_IF(ScopedEnumBackedByUShort, long, (sizeof(short) < sizeof(long)));
+ FITS_IF(ScopedEnumBackedByUShort, long long, (sizeof(short) < sizeof(long long)));
+
+ NARROWS(ScopedEnumBackedByUInt, signed char);
+ NARROWS(ScopedEnumBackedByUInt, short);
+ NARROWS(ScopedEnumBackedByUInt, int);
+ FITS_IF(ScopedEnumBackedByUInt, long, (sizeof(ScopedEnumBackedByUInt) < sizeof(long)));
+ FITS(ScopedEnumBackedByUInt, long long);
+
+ NARROWS(ScopedEnumBackedByULong, signed char);
+ NARROWS(ScopedEnumBackedByULong, short);
+ NARROWS(ScopedEnumBackedByULong, int);
+ NARROWS(ScopedEnumBackedByULong, long);
+ FITS_IF(ScopedEnumBackedByULong, long long, (sizeof(ScopedEnumBackedByULong) < sizeof(long long)));
+
+ NARROWS(ScopedEnumBackedByULongLong, signed char);
+ NARROWS(ScopedEnumBackedByULongLong, short);
+ NARROWS(ScopedEnumBackedByULongLong, int);
+ NARROWS(ScopedEnumBackedByULongLong, long);
+ NARROWS(ScopedEnumBackedByULongLong, long long);
// other types which should be always unaffected
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<void *, void *>::value));
+ FITS(void *, void *);
+
+ FITS(QString, QString);
+ FITS(QString &, QString &);
+ FITS(const QString &, const QString &);
+
+ FITS(QObject, QObject);
+ FITS(QObject *, QObject *);
+ FITS(const QObject *, const QObject *);
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<QString, QString>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<QString &, QString &>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<const QString &, const QString &>::value));
+ FITS(std::nullptr_t, std::nullptr_t);
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<QObject, QObject>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<QObject *, QObject *>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<const QObject *, const QObject *>::value));
+ FITS(QString, QObject);
+ FITS(QString, QVariant);
+ FITS(QString, void *);
+ FITS(QString, long long);
+ FITS(bool, const QObject *&);
+ FITS(int (*)(bool), void (QObject::*)());
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<std::nullptr_t, std::nullptr_t>::value));
+#undef IS_UNSCOPED_ENUM_SIGNED
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<QString, QObject>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<QString, QVariant>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<QString, void *>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<QString, long long>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<bool, const QObject *&>::value));
- QVERIFY((!QtPrivate::AreArgumentsNarrowedBase<int (*)(bool), void (QObject::*)()>::value));
+#undef NARROWS_IF
+#undef FITS_IF
+#undef NARROWS
+#undef FITS
}
// Test for QtPrivate::HasQ_OBJECT_Macro
diff --git a/tests/auto/corelib/kernel/qsocketnotifier/tst_qsocketnotifier.cpp b/tests/auto/corelib/kernel/qsocketnotifier/tst_qsocketnotifier.cpp
index a52b80170f..e3f45df27d 100644
--- a/tests/auto/corelib/kernel/qsocketnotifier/tst_qsocketnotifier.cpp
+++ b/tests/auto/corelib/kernel/qsocketnotifier/tst_qsocketnotifier.cpp
@@ -350,6 +350,9 @@ void tst_QSocketNotifier::async_writeDatagramSlot()
void tst_QSocketNotifier::asyncMultipleDatagram()
{
+#ifdef Q_OS_WINRT
+ QSKIP("WinRT does not allow connection to localhost", SkipAll);
+#else
m_asyncSender = new QUdpSocket;
m_asyncReceiver = new QUdpSocket;
@@ -379,6 +382,7 @@ void tst_QSocketNotifier::asyncMultipleDatagram()
delete m_asyncSender;
delete m_asyncReceiver;
+ #endif // !Q_OS_WINRT
}
QTEST_MAIN(tst_QSocketNotifier)
diff --git a/tests/auto/corelib/tools/qhash/tst_qhash.cpp b/tests/auto/corelib/tools/qhash/tst_qhash.cpp
index 0c5f1a7afb..943b4316ff 100644
--- a/tests/auto/corelib/tools/qhash/tst_qhash.cpp
+++ b/tests/auto/corelib/tools/qhash/tst_qhash.cpp
@@ -51,7 +51,7 @@ private slots:
void contains(); // copied from tst_QMap
void qhash();
void take(); // copied from tst_QMap
- void operator_eq(); // copied from tst_QMap
+ void operator_eq(); // slightly modified from tst_QMap
void rehash_isnt_quadratic();
void dont_need_default_constructor();
void qmultihash_specific();
@@ -771,7 +771,7 @@ void tst_QHash::take()
QVERIFY(!map.contains(3));
}
-//copied from tst_QMap
+// slightly modified from tst_QMap
void tst_QHash::operator_eq()
{
{
@@ -848,6 +848,71 @@ void tst_QHash::operator_eq()
QVERIFY(a != b);
QVERIFY(!(a == b));
}
+
+ // unlike multi-maps, multi-hashes should be equal iff their contents are equal,
+ // regardless of insertion or iteration order
+
+ {
+ QHash<int, int> a;
+ QHash<int, int> b;
+
+ a.insertMulti(0, 0);
+ a.insertMulti(0, 1);
+
+ b.insertMulti(0, 1);
+ b.insertMulti(0, 0);
+
+ QVERIFY(a == b);
+ QVERIFY(!(a != b));
+ }
+
+ {
+ QHash<int, int> a;
+ QHash<int, int> b;
+
+ enum { Count = 100 };
+
+ for (int key = 0; key < Count; ++key) {
+ for (int value = 0; value < Count; ++value)
+ a.insertMulti(key, value);
+ }
+
+ for (int key = Count - 1; key >= 0; --key) {
+ for (int value = 0; value < Count; ++value)
+ b.insertMulti(key, value);
+ }
+
+ QVERIFY(a == b);
+ QVERIFY(!(a != b));
+ }
+
+ {
+ QHash<int, int> a;
+ QHash<int, int> b;
+
+ enum {
+ Count = 100,
+ KeyStep = 17, // coprime with Count
+ ValueStep = 23, // coprime with Count
+ };
+
+ for (int key = 0; key < Count; ++key) {
+ for (int value = 0; value < Count; ++value)
+ a.insertMulti(key, value);
+ }
+
+ // Generates two permutations of [0, Count) for the keys and values,
+ // so that b will be identical to a, just built in a very different order.
+
+ for (int k = 0; k < Count; ++k) {
+ const int key = (k * KeyStep) % Count;
+ for (int v = 0; v < Count; ++v)
+ b.insertMulti(key, (v * ValueStep) % Count);
+ }
+
+ QVERIFY(a == b);
+ QVERIFY(!(a != b));
+ }
}
void tst_QHash::compare()
diff --git a/tests/auto/dbus/qdbusabstractadaptor/myobject.h b/tests/auto/dbus/qdbusabstractadaptor/myobject.h
index 1d9b33ccd8..fe3f6f3dd2 100644
--- a/tests/auto/dbus/qdbusabstractadaptor/myobject.h
+++ b/tests/auto/dbus/qdbusabstractadaptor/myobject.h
@@ -242,10 +242,13 @@ public:
{
case 4:
if4 = new Interface4(this);
+ Q_FALLTHROUGH();
case 3:
if3 = new Interface3(this);
+ Q_FALLTHROUGH();
case 2:
if2 = new Interface2(this);
+ Q_FALLTHROUGH();
case 1:
if1 = new Interface1(this);
}
@@ -270,4 +273,4 @@ signals:
void nonScriptableSignalVoid();
};
-#endif // MYOBJECT_H \ No newline at end of file
+#endif // MYOBJECT_H
diff --git a/tests/auto/dbus/qdbusmarshall/common.h b/tests/auto/dbus/qdbusmarshall/common.h
index f37ba47508..44346cd6f2 100644
--- a/tests/auto/dbus/qdbusmarshall/common.h
+++ b/tests/auto/dbus/qdbusmarshall/common.h
@@ -437,7 +437,7 @@ bool compareToArgument(const QDBusArgument &arg, const QVariant &v2)
case QVariant::DateTime:
return compare<QDateTime>(arg, v2);
default:
- register int id = v2.userType();
+ int id = v2.userType();
if (id == qMetaTypeId<QDBusObjectPath>())
return compare<QDBusObjectPath>(arg, v2);
else if (id == qMetaTypeId<QDBusSignature>())
diff --git a/tests/auto/gui/kernel/qinputmethod/tst_qinputmethod.cpp b/tests/auto/gui/kernel/qinputmethod/tst_qinputmethod.cpp
index d024538ee0..509f8bd45f 100644
--- a/tests/auto/gui/kernel/qinputmethod/tst_qinputmethod.cpp
+++ b/tests/auto/gui/kernel/qinputmethod/tst_qinputmethod.cpp
@@ -287,6 +287,11 @@ void tst_qinputmethod::inputMethodAccepted()
if (!QGuiApplication::platformName().compare(QLatin1String("wayland"), Qt::CaseInsensitive))
QSKIP("Wayland: This fails. Figure out why.");
+ if (!QGuiApplication::platformName().compare(QLatin1String("minimal"), Qt::CaseInsensitive)
+ || !QGuiApplication::platformName().compare(QLatin1String("offscreen"), Qt::CaseInsensitive)) {
+ QSKIP("minimal/offscreen: This fails. Figure out why.");
+ }
+
if (!QGuiApplication::platformName().compare(QLatin1String("xcb"), Qt::CaseInsensitive))
QSKIP("XCB: depends on dedicated platform context.");
diff --git a/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp b/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp
index 0196c7d72c..4cccf08086 100644
--- a/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp
+++ b/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp
@@ -1829,6 +1829,12 @@ void tst_QWindow::initialSize()
}
}
+static bool isPlatformOffscreenOrMinimal()
+{
+ return ((QGuiApplication::platformName() == QLatin1String("offscreen"))
+ || (QGuiApplication::platformName() == QLatin1String("minimal")));
+}
+
void tst_QWindow::modalDialog()
{
if (!QGuiApplication::platformName().compare(QLatin1String("wayland"), Qt::CaseInsensitive))
@@ -1853,8 +1859,7 @@ void tst_QWindow::modalDialog()
QGuiApplication::sync();
QGuiApplication::processEvents();
- if (!QGuiApplication::platformName().compare(QLatin1String("offscreen"), Qt::CaseInsensitive)
- || !QGuiApplication::platformName().compare(QLatin1String("minimal"), Qt::CaseInsensitive)) {
+ if (isPlatformOffscreenOrMinimal()) {
QWARN("Focus stays in normalWindow on offscreen/minimal platforms");
QTRY_COMPARE(QGuiApplication::focusWindow(), &normalWindow);
return;
@@ -1899,8 +1904,7 @@ void tst_QWindow::modalDialogClosingOneOfTwoModal()
QGuiApplication::sync();
QGuiApplication::processEvents();
- if (!QGuiApplication::platformName().compare(QLatin1String("offscreen"), Qt::CaseInsensitive)
- || !QGuiApplication::platformName().compare(QLatin1String("minimal"), Qt::CaseInsensitive)) {
+ if (isPlatformOffscreenOrMinimal()) {
QWARN("Focus is lost when closing modal dialog on offscreen/minimal platforms");
QTRY_COMPARE(QGuiApplication::focusWindow(), nullptr);
return;
@@ -1994,6 +1998,9 @@ void tst_QWindow::modalWindowEnterEventOnHide_QTBUG35109()
if (QGuiApplication::platformName() == QLatin1String("cocoa"))
QSKIP("This test fails on OS X on CI");
+ if (isPlatformOffscreenOrMinimal())
+ QSKIP("Can't test window focusing on offscreen/minimal");
+
const QPoint center = QGuiApplication::primaryScreen()->availableGeometry().center();
const int childOffset = 16;
diff --git a/tests/auto/gui/painting/qpainter/tst_qpainter.cpp b/tests/auto/gui/painting/qpainter/tst_qpainter.cpp
index 3562bc63f4..8db4489ec1 100644
--- a/tests/auto/gui/painting/qpainter/tst_qpainter.cpp
+++ b/tests/auto/gui/painting/qpainter/tst_qpainter.cpp
@@ -3004,6 +3004,10 @@ void fpe_steepSlopes()
void fpe_radialGradients()
{
+#if defined(Q_PROCESSOR_ARM)
+ QEXPECT_FAIL("", "Test fails for ARM (QTBUG-59961)", Continue);
+#endif
+
FpExceptionChecker checker(FE_UNDERFLOW | FE_OVERFLOW | FE_INVALID | FE_DIVBYZERO);
QImage img(21, 21, QImage::Format_ARGB32_Premultiplied);
diff --git a/tests/auto/gui/painting/qpainterpath/tst_qpainterpath.cpp b/tests/auto/gui/painting/qpainterpath/tst_qpainterpath.cpp
index 98f63984b3..757e4d16e4 100644
--- a/tests/auto/gui/painting/qpainterpath/tst_qpainterpath.cpp
+++ b/tests/auto/gui/painting/qpainterpath/tst_qpainterpath.cpp
@@ -99,6 +99,9 @@ private slots:
void translate();
void lineWithinBounds();
+
+ void intersectionEquality();
+ void intersectionPointOnEdge();
};
void tst_QPainterPath::cleanupTestCase()
@@ -1313,6 +1316,64 @@ void tst_QPainterPath::lineWithinBounds()
}
}
+void tst_QPainterPath::intersectionEquality()
+{
+ // Test case from QTBUG-17027
+ QPainterPath p1;
+ p1.moveTo(256.0000000000000000, 135.8384137532701743);
+ p1.lineTo(50.9999999999999715, 107.9999999999999857);
+ p1.lineTo(233.5425474228109123, 205.3560252921671462);
+ p1.lineTo(191.7771366877784373, 318.0257074407572304);
+ p1.lineTo(-48.2616272048215151, 229.0459803737862216);
+ p1.lineTo(0.0000000000000000, 98.8515898136580801);
+ p1.lineTo(0.0000000000000000, 0.0000000000000000);
+ p1.lineTo(256.0000000000000000, 0.0000000000000000);
+ p1.lineTo(256.0000000000000000, 135.8384137532701743);
+
+ QPainterPath p2;
+ p2.moveTo(1516.2703263523442274, 306.9795200262722119);
+ p2.lineTo(-1296.8426224886295585, -75.0331736542986931);
+ p2.lineTo(-1678.8553161692004778, 2738.0797751866753060);
+ p2.lineTo(1134.2576326717733081, 3120.0924688672457705);
+ p2.lineTo(1516.2703263523442274, 306.9795200262722119);
+
+ QPainterPath i1 = p1.intersected(p2);
+ QPainterPath i2 = p2.intersected(p1);
+ QVERIFY(i1 == i2 || i1.toReversed() == i2);
+
+ p1 = QPainterPath();
+ p1.moveTo(256.00000000, 135.83841375);
+ p1.lineTo(50.99999999, 107.99999999);
+ p1.lineTo(233.54254742, 205.35602529);
+ p1.lineTo(191.77713668, 318.02570744);
+ p1.lineTo(-48.26162720, 229.04598037);
+ p1.lineTo(0.00000000, 98.85158981);
+ p1.lineTo(0.00000000, 0.00000000);
+ p1.lineTo(256.00000000, 0.00000000);
+ p1.lineTo(256.00000000, 135.83841375);
+
+ p2 = QPainterPath();
+ p2.moveTo(1516.27032635, 306.97952002);
+ p2.lineTo(-1296.84262248, -75.03317365);
+ p2.lineTo(-1678.85531616, 2738.07977518);
+ p2.lineTo(1134.25763267, 3120.09246886);
+ p2.lineTo(1516.27032635, 306.97952002);
+
+ i1 = p1.intersected(p2);
+ i2 = p2.intersected(p1);
+ QVERIFY(i1 == i2 || i1.toReversed() == i2);
+}
+
+void tst_QPainterPath::intersectionPointOnEdge()
+{
+ // From QTBUG-31551
+ QPainterPath p; p.addRoundedRect(-10, 10, 40, 40, 10, 10);
+ QRectF r(0, 0, 100, 100);
+ QPainterPath rp; rp.addRect(r);
+ QVERIFY(!p.intersected(rp).isEmpty());
+ QVERIFY(p.intersects(rp));
+ QVERIFY(p.intersects(r));
+}
QTEST_APPLESS_MAIN(tst_QPainterPath)
diff --git a/tests/auto/other/qaccessibilitymac/tst_qaccessibilitymac.cpp b/tests/auto/other/qaccessibilitymac/tst_qaccessibilitymac.cpp
index efa724b730..13c933aa14 100644
--- a/tests/auto/other/qaccessibilitymac/tst_qaccessibilitymac.cpp
+++ b/tests/auto/other/qaccessibilitymac/tst_qaccessibilitymac.cpp
@@ -94,9 +94,6 @@ void tst_QAccessibilityMac::cleanup()
void tst_QAccessibilityMac::singleWidgetTest()
{
- if (!macNativeAccessibilityEnabled())
- return;
-
delete m_window;
m_window = 0;
@@ -105,9 +102,6 @@ void tst_QAccessibilityMac::singleWidgetTest()
void tst_QAccessibilityMac::lineEditTest()
{
- if (!macNativeAccessibilityEnabled())
- return;
-
QLineEdit *lineEdit = new QLineEdit(m_window);
lineEdit->setText("a11y test QLineEdit");
m_window->addWidget(lineEdit);
@@ -119,9 +113,6 @@ void tst_QAccessibilityMac::lineEditTest()
void tst_QAccessibilityMac::hierarchyTest()
{
- if (!macNativeAccessibilityEnabled())
- return;
-
QWidget *w = new QWidget(m_window);
m_window->addWidget(w);
@@ -141,17 +132,11 @@ void tst_QAccessibilityMac::hierarchyTest()
void tst_QAccessibilityMac::notificationsTest()
{
- if (!macNativeAccessibilityEnabled())
- return;
-
QVERIFY(notifications(m_window));
}
void tst_QAccessibilityMac::checkBoxTest()
{
- if (!macNativeAccessibilityEnabled())
- return;
-
QCheckBox *cb = new QCheckBox(m_window);
cb->setText("Great option");
m_window->addWidget(cb);
diff --git a/tests/auto/other/qaccessibilitymac/tst_qaccessibilitymac_helpers.h b/tests/auto/other/qaccessibilitymac/tst_qaccessibilitymac_helpers.h
index 5f10513bb5..75b2d39a00 100644
--- a/tests/auto/other/qaccessibilitymac/tst_qaccessibilitymac_helpers.h
+++ b/tests/auto/other/qaccessibilitymac/tst_qaccessibilitymac_helpers.h
@@ -33,8 +33,6 @@
QT_USE_NAMESPACE
-bool macNativeAccessibilityEnabled();
-bool trusted();
bool testLineEdit();
bool testHierarchy(QWidget *w);
bool singleWidget();
diff --git a/tests/auto/other/qaccessibilitymac/tst_qaccessibilitymac_helpers.mm b/tests/auto/other/qaccessibilitymac/tst_qaccessibilitymac_helpers.mm
index fb030aa4be..e9407fd903 100644
--- a/tests/auto/other/qaccessibilitymac/tst_qaccessibilitymac_helpers.mm
+++ b/tests/auto/other/qaccessibilitymac/tst_qaccessibilitymac_helpers.mm
@@ -42,19 +42,6 @@
QT_USE_NAMESPACE
-bool macNativeAccessibilityEnabled()
-{
- bool enabled = AXAPIEnabled();
- if (!enabled)
- qWarning() << "Accessibility is disabled (check System Preferences) skipping test.";
- return enabled;
-}
-
-bool trusted()
-{
- return AXIsProcessTrusted();
-}
-
struct AXErrorTag {
AXError err;
explicit AXErrorTag(AXError theErr) : err(theErr) {}
@@ -413,12 +400,6 @@ bool singleWidget()
bool testLineEdit()
{
-// not sure if this is needed. on my machine the calls succeed.
-// NSString *path = @"/Users/frederik/qt5/qtbase/tests/auto/other/qaccessibilitymac/tst_qaccessibilitymac.app/Contents/MacOS/tst_qaccessibilitymac";
-// NSString *path = @"/Users/frederik/qt5/qtbase/tests/auto/other/qaccessibilitymac/tst_qaccessibilitymac.app";
-// AXError e = AXMakeProcessTrusted((CFStringRef) path);
-// NSLog(@"error: %i", e);
-
TestAXObject *appObject = [TestAXObject getApplicationAXObject];
EXPECT(appObject);
diff --git a/tests/auto/widgets/graphicsview/qgraphicsscene/BLACKLIST b/tests/auto/widgets/graphicsview/qgraphicsscene/BLACKLIST
new file mode 100644
index 0000000000..c6f69a51a5
--- /dev/null
+++ b/tests/auto/widgets/graphicsview/qgraphicsscene/BLACKLIST
@@ -0,0 +1,3 @@
+[removeItem]
+# QTBUG-60754, QTest::mouseMove is not always respected, or the CI moves the cursor
+osx-10.11 ci
diff --git a/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp b/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp
index 76b25cdb52..1a96180c05 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp
+++ b/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp
@@ -4804,8 +4804,12 @@ public:
void tst_QGraphicsView::hoverLeave()
{
- if (platformName == QStringLiteral("cocoa"))
+ if (platformName == QStringLiteral("cocoa")) {
QSKIP("Insignificant on OSX");
+ } else if (platformName == QStringLiteral("minimal")
+ || (platformName == QStringLiteral("offscreen"))) {
+ QSKIP("Fails in minimal/offscreen platforms if forwardMouseDoubleClick has been run");
+ }
const QRect availableGeometry = QGuiApplication::primaryScreen()->availableGeometry();
QGraphicsScene scene;
QGraphicsView view(&scene);
diff --git a/tests/auto/widgets/kernel/qapplication/BLACKLIST b/tests/auto/widgets/kernel/qapplication/BLACKLIST
index 6abb1d9988..f4a9cb6166 100644
--- a/tests/auto/widgets/kernel/qapplication/BLACKLIST
+++ b/tests/auto/widgets/kernel/qapplication/BLACKLIST
@@ -1,4 +1,2 @@
[quitOnLastWindowClosed]
osx-10.10
-[touchEventPropagation]
-xcb
diff --git a/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp b/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp
index 49095b9625..b98cc048c8 100644
--- a/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp
+++ b/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp
@@ -1987,7 +1987,7 @@ void tst_QApplication::touchEventPropagation()
window.show();
QVERIFY(QTest::qWaitForWindowExposed(&window));
const QPoint deviceGlobalPos =
- QHighDpi::toNativePixels(window.mapToGlobal(QPoint(50, 50)), window.windowHandle()->screen());
+ QHighDpi::toNativePixels(window.mapToGlobal(QPoint(50, 150)), window.windowHandle()->screen());
pressedTouchPoints[0].setScreenPos(deviceGlobalPos);
releasedTouchPoints[0].setScreenPos(deviceGlobalPos);
diff --git a/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp b/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp
index 4d57b85f9a..9a0ca0565e 100644
--- a/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp
+++ b/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp
@@ -824,6 +824,12 @@ void tst_QMenuBar::check_escKey()
if (!QApplication::style()->inherits("QWindowsStyle"))
return;
+ if (!QGuiApplication::platformName().compare(QLatin1String("minimal"), Qt::CaseInsensitive)
+ || !QGuiApplication::platformName().compare(QLatin1String("offscreen"), Qt::CaseInsensitive)) {
+ QWARN("Skipping menu button test on minimal/offscreen platforms");
+ return;
+ }
+
// If we press Down the popupmenu should be active again
QTest::keyClick(static_cast<QWidget *>(0), Qt::Key_Down );
QVERIFY( !menu.menus.at(0)->isActiveWindow() );
@@ -1196,6 +1202,11 @@ void tst_QMenuBar::task223138_triggered()
void tst_QMenuBar::task256322_highlight()
{
+ if (!QGuiApplication::platformName().compare(QLatin1String("minimal"), Qt::CaseInsensitive)
+ || !QGuiApplication::platformName().compare(QLatin1String("offscreen"), Qt::CaseInsensitive)) {
+ QSKIP("Highlighting does not work correctly for minimal/offscreen platforms");
+ }
+
QMainWindow win;
win.menuBar()->setNativeMenuBar(false); //we can't check the geometry of native menubars
QMenu menu;
diff --git a/util/includemocs/includemocs.pl b/util/includemocs/includemocs.pl
new file mode 100755
index 0000000000..ce04d961d8
--- /dev/null
+++ b/util/includemocs/includemocs.pl
@@ -0,0 +1,138 @@
+#!/usr/bin/perl
+#############################################################################
+##
+## Copyright (C) 2017 Intel Corporation.
+## Contact: https://www.qt.io/licensing/
+##
+## This file is the build configuration utility of the Qt Toolkit.
+##
+## $QT_BEGIN_LICENSE:GPL-EXCEPT$
+## Commercial License Usage
+## Licensees holding valid commercial Qt licenses may use this file in
+## accordance with the commercial license agreement provided with the
+## Software or, alternatively, in accordance with the terms contained in
+## a written agreement between you and The Qt Company. For licensing terms
+## and conditions see https://www.qt.io/terms-conditions. For further
+## information use the contact form at https://www.qt.io/contact-us.
+##
+## GNU General Public License Usage
+## Alternatively, this file may be used under the terms of the GNU
+## General Public License version 3 as published by the Free Software
+## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+## included in the packaging of this file. Please review the following
+## information to ensure the GNU General Public License requirements will
+## be met: https://www.gnu.org/licenses/gpl-3.0.html.
+##
+## $QT_END_LICENSE$
+##
+#############################################################################
+use strict;
+
+MAKEFILE: while ($_ = shift @ARGV) {
+ chdir($ENV{PWD});
+ open MAKEFILE, "<", $_
+ or die("Could not open Makefile");
+ print "includemocs.pl: Processing $_\n";
+
+ my $srcdir;
+ my $sourcesline;
+
+ # Find "SOURCES =" line
+ while (<MAKEFILE>) {
+ $srcdir = $1 if m,^# Project:\s+(.*)/[^/]+.pro,;
+ if (/^# Template:\s+(\w+)/) {
+ next MAKEFILE if $1 eq "subdirs";
+ }
+ if (/^SOURCES\s*=\s*(.*)/) {
+ $sourcesline = $1;
+ last;
+ }
+ }
+ if ($sourcesline =~ s/\s+\\//) {
+ # continuation
+ while (<MAKEFILE>) {
+ chomp;
+ /^\s*([^ ]+)/;
+ $sourcesline .= " $1";
+ last unless m/\\$/;
+ }
+ }
+ close MAKEFILE;
+
+ # Now parse the sources
+ my @mocs;
+ my @sources;
+ for (split(/ /, $sourcesline)) {
+ if (/\.moc\/(moc_.*\.cpp)/) {
+ push @mocs, $1;
+ } elsif (/^\.(rcc|uic)/) {
+ # ignore
+ } else {
+ push @sources, $_;
+ }
+ }
+
+ chdir($srcdir) or die("Where's $srcdir? $!");
+ for my $moc (@mocs) {
+ my $include = "#include \"$moc\"\n";
+
+ # Find a corresponding .cpp file to host the new #include
+ my $basename = ($moc =~ s/^moc_//r);
+ $basename =~ s/\.[^.]+//;
+ my @candidates = grep { m,\Q/$basename.\E, } @sources;
+
+ if (scalar @candidates == 0) {
+ # Try without a _p suffix
+ $basename =~ s/_p$//;
+ @candidates = grep { m,\Q/$basename.\E, } @sources;
+ }
+ if (scalar @candidates == 0) {
+ print STDERR "includemocs.pl: Cannot find .cpp file for $moc\n";
+ next;
+ }
+
+ my $cpp = $candidates[0];
+ undef @candidates;
+
+ #print "$moc -> $cpp\n";
+ open CPP, "<", $cpp
+ or die("Cannot open source $cpp: $!");
+
+ my @lines;
+ while (<CPP>) {
+ push @lines, $_;
+ next unless defined($include);
+
+ # Print the new include next to a pre-existing moc include
+ if (/#include \"moc_/ || /#include ".*\.moc"/) {
+ push @lines, $include;
+ undef $include;
+ }
+ }
+ close CPP;
+
+ if (defined($include)) {
+ # Try to insert the new #include between QT_END_NAMESPACE and any #endif lines
+ my $n = 0;
+ my $extrablank = "";
+ while (defined($include)) {
+ --$n;
+ $_ = $lines[$n];
+ if (/^#endif/) {
+ $extrablank = "\n";
+ next;
+ }
+
+ $_ .= "\n" unless /^$/;
+ splice @lines, $n, 1, ($_, $include, $extrablank);
+ undef $include;
+ }
+ }
+
+ # Write the file again
+ open CPP, ">", $cpp
+ or die("Cannot open source $cpp for writing: $!");
+ map { print CPP $_; } @lines;
+ close CPP;
+ }
+}