summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp95
1 files changed, 21 insertions, 74 deletions
diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
index 548b5ccf6a..a84709a6dd 100644
--- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
+++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
@@ -9665,6 +9665,11 @@ void tst_QWidget::underMouse()
QVERIFY(popupWindow);
QVERIFY(QApplication::activePopupWidget() == &popupWidget);
+ // Send an artificial leave event for window, as it won't get generated automatically
+ // due to cursor not actually being over the window.
+ QWindowSystemInterface::handleLeaveEvent(window);
+ QApplication::processEvents();
+
// If there is an active popup, undermouse should not be reported (QTBUG-27478),
// but opening a popup causes leave for widgets under mouse.
QVERIFY(!topLevelWidget.underMouse());
@@ -9682,13 +9687,8 @@ void tst_QWidget::underMouse()
topLevelWidget.resetCounts();
childWidget2.resetCounts();
- // Note about commented out compares below:
- // Widgets are not receiving enter/leave events properly when there is a popup up,
- // so all enter and leave counts are not correct yet.
- // Fix this test when QTBUG-27800 is fixed (i.e. uncomment commented out compares).
-
- // Moving around while popup active should not change undermouse either,
- // but should send enter and leave events for widgets
+ // Moving around while popup active should not change undermouse or cause
+ // enter and leave events for widgets.
QTest::mouseMove(popupWindow, popupWindow->mapFromGlobal(window->mapToGlobal(child2PointB)));
QVERIFY(!topLevelWidget.underMouse());
QVERIFY(!childWidget1.underMouse());
@@ -9696,14 +9696,12 @@ void tst_QWidget::underMouse()
QVERIFY(!popupWidget.underMouse());
QCOMPARE(popupWidget.enters, 0);
QCOMPARE(popupWidget.leaves, 0);
- //QCOMPARE(topLevelWidget.enters, 1); // QTBUG-27800
+ QCOMPARE(topLevelWidget.enters, 0);
QCOMPARE(topLevelWidget.leaves, 0);
QCOMPARE(childWidget1.enters, 0);
QCOMPARE(childWidget1.leaves, 0);
- //QCOMPARE(childWidget2.enters, 1); // QTBUG-27800
+ QCOMPARE(childWidget2.enters, 0);
QCOMPARE(childWidget2.leaves, 0);
- topLevelWidget.resetCounts();
- childWidget2.resetCounts();
QTest::mouseMove(popupWindow, popupWindow->mapFromGlobal(window->mapToGlobal(inWindowPoint)));
QVERIFY(!topLevelWidget.underMouse());
@@ -9717,27 +9715,9 @@ void tst_QWidget::underMouse()
QCOMPARE(childWidget1.enters, 0);
QCOMPARE(childWidget1.leaves, 0);
QCOMPARE(childWidget2.enters, 0);
- //QCOMPARE(childWidget2.leaves, 1); // QTBUG-27800
- childWidget2.resetCounts();
-
- QTest::mouseMove(popupWindow, popupWindow->mapFromGlobal(window->mapToGlobal(child1Point)));
- QVERIFY(!topLevelWidget.underMouse());
- QVERIFY(!childWidget1.underMouse());
- QVERIFY(!childWidget2.underMouse());
- QVERIFY(!popupWidget.underMouse());
- QCOMPARE(popupWidget.enters, 0);
- QCOMPARE(popupWidget.leaves, 0);
- QCOMPARE(topLevelWidget.enters, 0);
- QCOMPARE(topLevelWidget.leaves, 0);
- //QCOMPARE(childWidget1.enters, 1); // QTBUG-27800
- QCOMPARE(childWidget1.leaves, 0);
- QCOMPARE(childWidget2.enters, 0);
QCOMPARE(childWidget2.leaves, 0);
- childWidget1.resetCounts();
- // Mouse moves off-application, should cause leaves for currently entered widgets
- QWindowSystemInterface::handleLeaveEvent(window);
- QApplication::processEvents();
+ QTest::mouseMove(popupWindow, popupWindow->mapFromGlobal(window->mapToGlobal(child1Point)));
QVERIFY(!topLevelWidget.underMouse());
QVERIFY(!childWidget1.underMouse());
QVERIFY(!childWidget2.underMouse());
@@ -9745,52 +9725,20 @@ void tst_QWidget::underMouse()
QCOMPARE(popupWidget.enters, 0);
QCOMPARE(popupWidget.leaves, 0);
QCOMPARE(topLevelWidget.enters, 0);
- QCOMPARE(topLevelWidget.leaves, 1);
- QCOMPARE(childWidget1.enters, 0);
- //QCOMPARE(childWidget1.leaves, 1); // QTBUG-27800
- QCOMPARE(childWidget2.enters, 0);
- QCOMPARE(childWidget2.leaves, 0);
- topLevelWidget.resetCounts();
- childWidget1.resetCounts();
-
- // Mouse enters back in, should cause enter to topLevelWidget
- QWindowSystemInterface::handleEnterEvent(window, inWindowPoint, window->mapToGlobal(inWindowPoint));
- QApplication::processEvents();
- QVERIFY(!topLevelWidget.underMouse());
- QVERIFY(!childWidget1.underMouse());
- QVERIFY(!childWidget2.underMouse());
- QVERIFY(!popupWidget.underMouse());
- QCOMPARE(popupWidget.enters, 0);
- QCOMPARE(popupWidget.leaves, 0);
- QCOMPARE(topLevelWidget.enters, 1);
QCOMPARE(topLevelWidget.leaves, 0);
QCOMPARE(childWidget1.enters, 0);
QCOMPARE(childWidget1.leaves, 0);
QCOMPARE(childWidget2.enters, 0);
QCOMPARE(childWidget2.leaves, 0);
- topLevelWidget.resetCounts();
- // Mouse moves to child widget, should cause enter to child
- QTest::mouseMove(popupWindow, popupWindow->mapFromGlobal(window->mapToGlobal(child2PointB)));
- QVERIFY(!topLevelWidget.underMouse());
- QVERIFY(!childWidget1.underMouse());
- QVERIFY(!childWidget2.underMouse());
- QVERIFY(!popupWidget.underMouse());
- QCOMPARE(popupWidget.enters, 0);
- QCOMPARE(popupWidget.leaves, 0);
- QCOMPARE(topLevelWidget.enters, 0);
- QCOMPARE(topLevelWidget.leaves, 0);
- QCOMPARE(childWidget1.enters, 0);
- QCOMPARE(childWidget1.leaves, 0);
- //QCOMPARE(childWidget2.enters, 1); // QTBUG-27800
- QCOMPARE(childWidget2.leaves, 0);
- childWidget2.resetCounts();
+ // Note: Mouse moving off-application while there is an active popup cannot be simulated
+ // without actually moving the cursor so it is not tested.
- // Mouse enters popup, should cause enter to popup and leave to current widgets under mouse
- QWindowSystemInterface::handleLeaveEvent(window);
+ // Mouse enters popup, should cause enter to popup.
+ // Once again, need to create artificial enter event.
const QPoint popupCenter = popupWindow->geometry().center();
QWindowSystemInterface::handleEnterEvent(popupWindow, popupWindow->mapFromGlobal(popupCenter), popupCenter);
- QApplication::processEvents();
+ QTest::mouseMove(popupWindow, popupCenter);
QVERIFY(!topLevelWidget.underMouse());
QVERIFY(!childWidget1.underMouse());
QVERIFY(!childWidget2.underMouse());
@@ -9798,14 +9746,12 @@ void tst_QWidget::underMouse()
QCOMPARE(popupWidget.enters, 1);
QCOMPARE(popupWidget.leaves, 0);
QCOMPARE(topLevelWidget.enters, 0);
- QCOMPARE(topLevelWidget.leaves, 1);
+ QCOMPARE(topLevelWidget.leaves, 0);
QCOMPARE(childWidget1.enters, 0);
QCOMPARE(childWidget1.leaves, 0);
QCOMPARE(childWidget2.enters, 0);
- //QCOMPARE(childWidget2.leaves, 1); // QTBUG-27800
+ QCOMPARE(childWidget2.leaves, 0);
popupWidget.resetCounts();
- topLevelWidget.resetCounts();
- childWidget2.resetCounts();
// Mouse moves around inside popup, no changes
QTest::mouseMove(popupWindow, QPoint(5, 5));
@@ -9822,9 +9768,10 @@ void tst_QWidget::underMouse()
QCOMPARE(childWidget2.enters, 0);
QCOMPARE(childWidget2.leaves, 0);
- // Mouse leaves popup and enters topLevelWidget, should cause enter to topLevelWidget and leave for popup
+ // Mouse leaves popup and enters topLevelWidget, should cause leave for popup
+ // but no enter to topLevelWidget. Again, artificial leave event needed.
QWindowSystemInterface::handleLeaveEvent(popupWindow);
- QWindowSystemInterface::handleEnterEvent(window, inWindowPoint, window->mapToGlobal(inWindowPoint));
+ QTest::mouseMove(popupWindow, popupWindow->mapFromGlobal(window->mapToGlobal(inWindowPoint)));
QApplication::processEvents();
QVERIFY(!topLevelWidget.underMouse());
QVERIFY(!childWidget1.underMouse());
@@ -9832,7 +9779,7 @@ void tst_QWidget::underMouse()
QVERIFY(!popupWidget.underMouse());
QCOMPARE(popupWidget.enters, 0);
QCOMPARE(popupWidget.leaves, 1);
- QCOMPARE(topLevelWidget.enters, 1);
+ QCOMPARE(topLevelWidget.enters, 0);
QCOMPARE(topLevelWidget.leaves, 0);
QCOMPARE(childWidget1.enters, 0);
QCOMPARE(childWidget1.leaves, 0);