diff options
-rw-r--r-- | src/quick/items/qquickmousearea.cpp | 2 | ||||
-rw-r--r-- | tests/auto/quick/qquickmousearea/data/qtbug34368.qml | 38 | ||||
-rw-r--r-- | tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp | 23 |
3 files changed, 62 insertions, 1 deletions
diff --git a/src/quick/items/qquickmousearea.cpp b/src/quick/items/qquickmousearea.cpp index b9e6efaa10..ca64ebb6e3 100644 --- a/src/quick/items/qquickmousearea.cpp +++ b/src/quick/items/qquickmousearea.cpp @@ -156,7 +156,7 @@ bool QQuickMouseAreaPrivate::propagateHelper(QQuickMouseEvent *ev, QQuickItem *i } QQuickMouseArea* ma = qobject_cast<QQuickMouseArea*>(item); - if (ma && ma != q && itemPrivate->acceptedMouseButtons() & ev->button()) { + if (ma && ma != q && ma->isEnabled() && itemPrivate->acceptedMouseButtons() & ev->button()) { switch (sig) { case Click: if (!ma->d_func()->isClickConnected()) diff --git a/tests/auto/quick/qquickmousearea/data/qtbug34368.qml b/tests/auto/quick/qquickmousearea/data/qtbug34368.qml new file mode 100644 index 0000000000..42d8ddd3b6 --- /dev/null +++ b/tests/auto/quick/qquickmousearea/data/qtbug34368.qml @@ -0,0 +1,38 @@ +import QtQuick 2.2 + +Rectangle { + id: root + color: "green" + width: 200 + height: 200 + property int clicksEnabled: 0 + property int clicksDisabled: 0 + property bool disableLower: false + MouseArea { + anchors.fill: parent + propagateComposedEvents: true + z: 1 + onClicked: { + mouse.accepted = false; + clicksEnabled += 1; + //console.log("Upper click"); + } + } + MouseArea { + anchors.fill: parent + propagateComposedEvents: true + z: 0 + enabled: !disableLower + onClicked: { + mouse.accepted = false; + clicksDisabled += 1; + //console.log("Lower click"); + } + } + Text { + anchors.fill: parent + text: "A: " + clicksEnabled + " B:" + clicksDisabled + focus: true + Keys.onSpacePressed: root.disableLower = !root.disableLower; + } +} diff --git a/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp b/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp index 0c0b51d9c2..72639556ec 100644 --- a/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp +++ b/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp @@ -995,6 +995,29 @@ void tst_QQuickMouseArea::clickThrough() QTRY_COMPARE(window->rootObject()->property("clicks").toInt(), 2); QCOMPARE(window->rootObject()->property("doubleClicks").toInt(), 1); QCOMPARE(window->rootObject()->property("pressAndHolds").toInt(), 1); + + window.reset(new QQuickView); + + //QTBUG-34368 - Shouldn't propagate to disabled mouse areas + QVERIFY2(initView(*window.data(), testFileUrl("qtbug34368.qml"), true, &errorMessage), errorMessage.constData()); + window->show(); + QVERIFY(QTest::qWaitForWindowExposed(window.data())); + QVERIFY(window->rootObject() != 0); + + QTest::mousePress(window.data(), Qt::LeftButton, 0, QPoint(100,100)); + QTest::mouseRelease(window.data(), Qt::LeftButton, 0, QPoint(100,100)); + + QCOMPARE(window->rootObject()->property("clicksEnabled").toInt(), 1); + QCOMPARE(window->rootObject()->property("clicksDisabled").toInt(), 1); //Not disabled yet + + window->rootObject()->setProperty("disableLower", QVariant(true)); + + QTest::qWait(doubleClickInterval); // to avoid generating a double click. + QTest::mousePress(window.data(), Qt::LeftButton, 0, QPoint(100,100)); + QTest::mouseRelease(window.data(), Qt::LeftButton, 0, QPoint(100,100)); + + QCOMPARE(window->rootObject()->property("clicksEnabled").toInt(), 2); + QCOMPARE(window->rootObject()->property("clicksDisabled").toInt(), 1); //disabled, shouldn't increment } void tst_QQuickMouseArea::hoverPosition() |