Find a file
Peter Hutterer a7e4cbc212 quirks: allow overriding of AttrEventCode and AttrInputProp
This switches the quirk from AttrEventCodeEnable/Disable to just
AttrEventCode with a +/- prefix for each entry.
This switches the quirk from AttrInputPropEnable/Disable to just
AttrInputProp with a +/- prefix for each entry.

Previously, both event codes and input props would only apply the
last-matching section entry for a device. Furthermore, an earlier Disable entry
would take precedence over a later Enable entry. For example, a set of
sections with these lines *should* enable left, right and middle:

  [first]
  AttrEventCodeEnable=BTN_LEFT;BTN_RIGHT;BTN_MIDDLE

  [second]
  AttrEventCodeDisable=BTN_RIGHT

  [third]
  AttrEventCodeEnable=BTN_LEFT;BTN_RIGHT;

Alas: the first line was effectively ignored (quirks only returned the
last-matching one, i.e. the one from "third"). And due to implementation
details in evdev.c, the Disable attribute was processed after Enable,
i.e. the device was enabled for left + right and then disabled for
right. As a result, the device only had BTN_LEFT enabled.

Fix this by changing the attribute to carry both enable/disable
information and merging the commands together.

Internally, all quirks matching a device are simply ref'd into an array
in the struct quirks. The applied value is simply the last entry in the
array corresponding to our quirk.

For AttrEventCode and AttrInputProp instead do this:
- switch them to a tuple with the code as first entry and a boolean
  enable/disable as second entry
- if the struct quirk already has an entry for either, append the more
  recent one to the existing entry (instead of creating a new entry in
  the array). This way we have all entries that match and in-order of
  precedence - i.e. we can process them left-to-right to end up
  with the right state.

Fixes: https://gitlab.freedesktop.org/libinput/libinput/-/issues/821

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2022-11-28 08:25:41 +10:00
.gitlab/issue_templates Remove trailing whitespaces in the tree 2022-11-25 10:08:20 +10:00
.gitlab-ci gitlab CI: add a job to check for whitespace issues 2022-11-25 10:08:20 +10:00
completion/zsh touchpad: new option dwtp (disable-while-trackpointing) 2022-03-08 01:33:40 +00:00
doc quirks: allow overriding of AttrEventCode and AttrInputProp 2022-11-28 08:25:41 +10:00
include Remove trailing whitespaces in the tree 2022-11-25 10:08:20 +10:00
quirks quirks: allow overriding of AttrEventCode and AttrInputProp 2022-11-28 08:25:41 +10:00
src quirks: allow overriding of AttrEventCode and AttrInputProp 2022-11-28 08:25:41 +10:00
test quirks: allow overriding of AttrEventCode and AttrInputProp 2022-11-28 08:25:41 +10:00
tools quirks: allow overriding of AttrEventCode and AttrInputProp 2022-11-28 08:25:41 +10:00
udev libwacom: fix warnings building without libwacom 2022-07-12 19:44:59 +02:00
.dir-locals.el indentation: add .dir-locals.el for emacs 2018-02-26 18:44:00 +10:00
.editorconfig editorconfig: add settings for meson files 2021-08-04 05:58:29 +00:00
.gitignore gitignore: ignore gnuplot files 2018-05-10 16:25:40 +10:00
.gitlab-ci.yml gitlab CI: add a job to check for whitespace issues 2022-11-25 10:08:20 +10:00
.vimdir Add .vimdir for libinput-specific settings 2015-05-25 09:17:29 +10:00
CODING_STYLE.md CODING_STYLE: update with a better description for variable assignments 2022-06-29 14:37:58 +10:00
COPYING Change various references to the master branch to main 2021-04-29 01:31:03 +00:00
meson.build libinput 1.22.0 2022-11-19 12:21:06 +01:00
meson_options.txt meson.build: disable documentation by default 2021-08-03 12:11:09 +10:00
README.md Change various references to the master branch to main 2021-04-29 01:31:03 +00:00

libinput

libinput is a library that provides a full input stack for display servers and other applications that need to handle input devices provided by the kernel.

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

User documentation

Documentation explaining features available in libinput is available here.

This includes the FAQ and the instructions on reporting bugs.

Source code

The source code of libinput can be found at: https://gitlab.freedesktop.org/libinput/libinput

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

Build instructions: https://wayland.freedesktop.org/libinput/doc/latest/building.html

Reporting Bugs

Bugs can be filed on freedesktop.org GitLab: https://gitlab.freedesktop.org/libinput/libinput/issues/

Where possible, please provide the libinput record output of the input device and/or the event sequence in question.

See https://wayland.freedesktop.org/libinput/doc/latest/reporting-bugs.html 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.

About

Documentation generated from git commit GIT_VERSION