[PATCH xserver 00/12] xwayland: Pointer confinement and warping
Jonas Ådahl
jadahl at gmail.com
Thu Sep 8 10:46:29 UTC 2016
Hi,
This series adds support for raw pointer events, pointer confinement and
introduces pointer warp emulation to implement pointer-lock like features
clients use pointer warping for.
Raw pointer events is done by adding a new valuator mask setter that takes both
an absolute value and an unaccelerated value. It is similar to that of
valuator_mask_set_unaccelerated() except that it takes an absolute pointer
coordinate instead of a relative coordinate.
Confinement is pretty straight forward; if a client tries to grab a pointer
with a confineTo set to some window, this will be translated into confining the
pointer using the pointer constraints protocol.
Pointer warping emulation works roughly by locking the pointer whenever an X11
client tries to warp the pointer while the cursor is invisible. See the
corresponding patch for further details.
Note that the compositor side implementation of the pointer constraints
protocol need to special case X11 clients due to various reasons. Thus, an
unpatched mutter/weston will not be able to enable confinement and warp
emulation to work properly. mutter/gnome-shell patches, however, are available
here[0].
All of this seems to work fairly Ok on various games I have tested. I've tested
SDL 2 using the X11 backend (ioquake3), GLFW using the X11 backend, OpenTTD,
Half Life 1, Half Life 2, Shadow Warrior, Trine 2, Portal, and they seem to
work with no obvious flaws right now. However given the nature of this
approach, I expect various things needs to be tweaked to get all applications
working. Also special thanks to Krzysztof Sobiecki for helping out and for
testing a lot of games finding.
While I realize it is pretty late in the development schedule, assuming these
patches introduces too much changes for the coming release, would it be
possible to land at least the ABI breaking ones (1-3?) so that it is possible
to distribute a patched version that will be ABI compatible with the coming
release?
Jonas
[0] https://github.com/jadahl/mutter/commits/wip/xwayland-pointer-warps
Jonas Ådahl (11):
dix: Introduce CursorWarpedTo vfunc in Screen
dix: Incroduce CursorConfinedTo vfunc in Screen
dix: Add valuator_mask_set_absolute_unaccelerated
xwayland: Bind the relative pointer manager
xwayland: Split up device class init/release into functions
xwayland: Dispatch pointer motion events on wl_pointer.frame if
possible
xwayland: Set unaccelerated pointer motion delta if available
xwayland: Put getting a xwl_window from a Window in a helper
xwayland: Bind pointer constraints global
xwayland: Translate a pointer grab with confineTo to pointer
confinement
xwayland: Add pointer warp emulator
Krzysztof Sobiecki (1):
xwayland: Add a new input device used for pointer warping/locking
configure.ac | 4 +-
dix/events.c | 8 +
dix/inpututils.c | 13 +
hw/xwayland/.gitignore | 4 +
hw/xwayland/Makefile.am | 28 +-
hw/xwayland/xwayland-cursor.c | 7 +
hw/xwayland/xwayland-input.c | 674 +++++++++++++++++++++++++++++++++++++-----
hw/xwayland/xwayland.c | 89 +++++-
hw/xwayland/xwayland.h | 43 +++
include/input.h | 5 +-
include/scrnintstr.h | 14 +
11 files changed, 815 insertions(+), 74 deletions(-)
--
2.7.4
More information about the xorg-devel
mailing list