summaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2012-11-09 15:57:07 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2012-11-15 11:59:34 +0100
commitb8be2e67eae075e6c6108318e73c7ad4eddcebf8 (patch)
tree5ad0f199c7b56934d5b4ee7e21340990f6a421b6 /tests/auto
parenta6135c55b99e92a7d06f828e0ec0a4a35f89c47f (diff)
Change to enter/leave policy while grabbing.
Sending enter and leave events to other windows than the grabbing window is not logical. The policy should be that only the grabbing window receives enter and leave events. Changed the documentation accordingly and provided the necessary changes to Windows implementation. Also removed explicit leave event generation for widgets when popup is opened as that is now redundant. tst_QWidget::underMouse() test was changed to behave according to new logic. Task-number: QTBUG-27871 Change-Id: I127fb8685b4a4206d1a319f42cba491ec02bc8ca Reviewed-by: Oliver Wolff <oliver.wolff@digia.com> Reviewed-by: Samuel Rødal <samuel.rodal@digia.com> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Diffstat (limited to 'tests/auto')
-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);