summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/compositor/compositor_api/qwaylandsurfaceitem.cpp14
-rw-r--r--src/compositor/compositor_api/qwaylandsurfaceitem.h1
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();