diff options
Diffstat (limited to 'tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp')
-rw-r--r-- | tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp | 138 |
1 files changed, 118 insertions, 20 deletions
diff --git a/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp b/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp index 27fbcc2b3b..5a316dd55e 100644 --- a/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp +++ b/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp @@ -1,5 +1,5 @@ // Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QTest> @@ -26,6 +26,7 @@ #include <QtWidgets/QStyle> #include <QtWidgets/QPushButton> #include <QtWidgets/QScroller> +#include <QtWidgets/QStackedWidget> #if QT_CONFIG(opengl) #include <QtOpenGLWidgets/QOpenGLWidget> #endif @@ -79,6 +80,12 @@ static void sendMouseRelease(QWidget *widget, const QPoint &point, Qt::MouseButt QApplication::sendEvent(widget, &event); } +static bool isPlatformEGLFS() +{ + static const bool isEGLFS = !QGuiApplication::platformName().compare(QLatin1String("eglfs"), Qt::CaseInsensitive); + return isEGLFS; +} + class EventSpy : public QObject { Q_OBJECT @@ -108,6 +115,7 @@ protected: #if defined QT_BUILD_INTERNAL class FriendlyGraphicsScene : public QGraphicsScene { + using QGraphicsScene::QGraphicsScene; friend class tst_QGraphicsView; Q_DECLARE_PRIVATE(QGraphicsScene); }; @@ -248,6 +256,9 @@ private slots: #ifndef QT_NO_CURSOR void QTBUG_7438_cursor(); #endif +#ifdef QT_BUILD_INTERNAL + void QTBUG_53974_mismatched_hide_show_events(); +#endif void resizeContentsOnItemDrag_data(); void resizeContentsOnItemDrag(); @@ -648,6 +659,8 @@ void tst_QGraphicsView::openGLViewport() { if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::OpenGL)) QSKIP("QOpenGL is not supported on this platform."); + if (isPlatformEGLFS()) + QSKIP("", "Resizing does not work on EGLFS on top level window", Continue); QGraphicsScene scene; scene.setBackgroundBrush(Qt::white); @@ -1049,9 +1062,9 @@ void tst_QGraphicsView::rotated_rubberBand() sendMouseMove(view.viewport(), QPoint(midWidth + 2, view.viewport()->height()), Qt::LeftButton, Qt::LeftButton); QCOMPARE(scene.selectedItems().size(), dim); - foreach (const QGraphicsItem *item, scene.items()) { + const auto items = scene.items(); + for (const QGraphicsItem *item : items) QCOMPARE(item->isSelected(), item->data(0).toBool()); - } sendMouseRelease(view.viewport(), QPoint(), Qt::LeftButton); } @@ -1629,6 +1642,9 @@ void tst_QGraphicsView::itemsInRect_cosmeticAdjust_data() void tst_QGraphicsView::itemsInRect_cosmeticAdjust() { + if (isPlatformEGLFS()) + QSKIP("", "Resizing does not work on EGLFS on top level window", Continue); + QFETCH(QRect, updateRect); QFETCH(int, numPaints); QFETCH(bool, adjustForAntialiasing); @@ -1922,6 +1938,9 @@ void tst_QGraphicsView::mapToSceneRect_data() void tst_QGraphicsView::mapToSceneRect() { + if (isPlatformEGLFS()) + QSKIP("", "Resizing does not work on EGLFS on top level window", Continue); + QFETCH(QRect, viewRect); QFETCH(QPolygonF, scenePoly); QFETCH(qreal, rotation); @@ -2139,7 +2158,6 @@ void tst_QGraphicsView::sendEvent() QGraphicsView view(&scene); view.show(); - QApplicationPrivate::setActiveWindow(&view); QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QCOMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view)); @@ -2207,7 +2225,6 @@ void tst_QGraphicsView::wheelEvent() // Assign a view. QGraphicsView view(&scene); view.show(); - QApplicationPrivate::setActiveWindow(&view); QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QCOMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view)); @@ -2444,7 +2461,6 @@ void tst_QGraphicsView::viewportUpdateMode() // Show the view, and initialize our test. view.show(); - QApplicationPrivate::setActiveWindow(&view); QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QTRY_VERIFY(!view.lastUpdateRegions.isEmpty()); @@ -2527,7 +2543,6 @@ void tst_QGraphicsView::viewportUpdateMode2() const QMargins margins = view.contentsMargins(); view.resize(200 + margins.left() + margins.right(), 200 + margins.top() + margins.bottom()); toplevel.show(); - QApplicationPrivate::setActiveWindow(&toplevel); QVERIFY(QTest::qWaitForWindowExposed(&toplevel)); QVERIFY(QTest::qWaitForWindowActive(&toplevel)); QTRY_VERIFY(view.painted); @@ -2739,7 +2754,8 @@ void tst_QGraphicsView::optimizationFlags_dontSavePainterState2() rectB->setTransform(QTransform::fromTranslate(200, 200)); rectB->setPen(QPen(Qt::black, 0)); - foreach (QGraphicsItem *item, scene.items()) + const auto items = scene.items(); + for (QGraphicsItem *item : items) item->setOpacity(0.6); CustomView view(&scene); @@ -2876,6 +2892,9 @@ public: void tst_QGraphicsView::scrollBarRanges() { + if (isPlatformEGLFS()) + QSKIP("", "Resizing does not work on EGLFS on top level window", Continue); + QFETCH(QByteArray, style); QFETCH(QSize, viewportSize); QFETCH(QRectF, sceneRect); @@ -3171,7 +3190,6 @@ void tst_QGraphicsView::task172231_untransformableItems() view.scale(2, 1); view.show(); - QApplicationPrivate::setActiveWindow(&view); QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QCOMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view)); @@ -3233,7 +3251,6 @@ void tst_QGraphicsView::task187791_setSceneCausesUpdate() QGraphicsScene scene(0, 0, 200, 200); QGraphicsView view(&scene); view.show(); - QApplicationPrivate::setActiveWindow(&view); QVERIFY(QTest::qWaitForWindowExposed(&view)); EventSpy updateSpy(view.viewport(), QEvent::Paint); @@ -3258,7 +3275,8 @@ protected: { ++mouseMoves; QGraphicsView::mouseMoveEvent(event); - foreach (QGraphicsItem *item, scene()->items()) { + const auto items = scene()->items(); + for (QGraphicsItem *item : items) { scene()->removeItem(item); delete item; } @@ -3319,7 +3337,6 @@ void tst_QGraphicsView::task207546_focusCrash() widget.layout()->addWidget(gr2); widget.show(); widget.activateWindow(); - QApplicationPrivate::setActiveWindow(&widget); QVERIFY(QTest::qWaitForWindowActive(&widget)); QCOMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&widget)); widget.focusNextPrevChild(true); @@ -3411,7 +3428,6 @@ void tst_QGraphicsView::task239729_noViewUpdate() QCOMPARE(spy.count(), 0); view->show(); - QApplicationPrivate::setActiveWindow(view); QVERIFY(QTest::qWaitForWindowActive(view)); QTRY_VERIFY(spy.count() >= 1); @@ -3647,6 +3663,9 @@ void tst_QGraphicsView::moveItemWhileScrolling_data() void tst_QGraphicsView::moveItemWhileScrolling() { + if (isPlatformEGLFS()) + QSKIP("", "Resizing does not work on EGLFS on top level window", Continue); + QFETCH(bool, adjustForAntialiasing); QFETCH(bool, changedConnected); @@ -4113,7 +4132,6 @@ void tst_QGraphicsView::update() QVERIFY(QTest::qWaitForWindowExposed(&toplevel)); - QApplicationPrivate::setActiveWindow(&toplevel); QApplication::processEvents(); QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&toplevel)); @@ -4170,6 +4188,9 @@ void tst_QGraphicsView::update2_data() void tst_QGraphicsView::update2() { + if (isPlatformEGLFS()) + QSKIP("", "Resizing does not work on EGLFS on top level window", Continue); + QFETCH(qreal, penWidth); QFETCH(bool, antialiasing); QFETCH(bool, changedConnected); @@ -4380,7 +4401,6 @@ void tst_QGraphicsView::inputMethodSensitivity() QGraphicsScene scene; QGraphicsView view(&scene); view.show(); - QApplicationPrivate::setActiveWindow(&view); QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QCOMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view)); @@ -4478,7 +4498,6 @@ void tst_QGraphicsView::inputContextReset() QVERIFY(view.testAttribute(Qt::WA_InputMethodEnabled)); view.show(); - QApplicationPrivate::setActiveWindow(&view); QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QCOMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view)); @@ -4626,7 +4645,6 @@ void tst_QGraphicsView::task255529_transformationAnchorMouseAndViewportMargins() VpGraphicsView view(&scene); view.setWindowFlags(Qt::X11BypassWindowManagerHint); view.show(); - QApplicationPrivate::setActiveWindow(&view); QVERIFY(QTest::qWaitForWindowExposed(&view)); const bool isActiveWindow = QTest::qWaitForWindowActive(&view); if (!isActiveWindow) @@ -4769,6 +4787,9 @@ void tst_QGraphicsView::QTBUG_4151_clipAndIgnore() void tst_QGraphicsView::QTBUG_5859_exposedRect() { + if (isPlatformEGLFS()) + QSKIP("", "Resizing does not work on EGLFS on top level window", Continue); + class CustomScene : public QGraphicsScene { public: @@ -4797,7 +4818,6 @@ void tst_QGraphicsView::QTBUG_5859_exposedRect() QGraphicsView view(&scene); view.scale(4.15, 4.15); view.showNormal(); - QApplicationPrivate::setActiveWindow(&view); QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); @@ -4869,7 +4889,6 @@ void tst_QGraphicsView::hoverLeave() scene.addItem(item); view.showNormal(); - QApplicationPrivate::setActiveWindow(&view); QVERIFY(QTest::qWaitForWindowExposed(&view)); QWindow *viewWindow = view.window()->windowHandle(); @@ -4948,7 +4967,6 @@ void tst_QGraphicsView::QTBUG_70255_scrollTo() view.centerOn(0, 0); view.show(); - QApplicationPrivate::setActiveWindow(&view); if (!QTest::qWaitForWindowExposed(&view) || !QTest::qWaitForWindowActive(&view)) QSKIP("Failed to show and activate window"); @@ -4962,6 +4980,86 @@ void tst_QGraphicsView::QTBUG_70255_scrollTo() QCOMPARE(point, QPoint(0, -500)); } +#ifdef QT_BUILD_INTERNAL +void tst_QGraphicsView::QTBUG_53974_mismatched_hide_show_events() +{ + QGraphicsView *view = new QGraphicsView; + FriendlyGraphicsScene *scene = new FriendlyGraphicsScene(view); + view->setScene(scene); + + QStackedWidget *lowLevel = new QStackedWidget; + lowLevel->addWidget(new QLabel); + lowLevel->addWidget(view); + + QStackedWidget topLevel; + topLevel.addWidget(new QLabel); + topLevel.addWidget(lowLevel); + + QCOMPARE_EQ(scene->d_func()->activationRefCount, 0); + + topLevel.show(); + topLevel.activateWindow(); + QVERIFY(QTest::qWaitForWindowActive(&topLevel)); + + // Starting point + QCOMPARE_EQ(topLevel.currentIndex(), 0); + QCOMPARE_EQ(lowLevel->currentIndex(), 0); + + QCOMPARE_EQ(scene->d_func()->activationRefCount, 0); + + // lowLevel is not visible. Changing the current index there + // should not affect the refcount. + lowLevel->setCurrentIndex(1); + QCOMPARE_EQ(scene->d_func()->activationRefCount, 0); + + lowLevel->setCurrentIndex(0); + QCOMPARE_EQ(scene->d_func()->activationRefCount, 0); + + // Make lowLevel visible. + topLevel.setCurrentIndex(1); + QCOMPARE_EQ(scene->d_func()->activationRefCount, 0); + + // Show and hide the QGV a couple of times. + lowLevel->setCurrentIndex(1); + QCOMPARE_EQ(scene->d_func()->activationRefCount, 1); + + lowLevel->setCurrentIndex(0); + QCOMPARE_EQ(scene->d_func()->activationRefCount, 0); + + lowLevel->setCurrentIndex(1); + QCOMPARE_EQ(scene->d_func()->activationRefCount, 1); + + lowLevel->setCurrentIndex(0); + QCOMPARE_EQ(scene->d_func()->activationRefCount, 0); + + // Make lowLevel hidden again. + topLevel.setCurrentIndex(0); + QCOMPARE_EQ(scene->d_func()->activationRefCount, 0); + + // Change the current index in the hidden lowLevel + lowLevel->setCurrentIndex(1); + QCOMPARE_EQ(scene->d_func()->activationRefCount, 0); + + lowLevel->setCurrentIndex(0); + QCOMPARE_EQ(scene->d_func()->activationRefCount, 0); + + // Make lowLevel and the QGV visible. + lowLevel->setCurrentIndex(1); + QCOMPARE_EQ(scene->d_func()->activationRefCount, 0); + + topLevel.setCurrentIndex(1); + QCOMPARE_EQ(scene->d_func()->activationRefCount, 1); + + // Make lowLevel hidden (keeping the QGV as current index). + topLevel.setCurrentIndex(0); + QCOMPARE_EQ(scene->d_func()->activationRefCount, 0); + + // Hide the QGV: + lowLevel->setCurrentIndex(0); + QCOMPARE_EQ(scene->d_func()->activationRefCount, 0); +} +#endif + void tst_QGraphicsView::resizeContentsOnItemDrag_data() { QTest::addColumn<Qt::Alignment>("alignment"); |