aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Brasser <michael.brasser@live.com>2013-02-12 22:19:10 -0600
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-02-14 15:04:05 +0100
commitb324ee38a67c6e8529023f3f4e34be8af5f60166 (patch)
tree9b6e41ec7c7da4cb63613d3ade4faf3f8d081938
parente6aaaca5c1a5d01b8b0ef32abcb8ff6a39d81e3b (diff)
A MouseArea should not receive move or release events if the press was not accepted.
Change-Id: If70650d7150b224f4460697a953611dd37d57af1 Reviewed-by: Frederik Gladhorn <frederik.gladhorn@digia.com>
-rw-r--r--src/quick/items/qquickwindow.cpp2
-rw-r--r--tests/auto/quick/qquickmousearea/data/moveAndReleaseWithoutPress.qml14
-rw-r--r--tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp24
3 files changed, 39 insertions, 1 deletions
diff --git a/src/quick/items/qquickwindow.cpp b/src/quick/items/qquickwindow.cpp
index f4334286fa..469ea4225c 100644
--- a/src/quick/items/qquickwindow.cpp
+++ b/src/quick/items/qquickwindow.cpp
@@ -1218,7 +1218,7 @@ bool QQuickWindowPrivate::deliverInitialMousePressEvent(QQuickItem *item, QMouse
event->setAccepted(me->isAccepted());
if (me->isAccepted())
return true;
- if (mouseGrabberItem && !event->buttons())
+ if (mouseGrabberItem)
mouseGrabberItem->ungrabMouse();
}
}
diff --git a/tests/auto/quick/qquickmousearea/data/moveAndReleaseWithoutPress.qml b/tests/auto/quick/qquickmousearea/data/moveAndReleaseWithoutPress.qml
new file mode 100644
index 0000000000..6c68f0c7c8
--- /dev/null
+++ b/tests/auto/quick/qquickmousearea/data/moveAndReleaseWithoutPress.qml
@@ -0,0 +1,14 @@
+import QtQuick 2.0
+
+MouseArea {
+ width: 200
+ height: 200
+
+ property bool hadMove: false
+ property bool hadRelease: false
+
+ onPressed: mouse.accepted = false
+ onPositionChanged: hadMove = true
+ onReleased: hadRelease = true
+}
+
diff --git a/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp b/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp
index ffe7b51537..37ce0fd394 100644
--- a/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp
+++ b/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp
@@ -88,6 +88,7 @@ private slots:
#ifndef QT_NO_CURSOR
void cursorShape();
#endif
+ void moveAndReleaseWithoutPress();
private:
void acceptedButton_data();
@@ -1402,6 +1403,29 @@ void tst_QQuickMouseArea::cursorShape()
}
#endif
+void tst_QQuickMouseArea::moveAndReleaseWithoutPress()
+{
+ QQuickView *window = createView();
+
+ window->setSource(testFileUrl("moveAndReleaseWithoutPress.qml"));
+ window->show();
+ window->requestActivate();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QObject *root = window->rootObject();
+ QVERIFY(root);
+
+ QTest::mousePress(window, Qt::LeftButton, 0, QPoint(100,100));
+
+ QTest::mouseMove(window, QPoint(110,110), 50);
+ QTRY_COMPARE(root->property("hadMove").toBool(), false);
+
+ QTest::mouseRelease(window, Qt::LeftButton, 0, QPoint(110,110));
+ QTRY_COMPARE(root->property("hadRelease").toBool(), false);
+
+ delete window;
+}
+
QTEST_MAIN(tst_QQuickMouseArea)
#include "tst_qquickmousearea.moc"