dix: Add POINTER_RAWONLY flag

Graphics / X.Org / X.Org Server - Olivier Fourdan [redhat.com] - 15 February 2021 08:42 UTC

This add a new flag POINTER_RAWONLY for GetPointerEvents() which does pretty much the opposite of POINTER_NORAW.

Basically, this tells GetPointerEvents() that we only want the DeviceChanged events and any raw events for this motion but no actual motion events.

This is preliminary work for Xwayland to be able to use relative motion events for raw events. Xwayland would use absolute events for raw events, but some X11 clients (wrongly) assume raw events to be always relative.

To allow such clients to work with Xwayland, it needs to switch to relative raw events (if those are available from the Wayland compositor).

However, Xwayland cannot use relative motion events for actual pointer location because that would cause a drift over time, the pointer being actually controlled by the Wayland compositor.

So Xwayland needs to be able to send only relative raw events, hence this API.

Bump the ABI_XINPUT_VERSION minor version to reflect that API addition.

v2: Actually avoid sending motion events (Peter)
v3: Keep sending raw emulated events with RAWONLY (Peter)

b5e1f1368 dix: Add POINTER_RAWONLY flag
dix/getevents.c | 53 +++++++++++++++++++++++-------------------
hw/xfree86/common/xf86Module.h | 2 +-
include/input.h | 1 +
3 files changed, 31 insertions(+), 25 deletions(-)

Upstream: cgit.freedesktop.org


  • Share