aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOliver Eftevaag <oliver.eftevaag@qt.io>2024-11-12 15:59:18 +0100
committerOliver Eftevaag <oliver.eftevaag@qt.io>2024-11-13 21:47:32 +0100
commit48d1ae7f76c0cb418e9fe256a30e9a3a994f3ec0 (patch)
treede20fb804e3e6240c929ce5b2126b18cf2a1791e
parent8e176007865ceb6126ecc091354181574b347ecc (diff)
Unblacklist tst_qquickpopup::popupWindowPositioning for Linux
- Unblacklist the test, and make it more robust, by waiting longer for various events to occur, like the window expose event. - Don't reposition in QQuickPopup::geometryChange when using popup windows. This would cause popups to position themselves to the top-left corner of the screen. This is because 7fcdc34317df568765a50db4fdb746be8f45143a would change the popup's x and y hints, to be from the system (using global coordinates), while QQuickPopupPosition::reposition() assumes the coordinates are local. Fixes: QTBUG-126667 Pick-to: 6.8 Change-Id: I054472e718426f13655e047dd163eb1045f6c394 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
-rw-r--r--src/quicktemplates/qquickpopup.cpp3
-rw-r--r--tests/auto/quickcontrols/qquickpopup/BLACKLIST4
-rw-r--r--tests/auto/quickcontrols/qquickpopup/tst_qquickpopup.cpp28
3 files changed, 18 insertions, 17 deletions
diff --git a/src/quicktemplates/qquickpopup.cpp b/src/quicktemplates/qquickpopup.cpp
index 8268e43c59..359df340c9 100644
--- a/src/quicktemplates/qquickpopup.cpp
+++ b/src/quicktemplates/qquickpopup.cpp
@@ -3232,7 +3232,8 @@ void QQuickPopup::geometryChange(const QRectF &newGeometry, const QRectF &oldGeo
{
Q_D(QQuickPopup);
qCDebug(lcQuickPopup) << "geometryChange called on" << this << "with newGeometry" << newGeometry << "oldGeometry" << oldGeometry;
- d->reposition();
+ if (!d->usePopupWindow())
+ d->reposition();
if (!qFuzzyCompare(newGeometry.width(), oldGeometry.width())) {
emit widthChanged();
emit availableWidthChanged();
diff --git a/tests/auto/quickcontrols/qquickpopup/BLACKLIST b/tests/auto/quickcontrols/qquickpopup/BLACKLIST
index 50cd59776d..daa95ab3f6 100644
--- a/tests/auto/quickcontrols/qquickpopup/BLACKLIST
+++ b/tests/auto/quickcontrols/qquickpopup/BLACKLIST
@@ -24,9 +24,5 @@ opensuse-leap
[cursorShape]
opensuse-leap
-# QTBUG-126667
-[popupWindowPositioning]
-linux
-
[popupWindowFocus]
offscreen # QTBUG-128321
diff --git a/tests/auto/quickcontrols/qquickpopup/tst_qquickpopup.cpp b/tests/auto/quickcontrols/qquickpopup/tst_qquickpopup.cpp
index 2159bb7f8d..b0f40b163c 100644
--- a/tests/auto/quickcontrols/qquickpopup/tst_qquickpopup.cpp
+++ b/tests/auto/quickcontrols/qquickpopup/tst_qquickpopup.cpp
@@ -2519,16 +2519,21 @@ void tst_QQuickPopup::popupWindowPositioning()
popup->setPopupType(QQuickPopup::Window);
- popup->open();
- QTRY_VERIFY(popup->isVisible());
-
QSignalSpy xSpy(popup, SIGNAL(xChanged()));
QSignalSpy ySpy(popup, SIGNAL(yChanged()));
+ popup->open();
+ QTRY_VERIFY(popup->isOpened());
+
+ QTRY_VERIFY(popupPrivate->popupWindow);
auto *popupWindow = popupPrivate->popupWindow;
- QVERIFY(popupWindow);
+ QVERIFY(QTest::qWaitForWindowExposed(popupPrivate->popupWindow));
+ QQuickTest::qWaitForPolish(popupPrivate->popupWindow);
- // x and y properties should be 50 initially
+ QTRY_COMPARE(xSpy.count(), 1);
+ QTRY_COMPARE(ySpy.count(), 1);
+
+ // x and y properties should be 50 initially (from simplepopup.qml)
const QPoint initialPos(50, 50);
VERIFY_GLOBAL_POS(popup->parentItem(), popupWindow, initialPos);
@@ -2538,8 +2543,8 @@ void tst_QQuickPopup::popupWindowPositioning()
const QPoint secondPosition(100, 100);
popup->setPosition(secondPosition.toPointF());
- QTRY_COMPARE(xSpy.count(), 1);
- QCOMPARE(ySpy.count(), 1);
+ QTRY_COMPARE(xSpy.count(), 2);
+ QCOMPARE(ySpy.count(), 2);
VERIFY_GLOBAL_POS(popup->parentItem(), popupWindow, secondPosition);
VERIFY_LOCAL_POS(popup, secondPosition);
@@ -2548,8 +2553,8 @@ void tst_QQuickPopup::popupWindowPositioning()
const QPoint thirdPosition(150, 150);
popupWindow->setPosition(popup->parentItem()->mapToGlobal(thirdPosition.x(), thirdPosition.y()).toPoint());
- QTRY_COMPARE(xSpy.count(), 2);
- QCOMPARE(ySpy.count(), 2);
+ QTRY_COMPARE(xSpy.count(), 3);
+ QCOMPARE(ySpy.count(), 3);
VERIFY_GLOBAL_POS(popup->parentItem(), popupWindow, thirdPosition);
VERIFY_LOCAL_POS(popup, thirdPosition);
@@ -2559,9 +2564,8 @@ void tst_QQuickPopup::popupWindowPositioning()
const QPoint oldPos = window->position();
window->setPosition(oldPos + movement);
- // TODO: Figure out these signals are emitted twice
- // QTRY_COMPARE(xSpy.count(), 3);
- // QCOMPARE(ySpy.count(), 3);
+ QTRY_COMPARE(xSpy.count(), 4);
+ QCOMPARE(ySpy.count(), 4);
VERIFY_GLOBAL_POS(popup->parentItem(), popupWindow, (thirdPosition - movement));
}