From c445cf7d4e517248013e707a5050f9e0408a2746 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Mon, 21 Nov 2016 11:53:26 +0100 Subject: Only send mouse move event when mouse moves Qt Quick recently changed to send hover events 60 times per second even if the mouse doesn't move. Make sure we only send mouse move events over the Wayland protocol if the mouse actually moved. Change-Id: Ic196512dde1718de461eb2c64cec2e95e220ce89 Reviewed-by: Johan Helsing --- src/compositor/compositor_api/qwaylandquickitem.cpp | 8 +++++++- src/compositor/compositor_api/qwaylandquickitem_p.h | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/compositor/compositor_api/qwaylandquickitem.cpp b/src/compositor/compositor_api/qwaylandquickitem.cpp index d57cbb420..9bf428136 100644 --- a/src/compositor/compositor_api/qwaylandquickitem.cpp +++ b/src/compositor/compositor_api/qwaylandquickitem.cpp @@ -481,6 +481,7 @@ void QWaylandQuickItem::mousePressEvent(QMouseEvent *event) seat->sendMouseMoveEvent(d->view.data(), mapToSurface(event->localPos()), event->windowPos()); seat->sendMousePressEvent(event->button()); + d->hoverPos = event->pos(); } /*! @@ -503,6 +504,7 @@ void QWaylandQuickItem::mouseMoveEvent(QMouseEvent *event) } } else { seat->sendMouseMoveEvent(d->view.data(), mapToSurface(event->localPos()), event->windowPos()); + d->hoverPos = event->pos(); } } else { emit mouseMove(event->windowPos()); @@ -543,6 +545,7 @@ void QWaylandQuickItem::hoverEnterEvent(QHoverEvent *event) if (d->shouldSendInputEvents()) { QWaylandSeat *seat = compositor()->seatFor(event); seat->sendMouseMoveEvent(d->view.data(), event->pos(), mapToScene(event->pos())); + d->hoverPos = event->pos(); } else { event->ignore(); } @@ -562,7 +565,10 @@ void QWaylandQuickItem::hoverMoveEvent(QHoverEvent *event) } if (d->shouldSendInputEvents()) { QWaylandSeat *seat = compositor()->seatFor(event); - seat->sendMouseMoveEvent(d->view.data(), mapToSurface(event->pos()), mapToScene(event->pos())); + if (event->pos() != d->hoverPos) { + seat->sendMouseMoveEvent(d->view.data(), mapToSurface(event->pos()), mapToScene(event->pos())); + d->hoverPos = event->pos(); + } } else { event->ignore(); } diff --git a/src/compositor/compositor_api/qwaylandquickitem_p.h b/src/compositor/compositor_api/qwaylandquickitem_p.h index 441ac9764..fc69fe09c 100644 --- a/src/compositor/compositor_api/qwaylandquickitem_p.h +++ b/src/compositor/compositor_api/qwaylandquickitem_p.h @@ -173,6 +173,7 @@ public: bool newTexture; bool focusOnClick; bool sizeFollowsSurface; + QPoint hoverPos; QQuickWindow *connectedWindow; QWaylandSurface::Origin origin; -- cgit v1.2.3