From 4da18221008d88f55aa0d91a3bb436bb282c9975 Mon Sep 17 00:00:00 2001 From: Sebastian Krzyszkowiak Date: Sun, 14 Jul 2019 20:18:00 +0200 Subject: [PATCH] Send wl_pointer.frame when emulating pointer events out of touch ones When touching a surface that doesn't register to wl_touch events, KWin didn't send frame events (which it does for regular pointer and touch events), causing severe updating issues with some clients. Test Plan: Launch a client that doesn't attach to wl_touch (for instance, rootston) with WAYLAND_DEBUG=client and watch the logs while touching its window. --- src/wayland/seat_interface.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/wayland/seat_interface.cpp b/src/wayland/seat_interface.cpp index 99644eaee2..1cb5e13ed9 100644 --- a/src/wayland/seat_interface.cpp +++ b/src/wayland/seat_interface.cpp @@ -1470,6 +1470,7 @@ void SeatInterface::touchMove(qint32 id, const QPointF &globalPosition) [this, pos] (PointerInterface *p) { wl_pointer_send_motion(p->resource(), timestamp(), wl_fixed_from_double(pos.x()), wl_fixed_from_double(pos.y())); + p->d_func()->sendFrame(); } ); } @@ -1497,6 +1498,7 @@ void SeatInterface::touchUp(qint32 id) forEachInterface(focusedTouchSurface(), d->pointers, [this, serial] (PointerInterface *p) { wl_pointer_send_button(p->resource(), serial, timestamp(), BTN_LEFT, WL_POINTER_BUTTON_STATE_RELEASED); + p->d_func()->sendFrame(); } ); }