From 9fada65e1dd8958cbe4b8dc12c9e4814fcff5a6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20M=C3=BCller?= Date: Fri, 16 Apr 2021 21:54:16 +0200 Subject: [PATCH] Revert "Get the scale of the popup item when setting the parent item" Upgrade 5.14.2 (for us dunfell) -> 5.15.2 introduced a bug: Opening a menu for the second+ time, menu moves right and down and parts land outside screen. Reported but nobody cares. [1] [1] https://bugreports.qt.io/browse/QTBUG-86973 Upstream-Status: Pending This reverts commit 761dba8b23b7e558acc57b3e481648ce319a4397. Signed-off-by: Martin Jansa --- src/quicktemplates2/qquickpopuppositioner.cpp | 18 +++++++-------- .../qquickpopuppositioner_p_p.h | 1 - tests/auto/controls/data/tst_combobox.qml | 22 ------------------- tests/auto/controls/data/tst_popup.qml | 3 --- 4 files changed, 8 insertions(+), 36 deletions(-) diff --git a/src/quicktemplates2/qquickpopuppositioner.cpp b/src/quicktemplates2/qquickpopuppositioner.cpp index 1bfaafbe6..dbe8ac1d5 100644 --- a/src/quicktemplates2/qquickpopuppositioner.cpp +++ b/src/quicktemplates2/qquickpopuppositioner.cpp @@ -92,10 +92,7 @@ void QQuickPopupPositioner::setParentItem(QQuickItem *parent) QQuickItemPrivate::get(parent)->addItemChangeListener(this, ItemChangeTypes); addAncestorListeners(parent->parentItem()); - // Store the scale property so the end result of any transition that could effect the scale - // does not influence the top left of the final popup, so it doesn't appear to flip from one - // position to another as a result - m_popupScale = m_popup->popupItem()->scale(); + if (m_popup->popupItem()->isVisible()) QQuickPopupPrivate::get(m_popup)->reposition(); } @@ -111,10 +108,11 @@ void QQuickPopupPositioner::reposition() return; } - const qreal w = popupItem->width() * m_popupScale; - const qreal h = popupItem->height() * m_popupScale; - const qreal iw = popupItem->implicitWidth() * m_popupScale; - const qreal ih = popupItem->implicitHeight() * m_popupScale; + const qreal scale = popupItem->scale(); + const qreal w = popupItem->width() * scale; + const qreal h = popupItem->height() * scale; + const qreal iw = popupItem->implicitWidth() * scale; + const qreal ih = popupItem->implicitHeight() * scale; bool widthAdjusted = false; bool heightAdjusted = false; @@ -260,9 +258,9 @@ void QQuickPopupPositioner::reposition() } if (!p->hasWidth && widthAdjusted && rect.width() > 0) - popupItem->setWidth(rect.width() / m_popupScale); + popupItem->setWidth(rect.width() / scale); if (!p->hasHeight && heightAdjusted && rect.height() > 0) - popupItem->setHeight(rect.height() / m_popupScale); + popupItem->setHeight(rect.height() / scale); m_positioning = false; } diff --git a/src/quicktemplates2/qquickpopuppositioner_p_p.h b/src/quicktemplates2/qquickpopuppositioner_p_p.h index 03a2e2fed..64f57a3fa 100644 --- a/src/quicktemplates2/qquickpopuppositioner_p_p.h +++ b/src/quicktemplates2/qquickpopuppositioner_p_p.h @@ -79,7 +79,6 @@ protected: bool m_positioning = false; QQuickItem *m_parentItem = nullptr; QQuickPopup *m_popup = nullptr; - qreal m_popupScale = 1.0; }; QT_END_NAMESPACE diff --git a/tests/auto/controls/data/tst_combobox.qml b/tests/auto/controls/data/tst_combobox.qml index 1c58372ff..e9156fee5 100644 --- a/tests/auto/controls/data/tst_combobox.qml +++ b/tests/auto/controls/data/tst_combobox.qml @@ -911,28 +911,6 @@ TestCase { compare(control.popup.visible, true) verify(control.popup.contentItem.y < control.y) - - // Account for when a transition of a scale from 0.9-1.0 that it is placed above right away and not below - // first just because there is room at the 0.9 scale - if (control.popup.enter !== null) { - // hide - mouseClick(control) - compare(control.pressed, false) - tryCompare(control.popup, "visible", false) - control.y = control.Window.height - (control.popup.contentItem.height * 0.99) - var popupYSpy = createTemporaryObject(signalSpy, testCase, {target: control.popup, signalName: "yChanged"}) - verify(popupYSpy.valid) - mousePress(control) - compare(control.pressed, true) - compare(control.popup.visible, false) - mouseRelease(control) - compare(control.pressed, false) - compare(control.popup.visible, true) - tryCompare(control.popup.enter, "running", false) - verify(control.popup.contentItem.y < control.y) - verify(popupYSpy.count === 1) - } - // follow the control outside the horizontal window bounds control.x = -control.width / 2 compare(control.x, -control.width / 2) diff --git a/tests/auto/controls/data/tst_popup.qml b/tests/auto/controls/data/tst_popup.qml index 57d5ccccf..71d6f2d76 100644 --- a/tests/auto/controls/data/tst_popup.qml +++ b/tests/auto/controls/data/tst_popup.qml @@ -1276,9 +1276,6 @@ TestCase { { visible: true, width: 100, height: 100 }) verify(control) verify(control.visible) - // If there is a transition then make sure it is finished - if (control.enter !== null) - tryCompare(control.enter, "running", false) compare(control.parent, control.Overlay.overlay) compare(control.x, 0) compare(control.y, 0) -- 2.26.2