summaryrefslogtreecommitdiffstats
path: root/src/compositor
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@theqtcompany.com>2015-02-16 11:05:38 +0100
committerFrederik Gladhorn <frederik.gladhorn@theqtcompany.com>2015-02-16 11:05:38 +0100
commit2d0c80018e6da8193a6c5bd5d764da509e16ab46 (patch)
treee6ffaf8ec73f6cade2d5fbd17b3ba6d27c790a77 /src/compositor
parente6805407b62c9c57bac488813f77ee5cca71868e (diff)
parent8458e06b25c07ebc8cf6b210fc1ea4cc9aeb42eb (diff)
Merge remote-tracking branch 'origin/5.4' into dev
Conflicts: src/client/qwaylanddataoffer.cpp src/client/qwaylanddisplay.cpp src/client/qwaylandinputdevice.cpp src/client/qwaylandwindow.cpp src/compositor/compositor_api/qwaylandsurfaceitem.cpp Change-Id: I2eae0fd43a71fbfd7c907ca715707a26f3c134c5
Diffstat (limited to 'src/compositor')
-rw-r--r--src/compositor/compositor_api/qwaylandsurfaceitem.cpp14
-rw-r--r--src/compositor/compositor_api/qwaylandsurfaceitem.h1
-rw-r--r--src/compositor/compositor_api/qwaylandsurfaceview.cpp6
3 files changed, 21 insertions, 0 deletions
diff --git a/src/compositor/compositor_api/qwaylandsurfaceitem.cpp b/src/compositor/compositor_api/qwaylandsurfaceitem.cpp
index 8a0d6bd28..972a9d34a 100644
--- a/src/compositor/compositor_api/qwaylandsurfaceitem.cpp
+++ b/src/compositor/compositor_api/qwaylandsurfaceitem.cpp
@@ -229,6 +229,12 @@ void QWaylandSurfaceItem::touchEvent(QTouchEvent *event)
if (m_touchEventsEnabled) {
QWaylandInputDevice *inputDevice = compositor()->inputDeviceFor(event);
+ if (event->type() == QEvent::TouchBegin) {
+ QQuickItem *grabber = window()->mouseGrabberItem();
+ if (grabber != this)
+ grabMouse();
+ }
+
QPoint pointPos;
const QList<QTouchEvent::TouchPoint> &points = event->touchPoints();
if (!points.isEmpty())
@@ -249,6 +255,14 @@ void QWaylandSurfaceItem::touchEvent(QTouchEvent *event)
}
}
+void QWaylandSurfaceItem::mouseUngrabEvent()
+{
+ if (surface()) {
+ QTouchEvent e(QEvent::TouchCancel);
+ touchEvent(&e);
+ }
+}
+
void QWaylandSurfaceItem::takeFocus(QWaylandInputDevice *device)
{
setFocus(true);
diff --git a/src/compositor/compositor_api/qwaylandsurfaceitem.h b/src/compositor/compositor_api/qwaylandsurfaceitem.h
index 2573fba3e..2bf822f54 100644
--- a/src/compositor/compositor_api/qwaylandsurfaceitem.h
+++ b/src/compositor/compositor_api/qwaylandsurfaceitem.h
@@ -101,6 +101,7 @@ protected:
void keyReleaseEvent(QKeyEvent *event);
void touchEvent(QTouchEvent *event);
+ void mouseUngrabEvent() Q_DECL_OVERRIDE;
public slots:
virtual void takeFocus(QWaylandInputDevice *device = 0);
diff --git a/src/compositor/compositor_api/qwaylandsurfaceview.cpp b/src/compositor/compositor_api/qwaylandsurfaceview.cpp
index e6fd90587..664ab9805 100644
--- a/src/compositor/compositor_api/qwaylandsurfaceview.cpp
+++ b/src/compositor/compositor_api/qwaylandsurfaceview.cpp
@@ -42,6 +42,8 @@
#include "qwaylandsurfaceview.h"
#include "qwaylandsurface.h"
#include "qwaylandsurface_p.h"
+#include "qwaylandcompositor.h"
+#include "qwaylandinput.h"
QT_BEGIN_NAMESPACE
@@ -65,6 +67,10 @@ QWaylandSurfaceView::QWaylandSurfaceView(QWaylandSurface *surf)
QWaylandSurfaceView::~QWaylandSurfaceView()
{
if (d->surface) {
+ QWaylandInputDevice *i = d->surface->compositor()->defaultInputDevice();
+ if (i->mouseFocus() == this)
+ i->setMouseFocus(nullptr, QPointF());
+
d->surface->destroy();
d->surface->d_func()->views.removeOne(this);
}