Hi again, This series is a follow up from the last series. It had received some review (on the list and on phabricator), and I had some issues of my own, so here is a new one. I'll briefly go through the differences from the previous version below.
I'm sending it now, even though we are in the process of releasing a new version, because it has been asked for so that people can test games etc more easily on Wayland. I don't expect anyone to review these as long as there are patches targeted at the release they need to review first. Note that these protocols does not try to solve every possible use case for dealing with a mouse device (as discussed in a couple of threads a while ago). I.e. it is not a replacement for any kind of 'raw' (for instance evdev fd passing) solution, but rather a way for clients that doesn't want to reimplement bare metal input device processing to get relative motion events from pointer devices (mice, touchpads, trackpoints etc). Examples of such potential users are SDL, GLFW, FreeGLUT(?), nested weston, virtual machine UI's and Xwayland, just to mention a few. Also note that the 'click-to-lock' semantics are not part of the protocol, but a compositor policy used in order to avoid pointer stealing. Changes to the preparation (1-11): * The motion event now uses double's to store data. This change was due wl_fixed_t not being detailed enough for certain ridiculous mice[0]. Note that there are more changes needed to make that small motion events work properly. Changes to the relative pointer protocol (12-13): * Introduce a data type abstraction used for sending 64 bit fixed point. This is needed in order to be able to send very tiny motion events[0]. On the wire it'll just be two 'i':s and the compositor/client manually translates to a more sane data type using the conversion helpers. * Change the relative pointer motion event to emit motion vectors in the 64 bit fixed point data type as described above. * A relative pointer is created from a pointer. This is to make it more obvious that it is an extension to wl_pointer and not a separate device. Changes to the pointer lock and confinement protocols (14): * Serials are dropped (from the confined/locked events and set_cursor_position_hint). They were useless as lock/confine objects are one-shot and the server can use other methods (checking instance pointer for example) to avoid races. Other additions in this series: * Support for non-rectangular confinement regions is implemented. A command line flag to clickdot is added to illustrate how it works. There are plenty of potential for optimization, and tests are needed but yet to be written, but I don't want to delay something that works with that. Other changes include various review issues fixes. Updated implementation of GLFW can be found at <https://github.com/jadahl/glfw/commits/pointer-lock-v2>, SDL2 at <https://bitbucket.org/jadahl/sdl/branch/pointer-lock-v2>. The patches in this series can, for easier testing, be found at <https://github.com/jadahl/weston/commits/wip/pointer-lock-v4>. Comments and input welcome. Jonas [0] https://bugs.freedesktop.org/show_bug.cgi?id=85715 Jonas Ådahl (21): input: Pass axis events through pointer grab interfaces input: Make pointer grab motion callbacks take an event struct desktop-shell: Add surface_keyboard_focus_lost helper desktop-shell: Make activate_binding take a view instead of surface desktop-shell: Track the black surface by its view desktop-shell: Change switcher to track views desktop-shell: Make activate() take a view instead of surface desktop-shell: Pass a flag bitmask instead of bool to activate() compositor: Keep track of what views were activated by clicking libinput: Expose unaccelerated motion deltas in motion event struct input: Don't send wl_pointer.motion if position didn't change Introduce a 'double fixed' data type abstraction Introduce wl_relative_pointer interface Introduce pointer locking and confinement protocol clients: Add API for pointer locking and pointer confinement clients/resizor: Use pointer locking for resizing window clients/clickdot: Use pointer confinement to confine drawed line input: Support non-rectangular pointer confine regions clients/clickdot: Reset motion lines on Backspace window: Add API for manually set confine region clients/clickdot: Add option for using a more complex confine region Makefile.am | 22 +- clients/clickdot.c | 170 ++++- clients/resizor.c | 159 ++++- clients/window.c | 316 ++++++++++ clients/window.h | 68 ++ desktop-shell/exposay.c | 24 +- desktop-shell/shell.c | 175 ++++-- desktop-shell/shell.h | 4 +- ivi-shell/hmi-controller.c | 18 +- protocol/pointer-lock.xml | 208 +++++++ protocol/relative-pointer.xml | 112 ++++ shared/util.h | 57 ++ src/compositor-x11.c | 13 +- src/compositor.c | 9 + src/compositor.h | 74 ++- src/data-device.c | 11 +- src/input.c | 1352 +++++++++++++++++++++++++++++++++++++++- src/libinput-device.c | 20 +- tests/double-fixed-benchmark.c | 110 ++++ tests/weston-test.c | 11 +- 20 files changed, 2797 insertions(+), 136 deletions(-) create mode 100644 protocol/pointer-lock.xml create mode 100644 protocol/relative-pointer.xml create mode 100644 shared/util.h create mode 100644 tests/double-fixed-benchmark.c -- 2.1.4 _______________________________________________ wayland-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/wayland-devel
