diff options
-rw-r--r-- | src/corelib/global/qnamespace.h | 2 | ||||
-rw-r--r-- | src/corelib/global/qnamespace.qdoc | 2 | ||||
-rw-r--r-- | src/gui/kernel/qcursor.cpp | 4 | ||||
-rw-r--r-- | src/gui/kernel/qcursor.h | 8 | ||||
-rw-r--r-- | src/plugins/platforms/android/qandroidplatformintegration.cpp | 13 | ||||
-rw-r--r-- | src/plugins/platforms/android/qandroidplatformintegration.h | 4 | ||||
-rw-r--r-- | src/testlib/qtestcase.cpp | 3 | ||||
-rw-r--r-- | src/widgets/widgets/qlabel.cpp | 4 | ||||
-rw-r--r-- | src/widgets/widgets/qlabel.h | 8 | ||||
-rw-r--r-- | tests/auto/testlib/selftests/mouse/tst_mouse.cpp | 67 |
10 files changed, 98 insertions, 17 deletions
diff --git a/src/corelib/global/qnamespace.h b/src/corelib/global/qnamespace.h index ea2c635303..17ae73536d 100644 --- a/src/corelib/global/qnamespace.h +++ b/src/corelib/global/qnamespace.h @@ -1770,7 +1770,7 @@ public: }; // QTBUG-48701 - enum ReturnByValue_t { ReturnByValue }; // ### Qt 7: Remove me + enum ReturnByValueConstant { ReturnByValue }; // ### Qt 7: Remove me #ifndef Q_QDOC // NOTE: Generally, do not add QT_Q_ENUM if a corresponding Q_Q_FLAG exists. diff --git a/src/corelib/global/qnamespace.qdoc b/src/corelib/global/qnamespace.qdoc index 6a84662323..708ecb11ab 100644 --- a/src/corelib/global/qnamespace.qdoc +++ b/src/corelib/global/qnamespace.qdoc @@ -3334,7 +3334,7 @@ */ /*! - \enum Qt::ReturnByValue_t + \enum Qt::ReturnByValueConstant \since 5.15 This is a dummy type, designed to help users transition from certain deprecated APIs to their replacement APIs. diff --git a/src/gui/kernel/qcursor.cpp b/src/gui/kernel/qcursor.cpp index 7f6fdafbd0..1efa28a5af 100644 --- a/src/gui/kernel/qcursor.cpp +++ b/src/gui/kernel/qcursor.cpp @@ -621,7 +621,7 @@ const QBitmap *QCursor::mask() const QBitmap bmpVal = cursor->bitmap(); \endcode */ -QBitmap QCursor::bitmap(Qt::ReturnByValue_t) const +QBitmap QCursor::bitmap(Qt::ReturnByValueConstant) const { if (!QCursorData::initialized) QCursorData::initialize(); @@ -653,7 +653,7 @@ QBitmap QCursor::bitmap(Qt::ReturnByValue_t) const QBitmap bmpVal = cursor->mask(); \endcode */ -QBitmap QCursor::mask(Qt::ReturnByValue_t) const +QBitmap QCursor::mask(Qt::ReturnByValueConstant) const { if (!QCursorData::initialized) QCursorData::initialize(); diff --git a/src/gui/kernel/qcursor.h b/src/gui/kernel/qcursor.h index 7a11fe59ee..3ae6b98ced 100644 --- a/src/gui/kernel/qcursor.h +++ b/src/gui/kernel/qcursor.h @@ -104,11 +104,11 @@ public: QT_DEPRECATED_VERSION_X(5, 15, "Use the other overload which returns QBitmap by-value") const QBitmap *mask() const; // ### Qt 7: Remove function - QBitmap bitmap(Qt::ReturnByValue_t) const; - QBitmap mask(Qt::ReturnByValue_t) const; + QBitmap bitmap(Qt::ReturnByValueConstant) const; + QBitmap mask(Qt::ReturnByValueConstant) const; #else - QBitmap bitmap(Qt::ReturnByValue_t = Qt::ReturnByValue) const; // ### Qt 7: Remove arg - QBitmap mask(Qt::ReturnByValue_t = Qt::ReturnByValue) const; // ### Qt 7: Remove arg + QBitmap bitmap(Qt::ReturnByValueConstant = Qt::ReturnByValue) const; // ### Qt 7: Remove arg + QBitmap mask(Qt::ReturnByValueConstant = Qt::ReturnByValue) const; // ### Qt 7: Remove arg #endif // QT_DEPRECATED_SINCE(5, 15) QPixmap pixmap() const; QPoint hotSpot() const; diff --git a/src/plugins/platforms/android/qandroidplatformintegration.cpp b/src/plugins/platforms/android/qandroidplatformintegration.cpp index e0c437be27..c81cc66166 100644 --- a/src/plugins/platforms/android/qandroidplatformintegration.cpp +++ b/src/plugins/platforms/android/qandroidplatformintegration.cpp @@ -74,6 +74,8 @@ #include "qandroidplatformvulkaninstance.h" #endif +#include <QtGui/qpa/qplatforminputcontextfactory_p.h> + QT_BEGIN_NAMESPACE int QAndroidPlatformIntegration::m_defaultGeometryWidth = 320; @@ -255,6 +257,15 @@ static bool needsBasicRenderloopWorkaround() return needsWorkaround; } +void QAndroidPlatformIntegration::initialize() +{ + const QString icStr = QPlatformInputContextFactory::requested(); + if (icStr.isNull()) + m_inputContext.reset(new QAndroidInputContext); + else + m_inputContext.reset(QPlatformInputContextFactory::create(icStr)); +} + bool QAndroidPlatformIntegration::hasCapability(Capability cap) const { switch (cap) { @@ -366,7 +377,7 @@ QPlatformClipboard *QAndroidPlatformIntegration::clipboard() const QPlatformInputContext *QAndroidPlatformIntegration::inputContext() const { - return &m_platformInputContext; + return m_inputContext.data(); } QPlatformNativeInterface *QAndroidPlatformIntegration::nativeInterface() const diff --git a/src/plugins/platforms/android/qandroidplatformintegration.h b/src/plugins/platforms/android/qandroidplatformintegration.h index c795c499bc..ecbde4f951 100644 --- a/src/plugins/platforms/android/qandroidplatformintegration.h +++ b/src/plugins/platforms/android/qandroidplatformintegration.h @@ -81,6 +81,8 @@ public: QAndroidPlatformIntegration(const QStringList ¶mList); ~QAndroidPlatformIntegration(); + void initialize() override; + bool hasCapability(QPlatformIntegration::Capability cap) const override; QPlatformWindow *createPlatformWindow(QWindow *window) const override; @@ -167,7 +169,7 @@ private: mutable QPlatformAccessibility *m_accessibility; #endif - mutable QAndroidInputContext m_platformInputContext; + QScopedPointer<QPlatformInputContext> m_inputContext; }; QT_END_NAMESPACE diff --git a/src/testlib/qtestcase.cpp b/src/testlib/qtestcase.cpp index 6be623d7fc..6805d17b6e 100644 --- a/src/testlib/qtestcase.cpp +++ b/src/testlib/qtestcase.cpp @@ -296,6 +296,8 @@ namespace QTestPrivate namespace QTest { +extern Q_TESTLIB_EXPORT int lastMouseTimestamp; + class WatchDog; static QObject *currentTestObject = nullptr; @@ -1173,6 +1175,7 @@ bool TestMethods::invokeTest(int index, const char *data, WatchDog *watchDog) co QTestPrivate::qtestMouseButtons = Qt::NoButton; if (watchDog) watchDog->beginTest(); + QTest::lastMouseTimestamp += 500; // Maintain at least 500ms mouse event timestamps between each test function call invokeTestOnData(index); if (watchDog) watchDog->testFinished(); diff --git a/src/widgets/widgets/qlabel.cpp b/src/widgets/widgets/qlabel.cpp index 2490df58f2..992e0cee97 100644 --- a/src/widgets/widgets/qlabel.cpp +++ b/src/widgets/widgets/qlabel.cpp @@ -227,7 +227,7 @@ const QPicture *QLabel::picture() const \endcode */ -QPicture QLabel::picture(Qt::ReturnByValue_t) const +QPicture QLabel::picture(Qt::ReturnByValueConstant) const { Q_D(const QLabel); if (d->picture) @@ -443,7 +443,7 @@ const QPixmap *QLabel::pixmap() const /*! \since 5.15 */ -QPixmap QLabel::pixmap(Qt::ReturnByValue_t) const +QPixmap QLabel::pixmap(Qt::ReturnByValueConstant) const { Q_D(const QLabel); if (d->pixmap) diff --git a/src/widgets/widgets/qlabel.h b/src/widgets/widgets/qlabel.h index 288022a71e..c9552efd8a 100644 --- a/src/widgets/widgets/qlabel.h +++ b/src/widgets/widgets/qlabel.h @@ -77,9 +77,9 @@ public: QT_DEPRECATED_VERSION_X(5, 15, "Use the other overload which returns QPixmap by-value") const QPixmap *pixmap() const; // ### Qt 7: Remove function - QPixmap pixmap(Qt::ReturnByValue_t) const; + QPixmap pixmap(Qt::ReturnByValueConstant) const; #else - QPixmap pixmap(Qt::ReturnByValue_t = Qt::ReturnByValue) const; // ### Qt 7: Remove arg + QPixmap pixmap(Qt::ReturnByValueConstant = Qt::ReturnByValue) const; // ### Qt 7: Remove arg #endif // QT_DEPRECATED_SINCE(5,15) #ifndef QT_NO_PICTURE @@ -87,9 +87,9 @@ public: QT_DEPRECATED_VERSION_X(5, 15, "Use the other overload which returns QPicture by-value") const QPicture *picture() const; // ### Qt 7: Remove function - QPicture picture(Qt::ReturnByValue_t) const; + QPicture picture(Qt::ReturnByValueConstant) const; # else - QPicture picture(Qt::ReturnByValue_t = Qt::ReturnByValue) const; // ### Qt 7: Remove arg + QPicture picture(Qt::ReturnByValueConstant = Qt::ReturnByValue) const; // ### Qt 7: Remove arg # endif // QT_DEPRECATED_SINCE(5,15) #endif #if QT_CONFIG(movie) diff --git a/tests/auto/testlib/selftests/mouse/tst_mouse.cpp b/tests/auto/testlib/selftests/mouse/tst_mouse.cpp index d097027e7e..43dda31daf 100644 --- a/tests/auto/testlib/selftests/mouse/tst_mouse.cpp +++ b/tests/auto/testlib/selftests/mouse/tst_mouse.cpp @@ -42,6 +42,8 @@ class tst_Mouse : public QObject Q_OBJECT private slots: + void timestampBetweenTestFunction_data(); + void timestampBetweenTestFunction(); void stateHandlingPart1_data(); void stateHandlingPart1(); void stateHandlingPart2(); @@ -55,20 +57,83 @@ public: Qt::MouseButtons stateInMouseMove = Qt::NoButton; int moveCount = 0; int pressCount = 0; + int doubleClickCount = 0; + ulong lastTimeStamp = 0; protected: - void mousePressEvent(QMouseEvent *) + void mousePressEvent(QMouseEvent *e) { pressCount++; + processEvent(e); } void mouseMoveEvent(QMouseEvent *e) { moveCount++; stateInMouseMove = e->buttons(); + processEvent(e); } + + void mouseReleaseEvent(QMouseEvent *e) + { + processEvent(e); + } + + void mouseDoubleClickEvent(QMouseEvent *e) + { + doubleClickCount++; + processEvent(e); + } + + void processEvent(QMouseEvent *e) + { + lastTimeStamp = e->timestamp(); + } + }; +static ulong lastTimeStampInPreviousTestFunction = 0; + +void tst_Mouse::timestampBetweenTestFunction_data() +{ + QTest::addColumn<bool>("hoverLast"); + QTest::addColumn<bool>("pressAndRelease"); + QTest::newRow("press, release") << true << false; + QTest::newRow("press, release, hover") << true << true; + QTest::newRow("hover") << false << true; + QTest::newRow("hover #2") << false << true; + QTest::newRow("press, release #2") << true << false; + QTest::newRow("press, release, hover #2") << true << true; +} + +void tst_Mouse::timestampBetweenTestFunction() +{ + QFETCH(bool, hoverLast); + QFETCH(bool, pressAndRelease); + + MouseWindow w; + w.show(); + w.setGeometry(100, 100, 200, 200); + QVERIFY(QTest::qWaitForWindowActive(&w)); + + QPoint point(10, 10); + QCOMPARE(w.pressCount, 0); + if (pressAndRelease) { + QTest::mousePress(&w, Qt::LeftButton, { }, point); + QVERIFY(w.lastTimeStamp - lastTimeStampInPreviousTestFunction > 500); // Should be at least 500 ms timestamp between each test case + QCOMPARE(w.pressCount, 1); + QTest::mouseRelease(&w, Qt::LeftButton, { }, point); + } + QCOMPARE(w.doubleClickCount, 0); + if (hoverLast) { + static int xMove = 0; + xMove += 5; // Just make sure we generate different hover coordinates + point.rx() += xMove; + QTest::mouseMove(&w, point); // a hover move. This doesn't generate a timestamp delay of 500 ms + } + lastTimeStampInPreviousTestFunction = w.lastTimeStamp; +} + void tst_Mouse::stateHandlingPart1_data() { QTest::addColumn<bool>("dummy"); |