diff --git a/src/testlib/qsignalspy.h b/src/testlib/qsignalspy.h
index cfde89a..1751220 100644
--- a/src/testlib/qsignalspy.h
+++ b/src/testlib/qsignalspy.h
@@ -82,7 +82,7 @@ public:
         }
 
         if (!QMetaObject::connect(obj, sigIndex, this, memberOffset,
-                    Qt::DirectConnection, 0)) {
+                    Qt::DirectConnection, Q_NULLPTR)) {
             qWarning("QSignalSpy: QMetaObject::connect returned false. Unable to connect.");
             return;
         }
diff --git a/src/testlib/qtest.h b/src/testlib/qtest.h
index 9941799..8da16af 100644
--- a/src/testlib/qtest.h
+++ b/src/testlib/qtest.h
@@ -51,6 +51,9 @@
 #include <QtCore/qsize.h>
 #include <QtCore/qrect.h>
 
+#ifdef QT_NETWORK_LIB
+#  include <QtNetwork/qhostaddress.h>
+#endif
 
 QT_BEGIN_NAMESPACE
 
@@ -162,6 +165,23 @@ template<> inline char *toString(const QVariant &v)
     return qstrdup(vstring.constData());
 }
 
+#ifdef QT_NETWORK_LIB
+template<> inline char *toString(const QHostAddress &addr)
+{
+    switch (addr.protocol()) {
+    case QAbstractSocket::UnknownNetworkLayerProtocol:
+        return qstrdup("<unknown address (parse error)>");
+    case QAbstractSocket::AnyIPProtocol:
+        return qstrdup("QHostAddress::Any");
+    case QAbstractSocket::IPv4Protocol:
+    case QAbstractSocket::IPv6Protocol:
+        break;
+    }
+
+    return qstrdup(addr.toString().toLatin1().constData());
+}
+#endif
+
 template<>
 inline bool qCompare(QString const &t1, QLatin1String const &t2, const char *actual,
                     const char *expected, const char *file, int line)
@@ -205,7 +225,7 @@ inline bool qCompare(QList<T> const &t1, QList<T> const &t2, const char *actual,
             delete [] val2;
         }
     }
-    return compare_helper(isOk, msg, 0, 0, actual, expected, file, line);
+    return compare_helper(isOk, msg, Q_NULLPTR, Q_NULLPTR, actual, expected, file, line);
 }
 
 template <>
diff --git a/src/testlib/qtest_gui.h b/src/testlib/qtest_gui.h
index a474758..beae9ec 100644
--- a/src/testlib/qtest_gui.h
+++ b/src/testlib/qtest_gui.h
@@ -86,24 +86,24 @@ inline bool qCompare(QImage const &t1, QImage const &t2,
         qsnprintf(msg, 1024, "Compared QImages differ.\n"
                   "   Actual   (%s).isNull(): %d\n"
                   "   Expected (%s).isNull(): %d", actual, t1Null, expected, t2Null);
-        return compare_helper(false, msg, 0, 0, actual, expected, file, line);
+        return compare_helper(false, msg, Q_NULLPTR, Q_NULLPTR, actual, expected, file, line);
     }
     if (t1Null && t2Null)
-        return compare_helper(true, 0, 0, 0, actual, expected, file, line);
+        return compare_helper(true, Q_NULLPTR, Q_NULLPTR, Q_NULLPTR, actual, expected, file, line);
     if (t1.width() != t2.width() || t1.height() != t2.height()) {
         qsnprintf(msg, 1024, "Compared QImages differ in size.\n"
                   "   Actual   (%s): %dx%d\n"
                   "   Expected (%s): %dx%d",
                   actual, t1.width(), t1.height(),
                   expected, t2.width(), t2.height());
-        return compare_helper(false, msg, 0, 0, actual, expected, file, line);
+        return compare_helper(false, msg, Q_NULLPTR, Q_NULLPTR, actual, expected, file, line);
     }
     if (t1.format() != t2.format()) {
         qsnprintf(msg, 1024, "Compared QImages differ in format.\n"
                   "   Actual   (%s): %d\n"
                   "   Expected (%s): %d",
                   actual, t1.format(), expected, t2.format());
-        return compare_helper(false, msg, 0, 0, actual, expected, file, line);
+        return compare_helper(false, msg, Q_NULLPTR, Q_NULLPTR, actual, expected, file, line);
     }
     return compare_helper(t1 == t2, "Compared values are not the same",
                           toString(t1), toString(t2), actual, expected, file, line);
