aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@theqtcompany.com>2015-11-26 07:37:17 +0100
committerLiang Qi <liang.qi@theqtcompany.com>2015-11-26 08:50:50 +0000
commitcf59a0acaee9b47bd371dd3ab8f0a6bd1f5b6d35 (patch)
treec29aab57d5e2edbf5bc571aca099a44d5564ff18
parent131fe1b85311b8ab02498cea5d1dda2188dcdabc (diff)
MouseArea: fixed a crash in propagate()
Should not propagate without window. Task-number: QTBUG-49100 Change-Id: Ieda3a8357283f8d07d4ffc0cc62c4e15645d7e5a Reviewed-by: J-P Nurmi <jpnurmi@theqtcompany.com>
-rw-r--r--src/quick/items/qquickmousearea.cpp2
-rw-r--r--tests/auto/quick/qquickmousearea/data/qtbug49100.qml29
-rw-r--r--tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp13
3 files changed, 43 insertions, 1 deletions
diff --git a/src/quick/items/qquickmousearea.cpp b/src/quick/items/qquickmousearea.cpp
index 4a44760035..29d6680272 100644
--- a/src/quick/items/qquickmousearea.cpp
+++ b/src/quick/items/qquickmousearea.cpp
@@ -118,7 +118,7 @@ bool QQuickMouseAreaPrivate::isWheelConnected()
void QQuickMouseAreaPrivate::propagate(QQuickMouseEvent* event, PropagateType t)
{
Q_Q(QQuickMouseArea);
- if (!propagateComposedEvents)
+ if (!window || !propagateComposedEvents)
return;
QPointF scenePos = q->mapToScene(QPointF(event->x(), event->y()));
propagateHelper(event, window->contentItem(), scenePos, t);
diff --git a/tests/auto/quick/qquickmousearea/data/qtbug49100.qml b/tests/auto/quick/qquickmousearea/data/qtbug49100.qml
new file mode 100644
index 0000000000..39b293c8fa
--- /dev/null
+++ b/tests/auto/quick/qquickmousearea/data/qtbug49100.qml
@@ -0,0 +1,29 @@
+import QtQuick 2.2
+
+ListView {
+ id: list
+ width: 200
+ height: 200
+ model: 50
+ delegate: Text {
+ text: index + 1
+ height: 30
+ width: parent.width
+ MouseArea {
+ anchors.fill: parent
+ }
+ Rectangle {
+ anchors.fill: parent
+ opacity: 0.5
+ MouseArea {
+ anchors.fill: parent
+ propagateComposedEvents: true
+ onReleased: {
+ list.currentIndex = 0;
+ list.positionViewAtIndex(list.currentIndex, ListView.Contain)
+ }
+ }
+ }
+ }
+ Component.onCompleted: list.positionViewAtIndex(40, ListView.Beginning)
+}
diff --git a/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp b/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp
index da8bb9e94d..5bdc6f415a 100644
--- a/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp
+++ b/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp
@@ -1149,6 +1149,19 @@ void tst_QQuickMouseArea::clickThrough()
QCOMPARE(window->rootObject()->property("clicksEnabled").toInt(), 2);
QCOMPARE(window->rootObject()->property("clicksDisabled").toInt(), 1); //disabled, shouldn't increment
+
+ window.reset(new QQuickView);
+
+ //QTBUG-49100
+ QVERIFY2(initView(*window.data(), testFileUrl("qtbug49100.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));
+
+ QVERIFY(window->rootObject() != 0);
}
void tst_QQuickMouseArea::hoverPosition()