diff --git a/src/quicktemplates/qquickpopup.cpp b/src/quicktemplates/qquickpopup.cpp index a47d92df21..3c08c950b1 100644 --- a/src/quicktemplates/qquickpopup.cpp +++ b/src/quicktemplates/qquickpopup.cpp @@ -371,7 +371,7 @@ bool QQuickPopupPrivate::blockInput(QQuickItem *item, const QPointF &point) cons // a) outside a non-modal popup, // b) to popup children/content, or // b) outside a modal popups's background dimming - return modal && !popupItem->isAncestorOf(item) && (!dimmer || dimmer->contains(dimmer->mapFromScene(point))); + return modal && ((popupItem != item) && !popupItem->isAncestorOf(item)) && (!dimmer || dimmer->contains(dimmer->mapFromScene(point))); } bool QQuickPopupPrivate::handlePress(QQuickItem *item, const QPointF &point, ulong timestamp) diff --git a/tests/auto/quickcontrols/controls/data/tst_popup.qml b/tests/auto/quickcontrols/controls/data/tst_popup.qml index 23879d817a..48484f588c 100644 --- a/tests/auto/quickcontrols/controls/data/tst_popup.qml +++ b/tests/auto/quickcontrols/controls/data/tst_popup.qml @@ -1449,6 +1449,18 @@ TestCase { mouseRelease(title, pressPoint.x, pressPoint.y) compare(title.pressedPosition, Qt.point(0, 0)) + + // Set modal as true and check for the same operation + popup.modal = true + oldPos = Qt.point(popup.x, popup.y) + mousePress(title, pressPoint.x, pressPoint.y) + fuzzyCompare(title.pressedPosition.x, pressPoint.x, 1) + fuzzyCompare(title.pressedPosition.y, pressPoint.y, 1) + mouseMove(title, pressPoint.x + 5, pressPoint.y + 5) + fuzzyCompare(popup.x, oldPos.x + 5, 1) + fuzzyCompare(popup.y, oldPos.y + 5, 1) + mouseRelease(title, pressPoint.x, pressPoint.y) + compare(title.pressedPosition, Qt.point(0, 0)) } Component {