@@ -120,17 +120,17 @@ inline bool qCompare(QPixmap const &t1, QPixmap const &t2, const char *actual, c
         qsnprintf(msg, 1024, "Compared QPixmaps differ.\n"
                   "   Actual   (%s).isNull(): %d\n"
                   "   Expected (%s).isNull(): %d", actual, t1Null, expected, t2Null);
-        return compare_helper(false, msg, 0, 0, actual, expected, file, line);
+        return compare_helper(false, msg, Q_NULLPTR, Q_NULLPTR, actual, expected, file, line);
     }
     if (t1Null && t2Null)
-        return compare_helper(true, 0, 0, 0, actual, expected, file, line);
+        return compare_helper(true, Q_NULLPTR, Q_NULLPTR, Q_NULLPTR, actual, expected, file, line);
     if (t1.width() != t2.width() || t1.height() != t2.height()) {
         qsnprintf(msg, 1024, "Compared QPixmaps differ in size.\n"
                   "   Actual   (%s): %dx%d\n"
                   "   Expected (%s): %dx%d",
                   actual, t1.width(), t1.height(),
                   expected, t2.width(), t2.height());
-        return compare_helper(false, msg, 0, 0, actual, expected, file, line);
+        return compare_helper(false, msg, Q_NULLPTR, Q_NULLPTR, actual, expected, file, line);
     }
     return qCompare(t1.toImage(), t2.toImage(), actual, expected, file, line);
 }
diff --git a/src/testlib/qtestaccessible.h b/src/testlib/qtestaccessible.h
index f1ac625..628145f 100644
--- a/src/testlib/qtestaccessible.h
+++ b/src/testlib/qtestaccessible.h
@@ -126,7 +126,7 @@ public:
     static void cleanup()
     {
         delete instance();
-        instance() = 0;
+        instance() = Q_NULLPTR;
     }
     static void clearEvents() { eventList().clear(); }
     static EventList events() { return eventList(); }
@@ -162,8 +162,8 @@ private:
 
     ~QTestAccessibility()
     {
-        QAccessible::installUpdateHandler(0);
-        QAccessible::installRootObjectHandler(0);
+        QAccessible::installUpdateHandler(Q_NULLPTR);
+        QAccessible::installRootObjectHandler(Q_NULLPTR);
     }
 
     static void rootObjectHandler(QObject *object)
@@ -268,7 +268,7 @@ private:
 
     static QTestAccessibility *&instance()
     {
-        static QTestAccessibility *ta = 0;
+        static QTestAccessibility *ta = Q_NULLPTR;
         return ta;
     }
 
diff --git a/src/testlib/qtestcase.h b/src/testlib/qtestcase.h
index f24283b..7d2fd2e 100644
--- a/src/testlib/qtestcase.h
+++ b/src/testlib/qtestcase.h
@@ -39,6 +39,7 @@
 #include <QtCore/qstring.h>
 #include <QtCore/qnamespace.h>
 #include <QtCore/qmetatype.h>
+#include <QtCore/qmetaobject.h>
 #include <QtCore/qtypetraits.h>
 #include <QtCore/qsharedpointer.h>
 #include <QtCore/qtemporarydir.h>
