diff options
-rw-r--r-- | src/compositor/compositor_api/qwaylandsurfaceitem.cpp | 14 | ||||
-rw-r--r-- | src/compositor/compositor_api/qwaylandsurfaceitem.h | 1 |
2 files changed, 15 insertions, 0 deletions
diff --git a/src/compositor/compositor_api/qwaylandsurfaceitem.cpp b/src/compositor/compositor_api/qwaylandsurfaceitem.cpp index 1099eb764..35e0cd285 100644 --- a/src/compositor/compositor_api/qwaylandsurfaceitem.cpp +++ b/src/compositor/compositor_api/qwaylandsurfaceitem.cpp @@ -217,6 +217,12 @@ void QWaylandSurfaceItem::keyReleaseEvent(QKeyEvent *event) void QWaylandSurfaceItem::touchEvent(QTouchEvent *event) { if (m_touchEventsEnabled) { + if (event->type() == QEvent::TouchBegin) { + QQuickItem *grabber = window()->mouseGrabberItem(); + if (grabber != this) + grabMouse(); + } + QWaylandInputDevice *inputDevice = compositor()->defaultInputDevice(); event->accept(); if (inputDevice->mouseFocus() != this) { @@ -232,6 +238,14 @@ void QWaylandSurfaceItem::touchEvent(QTouchEvent *event) } } +void QWaylandSurfaceItem::mouseUngrabEvent() +{ + if (surface()) { + QTouchEvent e(QEvent::TouchCancel); + touchEvent(&e); + } +} + void QWaylandSurfaceItem::takeFocus() { setFocus(true); diff --git a/src/compositor/compositor_api/qwaylandsurfaceitem.h b/src/compositor/compositor_api/qwaylandsurfaceitem.h index 93283355f..2805db52a 100644 --- a/src/compositor/compositor_api/qwaylandsurfaceitem.h +++ b/src/compositor/compositor_api/qwaylandsurfaceitem.h @@ -100,6 +100,7 @@ protected: void keyReleaseEvent(QKeyEvent *event); void touchEvent(QTouchEvent *event); + void mouseUngrabEvent() Q_DECL_OVERRIDE; public slots: void takeFocus(); |