From cf59a0acaee9b47bd371dd3ab8f0a6bd1f5b6d35 Mon Sep 17 00:00:00 2001 From: Liang Qi Date: Thu, 26 Nov 2015 07:37:17 +0100 Subject: MouseArea: fixed a crash in propagate() Should not propagate without window. Task-number: QTBUG-49100 Change-Id: Ieda3a8357283f8d07d4ffc0cc62c4e15645d7e5a Reviewed-by: J-P Nurmi --- src/quick/items/qquickmousearea.cpp | 2 +- .../auto/quick/qquickmousearea/data/qtbug49100.qml | 29 ++++++++++++++++++++++ .../quick/qquickmousearea/tst_qquickmousearea.cpp | 13 ++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 tests/auto/quick/qquickmousearea/data/qtbug49100.qml 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() -- cgit v1.2.3