diff options
-rw-r--r-- | examples/location/places/items/MapComponent.qml | 5 | ||||
-rw-r--r-- | src/imports/location/qdeclarativegeomap.cpp | 5 | ||||
-rw-r--r-- | src/imports/location/qquickgeomapgesturearea.cpp | 25 | ||||
-rw-r--r-- | tests/auto/declarative_ui/tst_map_pinch.qml | 1 |
4 files changed, 23 insertions, 13 deletions
diff --git a/examples/location/places/items/MapComponent.qml b/examples/location/places/items/MapComponent.qml index ccf1415d..de4e04a7 100644 --- a/examples/location/places/items/MapComponent.qml +++ b/examples/location/places/items/MapComponent.qml @@ -211,9 +211,4 @@ Map { map.zoomLevel = value } } - - MouseArea { - //workaround for QTBUG-46388 - anchors.fill: parent - } } diff --git a/src/imports/location/qdeclarativegeomap.cpp b/src/imports/location/qdeclarativegeomap.cpp index ccff4fd1..cf492977 100644 --- a/src/imports/location/qdeclarativegeomap.cpp +++ b/src/imports/location/qdeclarativegeomap.cpp @@ -942,9 +942,10 @@ void QDeclarativeGeoMap::touchEvent(QTouchEvent *event) event->type() == QEvent::TouchCancel) { ungrabTouchPoints(); } + } else { + //ignore event so sythesized event is generated; + QQuickItem::touchEvent(event); } - //this will always ignore event so sythesized event is generated; - QQuickItem::touchEvent(event); } /*! diff --git a/src/imports/location/qquickgeomapgesturearea.cpp b/src/imports/location/qquickgeomapgesturearea.cpp index c3536e11..8c4eadda 100644 --- a/src/imports/location/qquickgeomapgesturearea.cpp +++ b/src/imports/location/qquickgeomapgesturearea.cpp @@ -620,8 +620,12 @@ void QQuickGeoMapGestureArea::handleMouseMoveEvent(QMouseEvent *event) */ void QQuickGeoMapGestureArea::handleMouseReleaseEvent(QMouseEvent *event) { - m_mousePoint.reset(createTouchPointFromMouseEvent(event, Qt::TouchPointReleased)); - if (m_touchPoints.isEmpty()) update(); + if (!m_mousePoint.isNull()) { + //this looks super ugly , however is required in case we do not get synthesized MouseReleaseEvent + //and we reset the point already in handleTouchUngrabEvent + m_mousePoint.reset(createTouchPointFromMouseEvent(event, Qt::TouchPointReleased)); + if (m_touchPoints.isEmpty()) update(); + } event->accept(); } @@ -630,9 +634,13 @@ void QQuickGeoMapGestureArea::handleMouseReleaseEvent(QMouseEvent *event) */ void QQuickGeoMapGestureArea::handleMouseUngrabEvent() { - m_mousePoint.reset(); - if (m_touchPoints.isEmpty()) + + if (m_touchPoints.isEmpty() && !m_mousePoint.isNull()) { + m_mousePoint.reset(); update(); + } else { + m_mousePoint.reset(); + } } /*! @@ -640,8 +648,11 @@ void QQuickGeoMapGestureArea::handleMouseUngrabEvent() */ void QQuickGeoMapGestureArea::handleTouchUngrabEvent() { - m_touchPoints.clear(); - update(); + m_touchPoints.clear(); + //this is needed since in some cases mouse release is not delivered + //(second touch point brakes mouse synthesized events) + m_mousePoint.reset(); + update(); } /*! @@ -654,6 +665,8 @@ void QQuickGeoMapGestureArea::handleTouchEvent(QTouchEvent *event) m_touchPoints << event->touchPoints().at(i); if (event->touchPoints().count() >= 2) event->accept(); + else + event->ignore(); update(); } diff --git a/tests/auto/declarative_ui/tst_map_pinch.qml b/tests/auto/declarative_ui/tst_map_pinch.qml index bdf88e29..f4e57faa 100644 --- a/tests/auto/declarative_ui/tst_map_pinch.qml +++ b/tests/auto/declarative_ui/tst_map_pinch.qml @@ -118,6 +118,7 @@ Item { map.center = coordinate map.minimumZoomLevel = 0 map.maximumZoomLevel = 20 + mouseRelease(mouseAreaTop,0,0) //Fixme: mouse area state gets broken across the tests mouseAreaBottom.visible = false mouseAreaTop.visible = false pinchGenerator.clear() |