aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlan Alpert <aalpert@blackberry.com>2013-11-04 13:29:12 -0800
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-11-05 19:00:03 +0100
commit41f447272f9c7e1c632770bb952f2515494edce0 (patch)
tree0915f52a290bea67dd45c90bb69c41f15f80fc08
parent025365f1dc6dc9c3244a125882433e55b57fa672 (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.cpp2
-rw-r--r--tests/auto/quick/qquickmousearea/data/qtbug34368.qml38
-rw-r--r--tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp23
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()