diff options
author | Alan Alpert <aalpert@blackberry.com> | 2013-11-04 13:29:12 -0800 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-11-05 19:00:03 +0100 |
commit | 41f447272f9c7e1c632770bb952f2515494edce0 (patch) | |
tree | 0915f52a290bea67dd45c90bb69c41f15f80fc08 | |
parent | 025365f1dc6dc9c3244a125882433e55b57fa672 (diff) |
Don't propagate mouse events to disabled MouseAreas
Task-number: QTBUG-34368
Change-Id: I28d4f57e51300f12a7bab5d215933762102f3916
Reviewed-by: Michael Brasser <michael.brasser@live.com>
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
-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() |