Find a file
Peter Hutterer 1c8636923b fallback: send key events out immediately upon receiving them
Commit db3b6fe5f7 "fallback: change to handle the state at EV_SYN time"
introduced regressions for two types of event sequences.

One is a kernel bug - some devices/drivers like the asus-wireless send a key
press + release within the same event frame which now cancels out and
disappears into the ether. This should be fixed in the kernel drivers but
there appear to be enough of them that we can't just pretend it's an outlier.

The second issue is a libinput bug. If we get two key events in the same frame
(e.g. shift + A) we update the state correctly but the events are sent in the
order of the event codes. KEY_A sorts before KEY_LEFTSHIFT and our shift + A
becomes A + shift.

Fix this by treating key events as before db3b6fe5f7 - by sending them out
as we get them.

https://bugs.freedesktop.org/show_bug.cgi?id=104030

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-12-08 10:09:26 +10:00
doc doc: more and more documentation about hwdb updates 2017-11-30 10:21:15 +10:00
include/linux include: sync linux kernel header files with 4.12 2017-09-21 09:07:21 +10:00
src fallback: send key events out immediately upon receiving them 2017-12-08 10:09:26 +10:00
test fallback: send key events out immediately upon receiving them 2017-12-08 10:09:26 +10:00
tools Include stdarg.h where variadic functions are used 2017-12-01 09:31:42 +10:00
udev udev: add integration flag for the Lenovo Compact Keyboard with TrackPoint 2017-11-14 15:53:12 +10:00
.gitignore Drop autotools 2017-07-04 13:44:07 +10:00
.vimdir Add .vimdir for libinput-specific settings 2015-05-25 09:17:29 +10:00
circle.yml circle.yml: add libsolv to the fedora packages 2017-11-06 09:42:26 +10:00
CODING_STYLE Add more rules to CODING_STYLE 2015-07-08 09:19:05 +10:00
COPYING COPYING: Update boilerplate from MIT X11 to MIT Expat license 2015-06-16 14:36:04 +10:00
meson.build meson.build: add missing udev dependencies and linux/input.h includes 2017-12-01 09:29:31 +10:00
meson_options.txt Fix meson options default values 2017-10-10 08:21:10 +10:00
README.md README: tidy up the documentation links 2017-07-03 14:43:26 +10:00

libinput

libinput is a library that handles input devices for display servers and other applications that need to directly deal with input devices.

It provides device detection, device handling, input device event processing and abstraction so minimize the amount of custom input code the user of libinput need to provide the common set of functionality that users expect. Input event processing includes scaling touch coordinates, generating pointer events from touchpads, pointer acceleration, etc.

libinput originates from weston, the Wayland reference compositor.

Architecture

libinput is not used directly by applications, rather it is used by the xf86-input-libinput X.Org driver or wayland compositors. The typical software stack for a system running Wayland is:

@dotfile libinput-stack-wayland.gv

Where the Wayland compositor may be Weston, mutter, KWin, etc. Note that Wayland encourages the use of toolkits, so the Wayland client (your application) does not usually talk directly to the compositor but rather employs a toolkit (e.g. GTK) to do so.

The simplified software stack for a system running X.Org is:

@dotfile libinput-stack-xorg.gv

Again, on a modern system the application does not usually talk directly to the X server using Xlib but rather employs a toolkit to do so.

Source code

The source code of libinput can be found at: http://cgit.freedesktop.org/wayland/libinput

For a list of current and past releases visit: http://www.freedesktop.org/wiki/Software/libinput/

Build instructions: http://wayland.freedesktop.org/libinput/doc/latest/building_libinput.html

Reporting Bugs

Bugs can be filed in the libinput component of Wayland: https://bugs.freedesktop.org/enter_bug.cgi?product=Wayland&component=libinput

Where possible, please provide an evemu recording of the input device and/or the event sequence in question.

See @ref reporting_bugs for more info.

Documentation

Examples of how to use libinput are the debugging tools in the libinput repository. Developers are encouraged to look at those tools for a real-world (yet simple) example on how to use libinput.

License

libinput is licensed under the MIT license.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: [...]

See the COPYING file for the full license information.