diff options
Diffstat (limited to 'tests/auto/quickcontrols2/controls/data/tst_popup.qml')
-rw-r--r-- | tests/auto/quickcontrols2/controls/data/tst_popup.qml | 109 |
1 files changed, 101 insertions, 8 deletions
diff --git a/tests/auto/quickcontrols2/controls/data/tst_popup.qml b/tests/auto/quickcontrols2/controls/data/tst_popup.qml index 145f555218..acb550fdd4 100644 --- a/tests/auto/quickcontrols2/controls/data/tst_popup.qml +++ b/tests/auto/quickcontrols2/controls/data/tst_popup.qml @@ -953,45 +953,45 @@ TestCase { control.contentItem.implicitWidth = 10 compare(control.implicitWidth, 10 + control.leftPadding + control.rightPadding) compare(control.width, control.implicitWidth) - compare(control.contentItem.width, control.width - control.leftPadding - control.rightPadding) + compare(control.contentItem.width, control.availableWidth) control.contentItem.implicitHeight = 20 compare(control.implicitHeight, 20 + control.topPadding + control.bottomPadding) compare(control.height, control.implicitHeight) - compare(control.contentItem.height, control.height - control.topPadding - control.bottomPadding) + compare(control.contentItem.height, control.availableHeight) // implicit size of the popup control.implicitWidth = 30 compare(control.implicitWidth, 30) compare(control.width, 30) - compare(control.contentItem.width, control.width - control.leftPadding - control.rightPadding) + compare(control.contentItem.width, control.availableWidth) control.implicitHeight = 40 compare(control.implicitHeight, 40) compare(control.height, 40) - compare(control.contentItem.height, control.height - control.topPadding - control.bottomPadding) + compare(control.contentItem.height, control.availableHeight) // set explicit size control.width = 50 compare(control.implicitWidth, 30) compare(control.width, 50) - compare(control.contentItem.width, control.width - control.leftPadding - control.rightPadding) + compare(control.contentItem.width, control.availableWidth) control.height = 60 compare(control.implicitHeight, 40) compare(control.height, 60) - compare(control.contentItem.height, control.height - control.topPadding - control.bottomPadding) + compare(control.contentItem.height, control.availableHeight) // reset explicit size control.width = undefined compare(control.implicitWidth, 30) compare(control.width, 30) - compare(control.contentItem.width, control.width - control.leftPadding - control.rightPadding) + compare(control.contentItem.width, control.availableWidth) control.height = undefined compare(control.implicitHeight, 40) compare(control.height, 40) - compare(control.contentItem.height, control.height - control.topPadding - control.bottomPadding) + compare(control.contentItem.height, control.availableHeight) } function test_visible() { @@ -1390,4 +1390,97 @@ TestCase { compare(shortcutActivatedSpy.count, 2) tryCompare(control, "visible", false) } + + Component { + id: mousePropagationComponent + ApplicationWindow { + id: window + width: 360 + height: 360 + visible: true + + property alias popup: popup + property alias popupTitle: popupTitle + property alias popupContent: popupContent + property bool gotMouseEvent: false + + MouseArea { + id: windowMouseArea + enabled: true + anchors.fill: parent + onPressed: gotMouseEvent = true + } + + + Popup { + id: popup + width: 200 + height: 200 + + background: Rectangle { + id: popupContent + color: "#505050" + Rectangle { + id: popupTitle + width: parent.width + height: 30 + color: "blue" + + property point pressedPosition: Qt.point(0, 0) + + MouseArea { + enabled: true + propagateComposedEvents: true + anchors.fill: parent + onPressed: (mouse) => { + popupTitle.pressedPosition = Qt.point(mouse.x, mouse.y) + } + onPositionChanged: (mouse) => { + popup.x += mouse.x - popupTitle.pressedPosition.x + popup.y += mouse.y - popupTitle.pressedPosition.y + } + onReleased: (mouse) => { + popupTitle.pressedPosition = Qt.point(0, 0) + } + } + } + } + + Component.onCompleted: { + x = parent.width / 2 - width / 2 + y = parent.height / 2 - height / 2 + } + } + } + } + + function test_mousePropagation() { + // Tests that Popup ignores mouse events that it doesn't handle itself + // so that they propagate correctly. + let window = createTemporaryObject(mousePropagationComponent, testCase) + window.requestActivate() + tryCompare(window, "active", true) + + let popup = window.popup + popup.open() + + // mouse clicks into the popup must not propagate to the parent + mouseClick(window) + compare(window.gotMouseEvent, false) + + let title = window.popupTitle + verify(title) + + let pressPoint = Qt.point(title.width / 2, title.height / 2) + let 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)) + + } } |