diff options
author | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2020-02-04 01:00:59 +0100 |
---|---|---|
committer | Edward Welbourne <edward.welbourne@qt.io> | 2020-02-04 10:44:00 +0100 |
commit | 97417e8f2896bfbe1d9e9a703ddba980983d1442 (patch) | |
tree | ecee79f9b126bc695904e74000c0775d1ef34646 /tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp | |
parent | 02eb9df851093f11872c828869226903c81f1b60 (diff) | |
parent | 056230cc9c3309823a93df0e34c92affb29df9e4 (diff) |
Merge remote-tracking branch 'origin/5.14' into 5.15
Conflicts:
.qmake.conf
examples/widgets/widgets/imageviewer/imageviewer.cpp
src/corelib/text/qchar.cpp
src/corelib/time/qdatetime.cpp
Change-Id: I9762f5c4ff650799219729d6aee79ac07ce9024a
Diffstat (limited to 'tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp')
-rw-r--r-- | tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp b/tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp index a437b05479..8c2d89e34b 100644 --- a/tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp +++ b/tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp @@ -89,6 +89,7 @@ private slots: void focusNextPrevChild(); void focusOutEvent_data(); void focusOutEvent(); + void focusProxy_QTBUG_51856(); void hoverEnterLeaveEvent_data(); void hoverEnterLeaveEvent(); void hoverMoveEvent_data(); @@ -864,6 +865,75 @@ void tst_QGraphicsProxyWidget::focusOutEvent() } } +void tst_QGraphicsProxyWidget::focusProxy_QTBUG_51856() +{ + // QSpinBox has an internal QLineEdit; this QLineEdit has the spinbox + // as its focus proxy. + struct FocusedSpinBox : QSpinBox + { + int focusCount = 0; + + bool event(QEvent *event) override + { + switch (event->type()) { + case QEvent::FocusIn: + ++focusCount; + break; + case QEvent::FocusOut: + --focusCount; + break; + default: + break; + } + return QSpinBox::event(event); + } + }; + + QGraphicsScene scene; + QGraphicsView view(&scene); + SubQGraphicsProxyWidget *proxy = new SubQGraphicsProxyWidget; + scene.addItem(proxy); + view.show(); + view.raise(); + view.activateWindow(); + QVERIFY(QTest::qWaitForWindowActive(&view)); + + FocusedSpinBox *spinBox = new FocusedSpinBox; + + proxy->setWidget(spinBox); + proxy->show(); + proxy->setFocus(); + QVERIFY(proxy->hasFocus()); + QEXPECT_FAIL("", "Widget should have focus but doesn't", Continue); + QVERIFY(spinBox->hasFocus()); + QEXPECT_FAIL("", "Widget should have focus but doesn't", Continue); + QCOMPARE(spinBox->focusCount, 1); + + enum { Count = 10 }; + + for (int i = 0; i < Count; ++i) { + for (int clickCount = 0; clickCount < Count; ++clickCount) { + auto proxyCenter = proxy->boundingRect().center(); + auto proxyCenterInScene = proxy->mapToScene(proxyCenter); + auto proxyCenterInView = view.mapFromScene(proxyCenterInScene); + + QTest::mouseClick(view.viewport(), Qt::LeftButton, {}, proxyCenterInView); + QTRY_COMPARE(spinBox->focusCount, 1); + } + + QLineEdit *edit = new QLineEdit(&view); + edit->show(); + QTRY_VERIFY(edit->isVisible()); + edit->setFocus(); + QTRY_VERIFY(edit->hasFocus()); + QTRY_VERIFY(!proxy->hasFocus()); + QTRY_COMPARE(proxy->focusOut, i + 1); + QTRY_VERIFY(!spinBox->hasFocus()); + QTRY_COMPARE(spinBox->focusCount, 0); + delete edit; + } +} + class EventLogger : public QWidget { public: |