@@ -157,6 +158,15 @@ do { \
 
 #define QTRY_VERIFY(__expr) QTRY_VERIFY_WITH_TIMEOUT((__expr), 5000)
 
+// Will try to wait for the expression to become true while allowing event processing
+#define QTRY_VERIFY2_WITH_TIMEOUT(__expr, __messageExpression, __timeout) \
+do { \
+    QTRY_IMPL((__expr), __timeout);\
+    QVERIFY2(__expr, __messageExpression); \
+} while (0)
+
+#define QTRY_VERIFY2(__expr, __messageExpression) QTRY_VERIFY2_WITH_TIMEOUT((__expr), (__messageExpression), 5000)
+
 // Will try to wait for the comparison to become successful while allowing event processing
 #define QTRY_COMPARE_WITH_TIMEOUT(__expr, __expected, __timeout) \
 do { \
@@ -222,12 +232,28 @@ class QTestData;
 
 namespace QTest
 {
-    template <typename T>
-    inline char *toString(const T &)
+    namespace Internal {
+
+    template<typename T> // Output registered enums
+    inline typename QtPrivate::QEnableIf<QtPrivate::IsQEnumHelper<T>::Value, char*>::Type toString(T e)
     {
-        return 0;
+        QMetaEnum me = QMetaEnum::fromType<T>();
+        return qstrdup(me.key(e));
     }
 
+    template <typename T> // Fallback
+    inline typename QtPrivate::QEnableIf<!QtPrivate::IsQEnumHelper<T>::Value, char*>::Type toString(const T &)
+    {
+        return Q_NULLPTR;
+    }
+
+    } // namespace Internal
+
+    template<typename T>
+    inline char *toString(const T &t)
+    {
+        return Internal::toString(t);
+    }
 
     Q_TESTLIB_EXPORT char *toHexRepresentation(const char *ba, int length);
     Q_TESTLIB_EXPORT char *toPrettyCString(const char *unicode, int length);
@@ -235,10 +261,10 @@ namespace QTest
     Q_TESTLIB_EXPORT char *toString(const char *);
     Q_TESTLIB_EXPORT char *toString(const void *);
 
-    Q_TESTLIB_EXPORT int qExec(QObject *testObject, int argc = 0, char **argv = 0);
+    Q_TESTLIB_EXPORT int qExec(QObject *testObject, int argc = 0, char **argv = Q_NULLPTR);
     Q_TESTLIB_EXPORT int qExec(QObject *testObject, const QStringList &arguments);
 
-    Q_TESTLIB_EXPORT void setMainSourcePath(const char *file, const char *builddir = 0);
+    Q_TESTLIB_EXPORT void setMainSourcePath(const char *file, const char *builddir = Q_NULLPTR);
 
     Q_TESTLIB_EXPORT bool qVerify(bool statement, const char *statementStr, const char *description,
                                  const char *file, int line);
@@ -246,15 +272,15 @@ namespace QTest
     Q_TESTLIB_EXPORT void qSkip(const char *message, const char *file, int line);
     Q_TESTLIB_EXPORT bool qExpectFail(const char *dataIndex, const char *comment, TestFailMode mode,
                            const char *file, int line);
-    Q_TESTLIB_EXPORT void qWarn(const char *message, const char *file = 0, int line = 0);
+    Q_TESTLIB_EXPORT void qWarn(const char *message, const char *file = Q_NULLPTR, int line = 0);
     Q_TESTLIB_EXPORT void ignoreMessage(QtMsgType type, const char *message);
 #ifndef QT_NO_REGULAREXPRESSION
     Q_TESTLIB_EXPORT void ignoreMessage(QtMsgType type, const QRegularExpression &messagePattern);
 #endif
 
     Q_TESTLIB_EXPORT QSharedPointer<QTemporaryDir> qExtractTestData(const QString &dirName);
-    Q_TESTLIB_EXPORT QString qFindTestData(const char* basepath, const char* file = 0, int line = 0, const char* builddir = 0);
-    Q_TESTLIB_EXPORT QString qFindTestData(const QString& basepath, const char* file = 0, int line = 0, const char* builddir = 0);
+    Q_TESTLIB_EXPORT QString qFindTestData(const char* basepath, const char* file = Q_NULLPTR, int line = 0, const char* builddir = Q_NULLPTR);
+    Q_TESTLIB_EXPORT QString qFindTestData(const QString& basepath, const char* file = Q_NULLPTR, int line = 0, const char* builddir = Q_NULLPTR);
 
     Q_TESTLIB_EXPORT void *qData(const char *tagName, int typeId);
     Q_TESTLIB_EXPORT void *qGlobalData(const char *tagName, int typeId);
@@ -323,6 +349,8 @@ namespace QTest
     QTEST_COMPARE_DECL(float)
     QTEST_COMPARE_DECL(double)
     QTEST_COMPARE_DECL(char)
+    QTEST_COMPARE_DECL(signed char)
+    QTEST_COMPARE_DECL(unsigned char)
     QTEST_COMPARE_DECL(bool)
 #endif
 
@@ -392,14 +420,6 @@ namespace QTest
         return compare_string_helper(t1, t2, actual, expected, file, line);
     }
 
-    // NokiaX86 and RVCT do not like implicitly comparing bool with int
-    inline bool qCompare(bool const &t1, int const &t2,
-                    const char *actual, const char *expected, const char *file, int line)
-    {
-        return qCompare(int(t1), t2, actual, expected, file, line);
-    }
-
-
     template <class T>
     inline bool qTest(const T& actual, const char *elementName, const char *actualStr,
                      const char *expected, const char *file, int line)
diff --git a/src/testlib/qtestevent.h b/src/testlib/qtestevent.h
index a3e5f02..9794b15 100644
--- a/src/testlib/qtestevent.h
+++ b/src/testlib/qtestevent.h
@@ -185,20 +185,20 @@ public:
     inline void addKeyEvent(QTest::KeyAction action, char ascii, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1)
     { append(new QTestKeyEvent(action, ascii, modifiers, msecs)); }
 
-    inline void addMousePress(Qt::MouseButton button, Qt::KeyboardModifiers stateKey = 0,
+    inline void addMousePress(Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(),
                               QPoint pos = QPoint(), int delay=-1)
     { append(new QTestMouseEvent(QTest::MousePress, button, stateKey, pos, delay)); }
-    inline void addMouseRelease(Qt::MouseButton button, Qt::KeyboardModifiers stateKey = 0,
+    inline void addMouseRelease(Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(),
                                 QPoint pos = QPoint(), int delay=-1)
     { append(new QTestMouseEvent(QTest::MouseRelease, button, stateKey, pos, delay)); }
-    inline void addMouseClick(Qt::MouseButton button, Qt::KeyboardModifiers stateKey = 0,
+    inline void addMouseClick(Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(),
                               QPoint pos = QPoint(), int delay=-1)
     { append(new QTestMouseEvent(QTest::MouseClick, button, stateKey, pos, delay)); }
-    inline void addMouseDClick(Qt::MouseButton button, Qt::KeyboardModifiers stateKey = 0,
+    inline void addMouseDClick(Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(),
                             QPoint pos = QPoint(), int delay=-1)
     { append(new QTestMouseEvent(QTest::MouseDClick, button, stateKey, pos, delay)); }
     inline void addMouseMove(QPoint pos = QPoint(), int delay=-1)
-    { append(new QTestMouseEvent(QTest::MouseMove, Qt::NoButton, 0, pos, delay)); }
+    { append(new QTestMouseEvent(QTest::MouseMove, Qt::NoButton, Qt::KeyboardModifiers(), pos, delay)); }
 #endif //QT_GUI_LIB
 
     inline void addDelay(int msecs)
diff --git a/src/testlib/qtesteventloop.h b/src/testlib/qtesteventloop.h
index a9f611f..a8ce619 100644
--- a/src/testlib/qtesteventloop.h
+++ b/src/testlib/qtesteventloop.h
@@ -50,8 +50,8 @@ class Q_TESTLIB_EXPORT QTestEventLoop : public QObject
     Q_OBJECT
 
 public:
-    inline QTestEventLoop(QObject *aParent = 0)
-        : QObject(aParent), inLoop(false), _timeout(false), timerId(-1), loop(0) {}
+    inline QTestEventLoop(QObject *aParent = Q_NULLPTR)
+        : QObject(aParent), inLoop(false), _timeout(false), timerId(-1), loop(Q_NULLPTR) {}
 
     inline void enterLoopMSecs(int ms);
     inline void enterLoop(int secs) { enterLoopMSecs(secs * 1000); }
@@ -97,7 +97,7 @@ inline void QTestEventLoop::enterLoopMSecs(int ms)
 
     loop = &l;
     l.exec();
-    loop = 0;
+    loop = Q_NULLPTR;
 }
 
 inline void QTestEventLoop::exitLoop()
diff --git a/src/testlib/qtestkeyboard.h b/src/testlib/qtestkeyboard.h
index 39520d6..d73658d 100644
--- a/src/testlib/qtestkeyboard.h
+++ b/src/testlib/qtestkeyboard.h
@@ -61,7 +61,7 @@ Q_GUI_EXPORT bool qt_sendShortcutOverrideEvent(QObject *o, ulong timestamp, int
 
 namespace QTest
 {
-    enum KeyAction { Press, Release, Click };
+    enum KeyAction { Press, Release, Click, Shortcut };
 
     static void simulateEvent(QWindow *window, bool press, int code,
                               Qt::KeyboardModifiers modifier, QString text, bool repeat, int delay=-1)
@@ -95,9 +95,15 @@ namespace QTest
 
         bool repeat = false;
 
+        if (action == Shortcut) {
+            int timestamp = 0;
+            qt_sendShortcutOverrideEvent(window, timestamp, code, modifier, text, repeat);
+            return;
+        }
+
         if (action == Press) {
             if (modifier & Qt::ShiftModifier)
-                simulateEvent(window, true, Qt::Key_Shift, 0, QString(), false, delay);
+                simulateEvent(window, true, Qt::Key_Shift, Qt::KeyboardModifiers(), QString(), false, delay);
 
             if (modifier & Qt::ControlModifier)
                 simulateEvent(window, true, Qt::Key_Control, modifier & Qt::ShiftModifier, QString(), false, delay);
@@ -220,7 +226,7 @@ namespace QTest
 
         if (action == Press) {
             if (modifier & Qt::ShiftModifier)
-                simulateEvent(widget, true, Qt::Key_Shift, 0, QString(), false, delay);
+                simulateEvent(widget, true, Qt::Key_Shift, Qt::KeyboardModifiers(), QString(), false, delay);
 
             if (modifier & Qt::ControlModifier)
                 simulateEvent(widget, true, Qt::Key_Control, modifier & Qt::ShiftModifier, QString(), false, delay);
diff --git a/src/testlib/qtestmouse.h b/src/testlib/qtestmouse.h
index ad6671a..c422a99 100644
--- a/src/testlib/qtestmouse.h
+++ b/src/testlib/qtestmouse.h
@@ -45,6 +45,7 @@
 #include <QtTest/qtestspontaneevent.h>
 #include <QtCore/qpoint.h>
 #include <QtCore/qstring.h>
+#include <QtCore/qpointer.h>
 #include <QtGui/qevent.h>
 #include <QtGui/qwindow.h>
 
@@ -57,12 +58,15 @@
 
 QT_BEGIN_NAMESPACE
 
-Q_GUI_EXPORT void qt_handleMouseEvent(QWindow *w, const QPointF & local, const QPointF & global, Qt::MouseButtons b, Qt::KeyboardModifiers mods = Qt::NoModifier);
+Q_GUI_EXPORT void qt_handleMouseEvent(QWindow *w, const QPointF &local, const QPointF &global, Qt::MouseButtons b, Qt::KeyboardModifiers mods, int timestamp);
 
 namespace QTest
 {
     enum MouseAction { MousePress, MouseRelease, MouseClick, MouseDClick, MouseMove };
 
+    extern Q_TESTLIB_EXPORT Qt::MouseButton lastMouseButton;
+    extern Q_TESTLIB_EXPORT int lastMouseTimestamp;
+
     static void waitForEvents()
     {
 #ifdef Q_OS_MAC
@@ -83,47 +87,43 @@ namespace QTest
             QTest::qWarn("Mouse event occurs outside of target window.");
         }
 
-         static Qt::MouseButton lastButton = Qt::NoButton;
-
         if (delay == -1 || delay < defaultMouseDelay())
             delay = defaultMouseDelay();
-        if (delay > 0)
+        if (delay > 0) {
             QTest::qWait(delay);
+            lastMouseTimestamp += delay;
+        }
 
         if (pos.isNull())
             pos = window->geometry().center();
 
-        if (action == MouseClick) {
-            mouseEvent(MousePress, window, button, stateKey, pos);
-            mouseEvent(MouseRelease, window, button, stateKey, pos);
-            return;
-        }
         QTEST_ASSERT(uint(stateKey) == 0 || stateKey & Qt::KeyboardModifierMask);
 
         stateKey &= static_cast<unsigned int>(Qt::KeyboardModifierMask);
 
+        QPointF global = window->mapToGlobal(pos);
+        QPointer<QWindow> w(window);
 
         switch (action)
         {
+        case MouseDClick:
+            qt_handleMouseEvent(w, pos, global, button, stateKey, ++lastMouseTimestamp);
+            qt_handleMouseEvent(w, pos, global, Qt::NoButton, stateKey, ++lastMouseTimestamp);
+            // fall through
         case MousePress:
-                qt_handleMouseEvent(window,pos,window->mapToGlobal(pos),button,stateKey);
-                lastButton = button;
+        case MouseClick:
+            qt_handleMouseEvent(w, pos, global, button, stateKey, ++lastMouseTimestamp);
+            lastMouseButton = button;
+            if (action == MousePress)
                 break;
+            // fall through
         case MouseRelease:
-                qt_handleMouseEvent(window,pos,window->mapToGlobal(pos),Qt::NoButton,stateKey);
-                lastButton = Qt::NoButton;
-                break;
-            case MouseDClick:
-                qt_handleMouseEvent(window,pos,window->mapToGlobal(pos),button,stateKey);
-                qWait(10);
-                qt_handleMouseEvent(window,pos,window->mapToGlobal(pos),Qt::NoButton,stateKey);
-                qWait(20);
-                qt_handleMouseEvent(window,pos,window->mapToGlobal(pos),button,stateKey);
-                qWait(10);
-                qt_handleMouseEvent(window,pos,window->mapToGlobal(pos),Qt::NoButton,stateKey);
+            qt_handleMouseEvent(w, pos, global, Qt::NoButton, stateKey, ++lastMouseTimestamp);
+            lastMouseTimestamp += 500; // avoid double clicks being generated
+            lastMouseButton = Qt::NoButton;
             break;
         case MouseMove:
-                qt_handleMouseEvent(window,pos,window->mapToGlobal(pos),lastButton,stateKey);
+            qt_handleMouseEvent(w, pos, global, lastMouseButton, stateKey, ++lastMouseTimestamp);
             // No QCursor::setPos() call here. That could potentially result in mouse events sent by the windowing system
             // which is highly undesired here. Tests must avoid relying on QCursor.
             break;
@@ -133,26 +133,39 @@ namespace QTest
         waitForEvents();
     }
 
-    inline void mousePress(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = 0,
+    inline void mousePress(QWindow *window, Qt::MouseButton button,
+                           Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(),
                            QPoint pos = QPoint(), int delay=-1)
     { mouseEvent(MousePress, window, button, stateKey, pos, delay); }
-    inline void mouseRelease(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = 0,
+    inline void mouseRelease(QWindow *window, Qt::MouseButton button,
+                             Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(),
                              QPoint pos = QPoint(), int delay=-1)
     { mouseEvent(MouseRelease, window, button, stateKey, pos, delay); }
-    inline void mouseClick(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = 0,
+    inline void mouseClick(QWindow *window, Qt::MouseButton button,
+                           Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(),
                            QPoint pos = QPoint(), int delay=-1)
     { mouseEvent(MouseClick, window, button, stateKey, pos, delay); }
-    inline void mouseDClick(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = 0,
+    inline void mouseDClick(QWindow *window, Qt::MouseButton button,
+                            Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(),
                             QPoint pos = QPoint(), int delay=-1)
     { mouseEvent(MouseDClick, window, button, stateKey, pos, delay); }
     inline void mouseMove(QWindow *window, QPoint pos = QPoint(), int delay=-1)
-    { mouseEvent(MouseMove, window, Qt::NoButton, 0, pos, delay); }
+    { mouseEvent(MouseMove, window, Qt::NoButton, Qt::KeyboardModifiers(), pos, delay); }
 
 #ifdef QT_WIDGETS_LIB
     static void mouseEvent(MouseAction action, QWidget *widget, Qt::MouseButton button,
                            Qt::KeyboardModifiers stateKey, QPoint pos, int delay=-1)
     {
         QTEST_ASSERT(widget);
+
+        if (pos.isNull())
+            pos = widget->rect().center();
+
+#ifdef QTEST_QPA_MOUSE_HANDLING
+        QWindow *w = widget->window()->windowHandle();
+        QTEST_ASSERT(w);
+        mouseEvent(action, w, button, stateKey, w->mapFromGlobal(widget->mapToGlobal(pos)), delay);
+#else
         extern int Q_TESTLIB_EXPORT defaultMouseDelay();
 
         if (delay == -1 || delay < defaultMouseDelay())
@@ -160,9 +173,6 @@ namespace QTest
         if (delay > 0)
             QTest::qWait(delay);
 
-        if (pos.isNull())
-            pos = widget->rect().center();
-
         if (action == MouseClick) {
             mouseEvent(MousePress, widget, button, stateKey, pos);
             mouseEvent(MouseRelease, widget, button, stateKey, pos);
@@ -180,7 +190,7 @@ namespace QTest
                 me = QMouseEvent(QEvent::MouseButtonPress, pos, widget->mapToGlobal(pos), button, button, stateKey);
                 break;
             case MouseRelease:
-                me = QMouseEvent(QEvent::MouseButtonRelease, pos, widget->mapToGlobal(pos), button, 0, stateKey);
+                me = QMouseEvent(QEvent::MouseButtonRelease, pos, widget->mapToGlobal(pos), button, Qt::MouseButton(), stateKey);
                 break;
             case MouseDClick:
                 me = QMouseEvent(QEvent::MouseButtonDblClick, pos, widget->mapToGlobal(pos), button, button, stateKey);
@@ -203,23 +213,27 @@ namespace QTest
             QString warning = QString::fromLatin1("Mouse event \"%1\" not accepted by receiving widget");
             QTest::qWarn(warning.arg(QString::fromLatin1(mouseActionNames[static_cast<int>(action)])).toLatin1().data());
         }
-
+#endif
     }
 
-    inline void mousePress(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = 0,
+    inline void mousePress(QWidget *widget, Qt::MouseButton button,
+                           Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(),
                            QPoint pos = QPoint(), int delay=-1)
     { mouseEvent(MousePress, widget, button, stateKey, pos, delay); }
-    inline void mouseRelease(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = 0,
+    inline void mouseRelease(QWidget *widget, Qt::MouseButton button,
+                             Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(),
                              QPoint pos = QPoint(), int delay=-1)
     { mouseEvent(MouseRelease, widget, button, stateKey, pos, delay); }
-    inline void mouseClick(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = 0,
+    inline void mouseClick(QWidget *widget, Qt::MouseButton button,
+                           Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(),
                            QPoint pos = QPoint(), int delay=-1)
     { mouseEvent(MouseClick, widget, button, stateKey, pos, delay); }
-    inline void mouseDClick(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = 0,
+    inline void mouseDClick(QWidget *widget, Qt::MouseButton button,
+                            Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(),
                             QPoint pos = QPoint(), int delay=-1)
     { mouseEvent(MouseDClick, widget, button, stateKey, pos, delay); }
     inline void mouseMove(QWidget *widget, QPoint pos = QPoint(), int delay=-1)
-    { mouseEvent(MouseMove, widget, Qt::NoButton, 0, pos, delay); }
+    { mouseEvent(MouseMove, widget, Qt::NoButton, Qt::KeyboardModifiers(), pos, delay); }
 #endif // QT_WIDGETS_LIB
 }
 
diff --git a/src/testlib/qtestsystem.h b/src/testlib/qtestsystem.h
index 50acc61..f81ede5 100644
--- a/src/testlib/qtestsystem.h
+++ b/src/testlib/qtestsystem.h
@@ -56,7 +56,7 @@ namespace QTest
         timer.start();
         do {
             QCoreApplication::processEvents(QEventLoop::AllEvents, ms);
-            QCoreApplication::sendPostedEvents(0, QEvent::DeferredDelete);
+            QCoreApplication::sendPostedEvents(Q_NULLPTR, QEvent::DeferredDelete);
             QTest::qSleep(10);
         } while (timer.elapsed() < ms);
     }
@@ -71,7 +71,7 @@ namespace QTest
             if (remaining <= 0)
                 break;
             QCoreApplication::processEvents(QEventLoop::AllEvents, remaining);
-            QCoreApplication::sendPostedEvents(0, QEvent::DeferredDelete);
+            QCoreApplication::sendPostedEvents(Q_NULLPTR, QEvent::DeferredDelete);
             QTest::qSleep(10);
         }
         // Try ensuring the platform window receives the real position.
@@ -100,7 +100,7 @@ namespace QTest
             if (remaining <= 0)
                 break;
             QCoreApplication::processEvents(QEventLoop::AllEvents, remaining);
-            QCoreApplication::sendPostedEvents(0, QEvent::DeferredDelete);
+            QCoreApplication::sendPostedEvents(Q_NULLPTR, QEvent::DeferredDelete);
             QTest::qSleep(10);
         }
         return window->isExposed();
diff --git a/src/testlib/qtesttouch.h b/src/testlib/qtesttouch.h
index 5dcdca8..8e782d1 100644
--- a/src/testlib/qtesttouch.h
+++ b/src/testlib/qtesttouch.h
@@ -68,21 +68,21 @@ namespace QTest
             if (commitWhenDestroyed)
                 commit();
         }
-        QTouchEventSequence& press(int touchId, const QPoint &pt, QWindow *window = 0)
+        QTouchEventSequence& press(int touchId, const QPoint &pt, QWindow *window = Q_NULLPTR)
         {
             QTouchEvent::TouchPoint &p = point(touchId);
             p.setScreenPos(mapToScreen(window, pt));
             p.setState(Qt::TouchPointPressed);
             return *this;
         }
-        QTouchEventSequence& move(int touchId, const QPoint &pt, QWindow *window = 0)
+        QTouchEventSequence& move(int touchId, const QPoint &pt, QWindow *window = Q_NULLPTR)
         {
             QTouchEvent::TouchPoint &p = point(touchId);
             p.setScreenPos(mapToScreen(window, pt));
             p.setState(Qt::TouchPointMoved);
             return *this;
         }
-        QTouchEventSequence& release(int touchId, const QPoint &pt, QWindow *window = 0)
+        QTouchEventSequence& release(int touchId, const QPoint &pt, QWindow *window = Q_NULLPTR)
         {
             QTouchEvent::TouchPoint &p = point(touchId);
             p.setScreenPos(mapToScreen(window, pt));
@@ -97,21 +97,21 @@ namespace QTest
         }
 
 #ifdef QT_WIDGETS_LIB
-        QTouchEventSequence& press(int touchId, const QPoint &pt, QWidget *widget = 0)
+        QTouchEventSequence& press(int touchId, const QPoint &pt, QWidget *widget = Q_NULLPTR)
         {
             QTouchEvent::TouchPoint &p = point(touchId);
             p.setScreenPos(mapToScreen(widget, pt));
             p.setState(Qt::TouchPointPressed);
             return *this;
         }
-        QTouchEventSequence& move(int touchId, const QPoint &pt, QWidget *widget = 0)
+        QTouchEventSequence& move(int touchId, const QPoint &pt, QWidget *widget = Q_NULLPTR)
         {
             QTouchEvent::TouchPoint &p = point(touchId);
             p.setScreenPos(mapToScreen(widget, pt));
             p.setState(Qt::TouchPointMoved);
             return *this;
         }
-        QTouchEventSequence& release(int touchId, const QPoint &pt, QWidget *widget = 0)
+        QTouchEventSequence& release(int touchId, const QPoint &pt, QWidget *widget = Q_NULLPTR)
         {
             QTouchEvent::TouchPoint &p = point(touchId);
             p.setScreenPos(mapToScreen(widget, pt));
@@ -143,14 +143,14 @@ namespace QTest
 private:
 #ifdef QT_WIDGETS_LIB
         QTouchEventSequence(QWidget *widget, QTouchDevice *aDevice, bool autoCommit)
-            : targetWidget(widget), targetWindow(0), device(aDevice), commitWhenDestroyed(autoCommit)
+            : targetWidget(widget), targetWindow(Q_NULLPTR), device(aDevice), commitWhenDestroyed(autoCommit)
         {
         }
 #endif
         QTouchEventSequence(QWindow *window, QTouchDevice *aDevice, bool autoCommit)
             :
 #ifdef QT_WIDGETS_LIB
-              targetWidget(0),
+              targetWidget(Q_NULLPTR),
 #endif
               targetWindow(window), device(aDevice), commitWhenDestroyed(autoCommit)
         {
_______________________________________________
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development

Reply via email to