diff --git a/src/compositor/compositor_api/qwaylandquickitem.cpp b/src/compositor/compositor_api/qwaylandquickitem.cpp
index a1855529caff81ec04aca09dd9c6814c6c817465..5e90c06c7fee4551cd4cff5b86bf26a13ba2394b 100644
--- a/src/compositor/compositor_api/qwaylandquickitem.cpp
+++ b/src/compositor/compositor_api/qwaylandquickitem.cpp
@@ -645,6 +645,12 @@ void QWaylandQuickItem::touchEvent(QTouchEvent *event)
                 grabMouse();
         }
 
+        if (event->type() == QEvent::TouchEnd) {
+            QQuickItem *grabber = window()->mouseGrabberItem();
+            if (grabber == this)
+                ungrabMouse();
+        }
+
         QPoint pointPos;
         const QList<QTouchEvent::TouchPoint> &points = event->touchPoints();
         if (!points.isEmpty())