diff options
author | Frederik Gladhorn <frederik.gladhorn@theqtcompany.com> | 2015-02-16 11:05:38 +0100 |
---|---|---|
committer | Frederik Gladhorn <frederik.gladhorn@theqtcompany.com> | 2015-02-16 11:05:38 +0100 |
commit | 2d0c80018e6da8193a6c5bd5d764da509e16ab46 (patch) | |
tree | e6ffaf8ec73f6cade2d5fbd17b3ba6d27c790a77 /src/compositor | |
parent | e6805407b62c9c57bac488813f77ee5cca71868e (diff) | |
parent | 8458e06b25c07ebc8cf6b210fc1ea4cc9aeb42eb (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.cpp | 14 | ||||
-rw-r--r-- | src/compositor/compositor_api/qwaylandsurfaceitem.h | 1 | ||||
-rw-r--r-- | src/compositor/compositor_api/qwaylandsurfaceview.cpp | 6 |
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); } |