mirror of
https://github.com/X11Libre/xf86-input-libinput.git
synced 2026-04-14 10:54:17 +00:00
Compare commits
4 Commits
submit/uti
...
xf86-input
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9b9fa15602 | ||
|
|
0d8d6f15e2 | ||
|
|
e85ec72025 | ||
|
|
758e9037b5 |
@@ -1,17 +0,0 @@
|
|||||||
# https://editorconfig.org/
|
|
||||||
|
|
||||||
root = true
|
|
||||||
|
|
||||||
[*]
|
|
||||||
charset = utf-8
|
|
||||||
end_of_line = lf
|
|
||||||
trim_trailing_whitespace = true
|
|
||||||
insert_final_newline = true
|
|
||||||
|
|
||||||
[*.{c,h}]
|
|
||||||
indent_size = 8
|
|
||||||
indent_style = tab
|
|
||||||
|
|
||||||
[{meson.build,meson_options.txt}]
|
|
||||||
indent_size = 8
|
|
||||||
indent_style = tab
|
|
||||||
65
.github/ISSUE_TEMPLATE/01-bug-report.yml
vendored
65
.github/ISSUE_TEMPLATE/01-bug-report.yml
vendored
@@ -1,65 +0,0 @@
|
|||||||
name: 🐞 Bug report
|
|
||||||
description: Create a report to help us improve
|
|
||||||
|
|
||||||
labels: [bug, needs-triage]
|
|
||||||
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |
|
|
||||||
Please fill out the sections below to help everyone identify and fix the bug. If you have a general idea or question then please use the [discussions](https://github.com/orgs/X11Libre/discussions).
|
|
||||||
- type: dropdown
|
|
||||||
id: affected-version
|
|
||||||
attributes:
|
|
||||||
label: Select the version
|
|
||||||
options:
|
|
||||||
- 1.5.0.1
|
|
||||||
- Git master branch
|
|
||||||
- other or don't know
|
|
||||||
default: 1
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
id: description
|
|
||||||
attributes:
|
|
||||||
label: Describe your issue
|
|
||||||
placeholder: When I did X then Y happened.
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
id: steps
|
|
||||||
attributes:
|
|
||||||
label: Steps to reproduce
|
|
||||||
placeholder: |
|
|
||||||
1. Start ...
|
|
||||||
2. Do this
|
|
||||||
3. Do that
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
id: expected
|
|
||||||
attributes:
|
|
||||||
label: What did you expect?
|
|
||||||
placeholder: I expected this to happen.
|
|
||||||
- type: textarea
|
|
||||||
id: environment
|
|
||||||
attributes:
|
|
||||||
label: Additional Information
|
|
||||||
description: |
|
|
||||||
Additional information you want to provide such as logs, system info, environment, screenshots, etc.
|
|
||||||
placeholder: |
|
|
||||||
Add any other context about the bug here.
|
|
||||||
- type: checkboxes
|
|
||||||
id: checks
|
|
||||||
attributes:
|
|
||||||
label: Extra fields
|
|
||||||
options:
|
|
||||||
- label: I have checked the existing [issues](https://github.com/X11Libre/xf86-input-libinput/issues)
|
|
||||||
required: true
|
|
||||||
- label: I have read the [Contributing Guidelines](https://github.com/X11Libre/xserver/blob/master/CONTRIBUTING.md)
|
|
||||||
required: true
|
|
||||||
- label: I'd like to work on this issue
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |
|
|
||||||
Thanks for reporting this issue! We will get back to you as soon as possible.
|
|
||||||
49
.github/ISSUE_TEMPLATE/02-feature-request.yml
vendored
49
.github/ISSUE_TEMPLATE/02-feature-request.yml
vendored
@@ -1,49 +0,0 @@
|
|||||||
name: ✨ Feature request
|
|
||||||
description: Suggest a feature for this software
|
|
||||||
labels: [enhancement, needs-triage]
|
|
||||||
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |
|
|
||||||
Please fill out the sections below to properly describe the new software feature you are suggesting. If you have a general idea or question then please use the [discussions](https://github.com/orgs/X11Libre/discussions).
|
|
||||||
- type: textarea
|
|
||||||
id: description
|
|
||||||
attributes:
|
|
||||||
label: "Describe the feature"
|
|
||||||
placeholder: A thing in X that allows to do Y.
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
id: rationale
|
|
||||||
attributes:
|
|
||||||
label: "It should be done because"
|
|
||||||
placeholder: Doing Y is needed for Z.
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
id: alternative
|
|
||||||
attributes:
|
|
||||||
label: "What are the alternatives?"
|
|
||||||
placeholder: We could do A or B instead.
|
|
||||||
- type: textarea
|
|
||||||
id: context
|
|
||||||
attributes:
|
|
||||||
label: Additional context
|
|
||||||
description: Additional information you want to provide such as references to related issues or protocols, the implications on existing use cases, etc.
|
|
||||||
placeholder: |
|
|
||||||
Add any other context about the feature request here.
|
|
||||||
- type: checkboxes
|
|
||||||
id: checks
|
|
||||||
attributes:
|
|
||||||
label: Extra fields
|
|
||||||
options:
|
|
||||||
- label: I have checked the existing [issues](https://github.com/X11Libre/xf86-input-libinput/issues)
|
|
||||||
required: true
|
|
||||||
- label: I have read the [Contributing Guidelines](https://github.com/X11Libre/xserver/blob/master/CONTRIBUTING.md)
|
|
||||||
required: true
|
|
||||||
- label: I'd like to work on this issue
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |
|
|
||||||
Thanks for your suggestion! Let's see together if it can be done.
|
|
||||||
49
.github/ISSUE_TEMPLATE/03-code-cleanup.yml
vendored
49
.github/ISSUE_TEMPLATE/03-code-cleanup.yml
vendored
@@ -1,49 +0,0 @@
|
|||||||
name: 🔧 Code cleanup
|
|
||||||
description: Level up the source code
|
|
||||||
labels: [code-cleanup, needs-triage]
|
|
||||||
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |
|
|
||||||
Please fill out the sections below to properly describe the code cleanup you are suggesting. If you have a general idea or question then please use the [discussions](https://github.com/orgs/X11Libre/discussions).
|
|
||||||
- type: textarea
|
|
||||||
id: description
|
|
||||||
attributes:
|
|
||||||
label: "Describe the cleanup"
|
|
||||||
placeholder: C in X needs to be changed into D.
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
id: rationale
|
|
||||||
attributes:
|
|
||||||
label: "It should be done because"
|
|
||||||
placeholder: Having D is needed for E.
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
id: alternative
|
|
||||||
attributes:
|
|
||||||
label: "What are the alternatives?"
|
|
||||||
placeholder: We could do A or B instead.
|
|
||||||
- type: textarea
|
|
||||||
id: context
|
|
||||||
attributes:
|
|
||||||
label: Additional context
|
|
||||||
description: Additional information you want to provide such as implications on existing code, how to ensure API/ABI stability, which tests are needed or to be run, related issues, etc.
|
|
||||||
placeholder: |
|
|
||||||
Add any other context about the cleanup here.
|
|
||||||
- type: checkboxes
|
|
||||||
id: checks
|
|
||||||
attributes:
|
|
||||||
label: Extra fields
|
|
||||||
options:
|
|
||||||
- label: I have checked the existing [issues](https://github.com/X11Libre/xf86-input-libinput/issues)
|
|
||||||
required: true
|
|
||||||
- label: I have read the [Contributing Guidelines](https://github.com/X11Libre/xserver/blob/master/CONTRIBUTING.md)
|
|
||||||
required: true
|
|
||||||
- label: I'd like to work on this issue
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |
|
|
||||||
Thanks for looking at the source code! Let's see together how it can be improved.
|
|
||||||
38
.github/ISSUE_TEMPLATE/04-doc-update.yml
vendored
38
.github/ISSUE_TEMPLATE/04-doc-update.yml
vendored
@@ -1,38 +0,0 @@
|
|||||||
name: 🔖 Documentation update
|
|
||||||
description: Make your mark for better documentation
|
|
||||||
|
|
||||||
labels: [documentation, needs-triage]
|
|
||||||
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |
|
|
||||||
Please fill out the sections below to help others understand our software. If you have a general idea or question then please use the [discussions](https://github.com/orgs/X11Libre/discussions).
|
|
||||||
- type: textarea
|
|
||||||
id: description
|
|
||||||
attributes:
|
|
||||||
label: Describe the update
|
|
||||||
placeholder: These things need to be better documented.
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
id: environment
|
|
||||||
attributes:
|
|
||||||
label: Additional Information
|
|
||||||
description: Additional information you want to provide such as tickets related to changes in the software, affected files, screenshots, etc.
|
|
||||||
placeholder: |
|
|
||||||
Add any other context about the update here.
|
|
||||||
- type: checkboxes
|
|
||||||
id: checks
|
|
||||||
attributes:
|
|
||||||
label: Extra fields
|
|
||||||
options:
|
|
||||||
- label: I have checked the existing [issues](https://github.com/X11Libre/xf86-input-libinput/issues)
|
|
||||||
required: true
|
|
||||||
- label: I have read the [Contributing Guidelines](https://github.com/X11Libre/xserver/blob/master/CONTRIBUTING.md)
|
|
||||||
required: true
|
|
||||||
- label: I'd like to work on this issue
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |
|
|
||||||
Thanks for requesting this update! We will get back to you as soon as possible.
|
|
||||||
43
.github/ISSUE_TEMPLATE/05-org-task.yml
vendored
43
.github/ISSUE_TEMPLATE/05-org-task.yml
vendored
@@ -1,43 +0,0 @@
|
|||||||
name: ✅ Organizational task
|
|
||||||
description: Create a task for project organization
|
|
||||||
|
|
||||||
labels: [needs-triage, organization]
|
|
||||||
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |
|
|
||||||
Please fill out the sections below to get organizational things done. If you have a general idea or question then please use the [discussions](https://github.com/orgs/X11Libre/discussions).
|
|
||||||
- type: textarea
|
|
||||||
id: description
|
|
||||||
attributes:
|
|
||||||
label: Describe the task
|
|
||||||
placeholder: These things need to be done.
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
id: rationale
|
|
||||||
attributes:
|
|
||||||
label: "It should be done because"
|
|
||||||
placeholder: Doing Y is needed for Z.
|
|
||||||
- type: textarea
|
|
||||||
id: environment
|
|
||||||
attributes:
|
|
||||||
label: Additional Information
|
|
||||||
description: Additional information you want to provide such as the context for bigger tasks, the implicatons on existing workflows, related issues, etc.
|
|
||||||
placeholder: |
|
|
||||||
Add any other context about the task here.
|
|
||||||
- type: checkboxes
|
|
||||||
id: checks
|
|
||||||
attributes:
|
|
||||||
label: Extra fields
|
|
||||||
options:
|
|
||||||
- label: I have checked the existing [issues](https://github.com/X11Libre/xf86-input-libinput/issues)
|
|
||||||
required: true
|
|
||||||
- label: I have read the [Contributing Guidelines](https://github.com/X11Libre/xserver/blob/master/CONTRIBUTING.md)
|
|
||||||
required: true
|
|
||||||
- label: I'd like to work on this issue
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |
|
|
||||||
Thanks for adding this task! We will get back to you as soon as possible.
|
|
||||||
8
.github/ISSUE_TEMPLATE/config.yml
vendored
8
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -1,8 +0,0 @@
|
|||||||
blank_issues_enabled: false
|
|
||||||
contact_links:
|
|
||||||
- name: XLibre Community Support
|
|
||||||
url: https://github.com/orgs/X11Libre/discussions
|
|
||||||
about: Please ask and answer questions here.
|
|
||||||
- name: Mailing List
|
|
||||||
url: https://www.freelists.org/list/xlibre
|
|
||||||
about: You can join the discussions on our mailing list.
|
|
||||||
69
.github/actions/build-driver/action.yaml
vendored
69
.github/actions/build-driver/action.yaml
vendored
@@ -1,69 +0,0 @@
|
|||||||
name: 'build driver'
|
|
||||||
description: 'build driver against specific Xserver'
|
|
||||||
inputs:
|
|
||||||
xserver-version:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
runs:
|
|
||||||
using: "composite"
|
|
||||||
steps:
|
|
||||||
- name: check out driver repo
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: prepare build environment
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
MACHINE=`gcc -dumpmachine`
|
|
||||||
echo "MACHINE=$MACHINE" >> "$GITHUB_ENV"
|
|
||||||
echo "PKG_CONFIG_PATH=$X11_PREFIX/share/pkgconfig:$X11_PREFIX/lib/$MACHINE/pkgconfig:$X11_PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH" >> "$GITHUB_ENV"
|
|
||||||
sudo chown root /bin/tar && sudo chmod u+s /bin/tar
|
|
||||||
|
|
||||||
- name: apt cache
|
|
||||||
uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
path: /var/cache/apt
|
|
||||||
key: apt-cache-${{ hashFiles('.github/scripts/ubuntu/install-pkg.sh') }}
|
|
||||||
restore-keys: apt-cache-
|
|
||||||
|
|
||||||
- name: pkg install
|
|
||||||
shell: bash
|
|
||||||
run: sudo .github/scripts/ubuntu/install-pkg.sh
|
|
||||||
|
|
||||||
- name: X11 prereq cache
|
|
||||||
uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
path: |
|
|
||||||
${{ env.X11_PREFIX }}
|
|
||||||
key: ${{ runner.name }}-x11-deps-${{ hashFiles('.github/scripts/install-prereq.sh') }}
|
|
||||||
restore-keys: ${{ runner.name }}-x11-deps-
|
|
||||||
|
|
||||||
- name: generic prereq
|
|
||||||
shell: bash
|
|
||||||
run: .github/scripts/install-prereq.sh
|
|
||||||
|
|
||||||
- name: check out xserver repo
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
repository: X11Libre/xserver
|
|
||||||
path: xserver-sdk
|
|
||||||
ref: ${{ inputs.xserver-version }}
|
|
||||||
|
|
||||||
- name: build xserver sdk
|
|
||||||
shell: bash
|
|
||||||
env:
|
|
||||||
MESON_ARGS: -Dc_args="-fno-common" -Dprefix=/usr -Dnamespace=false -Dxselinux=false -Dxephyr=false -Dwerror=false -Dxcsecurity=false -Dxorg=true -Dxvfb=false -Dxnest=false -Ddocs=false
|
|
||||||
run: |
|
|
||||||
cd xserver-sdk
|
|
||||||
echo -n > .meson_environment
|
|
||||||
echo "export MESON_BUILDDIR=$MESON_BUILDDIR" >> .meson_environment
|
|
||||||
echo "export PKG_CONFIG_PATH=$PKG_CONFIG_PATH" >> .meson_environment
|
|
||||||
.gitlab-ci/meson-build.sh --skip-test
|
|
||||||
sudo meson install --no-rebuild -C "$MESON_BUILDDIR"
|
|
||||||
sudo mkdir -p /usr/local/lib/$MACHINE/xorg/modules # /home/runner/x11/lib/xorg/modules
|
|
||||||
sudo chown -R runner /usr/local/lib/$MACHINE/xorg/modules # /home/runner/x11/lib/xorg/modules
|
|
||||||
|
|
||||||
- name: compile driver
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
CFLAGS="-Wall" ./autogen.sh # --prefix=$X11_PREFIX
|
|
||||||
CFLAGS="-Wall" make -j # install
|
|
||||||
13
.github/scripts/conf.sh
vendored
13
.github/scripts/conf.sh
vendored
@@ -1,13 +0,0 @@
|
|||||||
export X11_OS=`uname -s`
|
|
||||||
|
|
||||||
export X11_PREFIX="${X11_PREFIX:-$HOME/x11}"
|
|
||||||
export X11_BUILD_DIR="${X11_BUILD_DIR:-$HOME/build-deps}"
|
|
||||||
export DRV_BUILD_DIR="${DRV_BUILD_DIR:-$HOME/build-drivers}"
|
|
||||||
|
|
||||||
case "$X11_OS" in
|
|
||||||
Darwin) export FDO_CI_CONCURRENT=`sysctl -n hw.logicalcpu` ;;
|
|
||||||
Linux) export FDO_CI_CONCURRENT=`nproc` ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
export PATH="$X11_PREFIX/bin:$PATH"
|
|
||||||
export PKG_CONFIG_PATH="$X11_PREFIX/lib/x86_64-linux-gnu/pkgconfig:$X11_PREFIX/lib/pkgconfig:$X11_PREFIX/share/pkgconfig:$PKG_CONFIG_PATH"
|
|
||||||
17
.github/scripts/github/make-release
vendored
17
.github/scripts/github/make-release
vendored
@@ -1,17 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
err() {
|
|
||||||
echo "$0: $*"
|
|
||||||
}
|
|
||||||
|
|
||||||
[ "$GITHUB_REPOSITORY" ] || err "missing variable GITHUB_REPOSITORY"
|
|
||||||
|
|
||||||
TITLE=$(git tag -l --format='%(contents)' $tag)
|
|
||||||
|
|
||||||
echo "tag=$tag"
|
|
||||||
echo "title=$TITLE"
|
|
||||||
|
|
||||||
gh release create "$tag" \
|
|
||||||
--repo="$GITHUB_REPOSITORY" \
|
|
||||||
--title="$tag" \
|
|
||||||
--generate-notes
|
|
||||||
15
.github/scripts/install-prereq.sh
vendored
15
.github/scripts/install-prereq.sh
vendored
@@ -1,15 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
. .github/scripts/util.sh
|
|
||||||
|
|
||||||
mkdir -p $X11_BUILD_DIR
|
|
||||||
cd $X11_BUILD_DIR
|
|
||||||
|
|
||||||
if [ "$X11_OS" = "Linux" ]; then
|
|
||||||
build_meson drm https://gitlab.freedesktop.org/mesa/drm libdrm-2.4.121 "" \
|
|
||||||
-Domap=enabled
|
|
||||||
fi
|
|
||||||
build_meson libxcvt https://gitlab.freedesktop.org/xorg/lib/libxcvt libxcvt-0.1.0
|
|
||||||
build_ac xorgproto https://gitlab.freedesktop.org/xorg/proto/xorgproto xorgproto-2024.1
|
|
||||||
94
.github/scripts/ubuntu/install-pkg.sh
vendored
94
.github/scripts/ubuntu/install-pkg.sh
vendored
@@ -1,94 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# Packages which are needed by this script, but not for the xserver build
|
|
||||||
EPHEMERAL="
|
|
||||||
libexpat-dev
|
|
||||||
libgles2-mesa-dev
|
|
||||||
libxkbcommon-dev
|
|
||||||
x11-utils
|
|
||||||
x11-xserver-utils
|
|
||||||
xauth
|
|
||||||
xvfb
|
|
||||||
"
|
|
||||||
|
|
||||||
apt-get update
|
|
||||||
|
|
||||||
apt-get install -y \
|
|
||||||
$EPHEMERAL \
|
|
||||||
autoconf \
|
|
||||||
automake \
|
|
||||||
build-essential \
|
|
||||||
ca-certificates \
|
|
||||||
libaudit-dev \
|
|
||||||
libbsd-dev \
|
|
||||||
libcairo2-dev \
|
|
||||||
libdbus-1-dev \
|
|
||||||
libdrm-dev \
|
|
||||||
libegl1-mesa-dev \
|
|
||||||
libepoxy-dev \
|
|
||||||
libevdev2 \
|
|
||||||
libexpat1 \
|
|
||||||
libffi-dev \
|
|
||||||
libgbm-dev \
|
|
||||||
libgcrypt-dev \
|
|
||||||
libgl1-mesa-dev \
|
|
||||||
libgles2 \
|
|
||||||
libglx-mesa0 \
|
|
||||||
libinput10 \
|
|
||||||
libinput-dev \
|
|
||||||
libnvidia-egl-wayland-dev \
|
|
||||||
libpciaccess-dev \
|
|
||||||
libpixman-1-dev \
|
|
||||||
libspice-protocol-dev \
|
|
||||||
libsystemd-dev \
|
|
||||||
libudev-dev \
|
|
||||||
libunwind-dev \
|
|
||||||
libx11-dev \
|
|
||||||
libx11-xcb-dev \
|
|
||||||
libxau-dev \
|
|
||||||
libxaw7-dev \
|
|
||||||
libxcb-glx0-dev \
|
|
||||||
libxcb-icccm4-dev \
|
|
||||||
libxcb-image0-dev \
|
|
||||||
libxcb-keysyms1-dev \
|
|
||||||
libxcb-randr0-dev \
|
|
||||||
libxcb-render-util0-dev \
|
|
||||||
libxcb-render0-dev \
|
|
||||||
libxcb-shape0-dev \
|
|
||||||
libxcb-shm0-dev \
|
|
||||||
libxcb-util0-dev \
|
|
||||||
libxcb-xf86dri0-dev \
|
|
||||||
libxcb-xkb-dev \
|
|
||||||
libxcb-xv0-dev \
|
|
||||||
libxcb1-dev \
|
|
||||||
libxdmcp-dev \
|
|
||||||
libxext-dev \
|
|
||||||
libxfixes-dev \
|
|
||||||
libxfont-dev \
|
|
||||||
libxi-dev \
|
|
||||||
libxinerama-dev \
|
|
||||||
libxkbcommon0 \
|
|
||||||
libxkbfile-dev \
|
|
||||||
libxmu-dev \
|
|
||||||
libxmuu-dev \
|
|
||||||
libxpm-dev \
|
|
||||||
libxrender-dev \
|
|
||||||
libxres-dev \
|
|
||||||
libxshmfence-dev \
|
|
||||||
libxt-dev \
|
|
||||||
libxtst-dev \
|
|
||||||
libxv-dev \
|
|
||||||
mesa-common-dev \
|
|
||||||
meson \
|
|
||||||
nettle-dev \
|
|
||||||
libpango1.0-dev \
|
|
||||||
pkg-config \
|
|
||||||
x11-xkb-utils \
|
|
||||||
xfonts-utils \
|
|
||||||
xkb-data \
|
|
||||||
xtrans-dev \
|
|
||||||
xutils-dev \
|
|
||||||
libxaw7-dev \
|
|
||||||
python3-mako
|
|
||||||
85
.github/scripts/util.sh
vendored
85
.github/scripts/util.sh
vendored
@@ -1,85 +0,0 @@
|
|||||||
|
|
||||||
. .github/scripts/conf.sh
|
|
||||||
|
|
||||||
clone_source() {
|
|
||||||
local pkgname="$1"
|
|
||||||
local url="$2"
|
|
||||||
local ref="$3"
|
|
||||||
local commit="$4"
|
|
||||||
|
|
||||||
if [ ! -f $pkgname/.git/config ]; then
|
|
||||||
echo "need to clone $pkgname"
|
|
||||||
if [ "$commit" ]; then
|
|
||||||
git clone $url $pkgname --branch=$ref
|
|
||||||
else
|
|
||||||
git clone $url $pkgname --branch=$ref --depth 1
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "already cloned $pkgname"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$commit" ]; then
|
|
||||||
( cd $pkgname && git checkout -f "$commit" )
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
build_meson() {
|
|
||||||
local pkgname="$1"
|
|
||||||
local url="$2"
|
|
||||||
local ref="$3"
|
|
||||||
local commit="$4"
|
|
||||||
shift
|
|
||||||
shift
|
|
||||||
shift
|
|
||||||
shift || true
|
|
||||||
if [ -f $X11_PREFIX/$pkgname.DONE ]; then
|
|
||||||
echo "package $pkgname already built"
|
|
||||||
else
|
|
||||||
clone_source "$pkgname" "$url" "$ref" "$commit"
|
|
||||||
(
|
|
||||||
cd $pkgname
|
|
||||||
meson "$@" build -Dprefix=$X11_PREFIX
|
|
||||||
ninja -j${FDO_CI_CONCURRENT:-4} -C build install
|
|
||||||
)
|
|
||||||
touch $X11_PREFIX/$pkgname.DONE
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
build_ac() {
|
|
||||||
local pkgname="$1"
|
|
||||||
local url="$2"
|
|
||||||
local ref="$3"
|
|
||||||
local commit="$4"
|
|
||||||
shift
|
|
||||||
shift
|
|
||||||
shift
|
|
||||||
shift || true
|
|
||||||
if [ -f $X11_PREFIX/$pkgname.DONE ]; then
|
|
||||||
echo "package $pkgname already built"
|
|
||||||
else
|
|
||||||
clone_source "$pkgname" "$url" "$ref" "$commit"
|
|
||||||
(
|
|
||||||
cd $pkgname
|
|
||||||
./autogen.sh --prefix=$X11_PREFIX
|
|
||||||
make -j${FDO_CI_CONCURRENT:-4} install
|
|
||||||
)
|
|
||||||
touch $X11_PREFIX/$pkgname.DONE
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
build_drv_ac() {
|
|
||||||
local pkgname="$1"
|
|
||||||
local url="$2"
|
|
||||||
local ref="$3"
|
|
||||||
local commit="$4"
|
|
||||||
shift
|
|
||||||
shift
|
|
||||||
shift
|
|
||||||
shift || true
|
|
||||||
clone_source "$pkgname" "$url" "$ref" "$commit"
|
|
||||||
(
|
|
||||||
cd $pkgname
|
|
||||||
./autogen.sh # --prefix=$X11_PREFIX
|
|
||||||
make -j${FDO_CI_CONCURRENT:-4} # install
|
|
||||||
)
|
|
||||||
}
|
|
||||||
43
.github/workflows/build.yml
vendored
43
.github/workflows/build.yml
vendored
@@ -1,43 +0,0 @@
|
|||||||
name: Build driver
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
|
|
||||||
env:
|
|
||||||
MESON_BUILDDIR: "build"
|
|
||||||
X11_PREFIX: /home/runner/x11
|
|
||||||
X11_BUILD_DIR: /home/runner/build-deps
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
pull_request:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
for-xserver-stable-25_0:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: ./.github/actions/build-driver
|
|
||||||
with:
|
|
||||||
xserver-version: xlibre-xserver-25.0.0.5
|
|
||||||
|
|
||||||
for-xserver-master:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: ./.github/actions/build-driver
|
|
||||||
with:
|
|
||||||
xserver-version: master
|
|
||||||
|
|
||||||
release:
|
|
||||||
name: Release pushed tag
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: ${{ startsWith(github.ref, 'refs/tags/xlibre-') }}
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
- name: Create release
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
tag: ${{ github.ref_name }}
|
|
||||||
run: .github/scripts/github/make-release
|
|
||||||
5
.gitignore
vendored
5
.gitignore
vendored
@@ -71,11 +71,11 @@ core
|
|||||||
*.tar.bz2
|
*.tar.bz2
|
||||||
*.tar.gz
|
*.tar.gz
|
||||||
#
|
#
|
||||||
# Add & Override patterns for xf86-input-libinput
|
# Add & Override patterns for xf86-input-libinput
|
||||||
#
|
#
|
||||||
# Edit the following section as needed
|
# Edit the following section as needed
|
||||||
# For example, !report.pc overrides *.pc. See 'man gitignore'
|
# For example, !report.pc overrides *.pc. See 'man gitignore'
|
||||||
#
|
#
|
||||||
*.log
|
*.log
|
||||||
*.trs
|
*.trs
|
||||||
*.swp
|
*.swp
|
||||||
@@ -84,4 +84,3 @@ core
|
|||||||
test-driver
|
test-driver
|
||||||
tags
|
tags
|
||||||
.vimdir
|
.vimdir
|
||||||
test/test-bezier
|
|
||||||
|
|||||||
@@ -1,98 +0,0 @@
|
|||||||
# vim: set expandtab shiftwidth=2 tabstop=8 textwidth=0 filetype=yaml:
|
|
||||||
#
|
|
||||||
# This CI uses the freedesktop.org ci-templates.
|
|
||||||
# Please see the ci-templates documentation for details:
|
|
||||||
# https://freedesktop.pages.freedesktop.org/ci-templates/
|
|
||||||
|
|
||||||
.templates_sha: &template_sha 84052757dacc5fd65f5ace92b7fe63c60f6c8558 # see https://docs.gitlab.com/ee/ci/yaml/#includefile
|
|
||||||
|
|
||||||
include:
|
|
||||||
- project: 'freedesktop/ci-templates'
|
|
||||||
ref: *template_sha
|
|
||||||
file: '/templates/fedora.yml'
|
|
||||||
- project: 'freedesktop/ci-templates'
|
|
||||||
ref: *template_sha
|
|
||||||
file: '/templates/ci-fairy.yml'
|
|
||||||
- template: Security/SAST.gitlab-ci.yml
|
|
||||||
|
|
||||||
variables:
|
|
||||||
FDO_UPSTREAM_REPO: xorg/driver/xf86-input-libinput
|
|
||||||
|
|
||||||
|
|
||||||
stages:
|
|
||||||
- containers
|
|
||||||
- build
|
|
||||||
- test
|
|
||||||
|
|
||||||
.fedora:
|
|
||||||
variables:
|
|
||||||
FDO_DISTRIBUTION_VERSION: 39
|
|
||||||
FDO_DISTRIBUTION_PACKAGES: 'git autoconf automake libtool make xorg-x11-server-devel libudev-devel libevdev-devel libinput-devel xorg-x11-util-macros diffutils'
|
|
||||||
FDO_DISTRIBUTION_EXEC: 'env FDO_CI_CONCURRENT=${FDO_CI_CONCURRENT} bash .gitlab-ci/fedora-install.sh'
|
|
||||||
FDO_DISTRIBUTION_TAG: '2025-04-01.0'
|
|
||||||
|
|
||||||
|
|
||||||
fedora@container_build:
|
|
||||||
extends:
|
|
||||||
- .fedora
|
|
||||||
- .fdo.container-build@fedora
|
|
||||||
stage: containers
|
|
||||||
variables:
|
|
||||||
GIT_STRATEGY: none
|
|
||||||
|
|
||||||
|
|
||||||
.default_build:
|
|
||||||
stage: build
|
|
||||||
script:
|
|
||||||
- mkdir _builddir _inst
|
|
||||||
- pushd _builddir > /dev/null
|
|
||||||
- ../autogen.sh --prefix=$(realpath ../_inst) --disable-silent-rules
|
|
||||||
- make && make check
|
|
||||||
- make install
|
|
||||||
- popd > /dev/null
|
|
||||||
artifacts:
|
|
||||||
name: "automake-logs-$CI_JOB_NAME"
|
|
||||||
when: always
|
|
||||||
expire_in: 1 week
|
|
||||||
paths:
|
|
||||||
- _builddir/config.log
|
|
||||||
|
|
||||||
|
|
||||||
fedora@default-build:
|
|
||||||
extends:
|
|
||||||
- .fedora
|
|
||||||
- .fdo.distribution-image@fedora
|
|
||||||
- .default_build
|
|
||||||
|
|
||||||
#
|
|
||||||
# Verify that commit messages are as expected
|
|
||||||
#
|
|
||||||
check-commits:
|
|
||||||
extends:
|
|
||||||
- .fdo.ci-fairy
|
|
||||||
stage: test
|
|
||||||
script:
|
|
||||||
- ci-fairy check-commits --junit-xml=results.xml
|
|
||||||
except:
|
|
||||||
- master@xorg/driver/xf86-input-libinput
|
|
||||||
variables:
|
|
||||||
GIT_DEPTH: 100
|
|
||||||
artifacts:
|
|
||||||
reports:
|
|
||||||
junit: results.xml
|
|
||||||
allow_failure: true
|
|
||||||
|
|
||||||
#
|
|
||||||
# Verify that the merge request has the allow-collaboration checkbox ticked
|
|
||||||
#
|
|
||||||
check-merge-request:
|
|
||||||
extends:
|
|
||||||
- .fdo.ci-fairy
|
|
||||||
stage: test
|
|
||||||
script:
|
|
||||||
- ci-fairy check-merge-request --require-allow-collaboration --junit-xml=results.xml
|
|
||||||
artifacts:
|
|
||||||
when: on_failure
|
|
||||||
reports:
|
|
||||||
junit: results.xml
|
|
||||||
allow_failure: true
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# we require at least inputproto >= 2.3.99.1 which has been released in xorgproto 2021.5
|
|
||||||
git clone https://gitlab.freedesktop.org/xorg/proto/xorgproto.git --depth 1 --branch=xorgproto-2021.5
|
|
||||||
pushd xorgproto
|
|
||||||
./autogen.sh
|
|
||||||
make -j${FDO_CI_CONCURRENT:-4} install
|
|
||||||
popd
|
|
||||||
rm -rf xorgproto
|
|
||||||
36
COPYING
36
COPYING
@@ -1,20 +1,20 @@
|
|||||||
SPDX-License-Identifier: MIT
|
Copyright © 2014 Red Hat, Inc.
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission to use, copy, modify, distribute, and sell this software
|
||||||
of this software and associated documentation files (the "Software"), to
|
and its documentation for any purpose is hereby granted without
|
||||||
deal in the Software without restriction, including without limitation the
|
fee, provided that the above copyright notice appear in all copies
|
||||||
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
and that both that copyright notice and this permission notice
|
||||||
sell copies of the Software, and to permit persons to whom the Software is
|
appear in supporting documentation, and that the name of the authors
|
||||||
furnished to do so, subject to the following conditions:
|
not be used in advertising or publicity pertaining to distribution of the
|
||||||
|
software without specific, written prior permission. The authors make no
|
||||||
|
representations about the suitability of this software for any
|
||||||
|
purpose. It is provided "as is" without express or implied
|
||||||
|
warranty.
|
||||||
|
|
||||||
The above copyright notice and this permission notice (including the next
|
THE AUTHORS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||||
paragraph) shall be included in all copies or substantial portions of the
|
INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
|
||||||
Software.
|
NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||||
|
CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
||||||
IN THE SOFTWARE.
|
|
||||||
|
|||||||
@@ -19,10 +19,7 @@
|
|||||||
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
# During distcheck, system locations (as provided by pkg-config) may
|
DISTCHECK_CONFIGURE_FLAGS = --with-sdkdir='$${includedir}/xorg'
|
||||||
# not be writable; provide instead relative locations.
|
|
||||||
DISTCHECK_CONFIGURE_FLAGS = --with-xorg-module-dir='$${libdir}/xorg/modules' \
|
|
||||||
--with-sdkdir='$${includedir}/xorg'
|
|
||||||
|
|
||||||
SUBDIRS = src include man test
|
SUBDIRS = src include man test
|
||||||
MAINTAINERCLEANFILES = ChangeLog INSTALL
|
MAINTAINERCLEANFILES = ChangeLog INSTALL
|
||||||
@@ -30,7 +27,7 @@ MAINTAINERCLEANFILES = ChangeLog INSTALL
|
|||||||
pkgconfigdir = $(libdir)/pkgconfig
|
pkgconfigdir = $(libdir)/pkgconfig
|
||||||
pkgconfig_DATA = xorg-libinput.pc
|
pkgconfig_DATA = xorg-libinput.pc
|
||||||
|
|
||||||
dist_xorgconf_DATA = conf/40-libinput.conf
|
dist_xorgconf_DATA = conf/60-libinput.conf
|
||||||
|
|
||||||
.PHONY: ChangeLog INSTALL
|
.PHONY: ChangeLog INSTALL
|
||||||
|
|
||||||
|
|||||||
14
README.md
14
README.md
@@ -2,7 +2,7 @@ xf86-input-libinput - a libinput-based X driver
|
|||||||
===============================================
|
===============================================
|
||||||
|
|
||||||
The official repository for this driver is
|
The official repository for this driver is
|
||||||
https://gitlab.freedesktop.org/xorg/driver/xf86-input-libinput
|
http://cgit.freedesktop.org/xorg/driver/xf86-input-libinput/
|
||||||
|
|
||||||
This is an X driver based on libinput. It is a thin wrapper around libinput,
|
This is an X driver based on libinput. It is a thin wrapper around libinput,
|
||||||
so while it does provide all features that libinput supports it does little
|
so while it does provide all features that libinput supports it does little
|
||||||
@@ -20,10 +20,10 @@ xorg-x11-server-devel package or similar) and libinput (check your
|
|||||||
distribution for libinput-devel or similar).
|
distribution for libinput-devel or similar).
|
||||||
|
|
||||||
To get libinput from source, see:
|
To get libinput from source, see:
|
||||||
https://www.freedesktop.org/wiki/Software/libinput/
|
http://www.freedesktop.org/wiki/Software/libinput/
|
||||||
|
|
||||||
To build the X server from source:
|
To build the X server from source:
|
||||||
https://www.x.org/wiki/Building_the_X_Window_System/
|
http://www.x.org/wiki/Building_the_X_Window_System/
|
||||||
|
|
||||||
Building
|
Building
|
||||||
--------
|
--------
|
||||||
@@ -48,8 +48,8 @@ This will assign this driver to *all* devices. Use with caution.
|
|||||||
Bugs
|
Bugs
|
||||||
----
|
----
|
||||||
|
|
||||||
Bugs in libinput go to the Issues section of the libinput gitlab project:
|
Bugs in libinput go to the "libinput" component of wayland:
|
||||||
https://gitlab.freedesktop.org/libinput/libinput/issues
|
https://bugs.freedesktop.org/enter_bug.cgi?product=Wayland
|
||||||
|
|
||||||
Bugs in this driver go to the Issues section of its gitlab project:
|
Bugs in this driver go to the "Input/libinput" component of xorg:
|
||||||
https://gitlab.freedesktop.org/xorg/driver/xf86-input-libinput/issues
|
https://bugs.freedesktop.org/enter_bug.cgi?product=xorg
|
||||||
|
|||||||
11
autogen.sh
11
autogen.sh
@@ -1,17 +1,14 @@
|
|||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
|
|
||||||
srcdir=`dirname "$0"`
|
srcdir=`dirname $0`
|
||||||
test -z "$srcdir" && srcdir=.
|
test -z "$srcdir" && srcdir=.
|
||||||
|
|
||||||
ORIGDIR=`pwd`
|
ORIGDIR=`pwd`
|
||||||
cd "$srcdir"
|
cd $srcdir
|
||||||
|
|
||||||
autoreconf -v --install || exit 1
|
autoreconf -v --install || exit 1
|
||||||
cd "$ORIGDIR" || exit $?
|
cd $ORIGDIR || exit $?
|
||||||
|
|
||||||
git config --local --get format.subjectPrefix >/dev/null 2>&1 ||
|
|
||||||
git config --local format.subjectPrefix "PATCH xf86-input-libinput"
|
|
||||||
|
|
||||||
if test -z "$NOCONFIGURE"; then
|
if test -z "$NOCONFIGURE"; then
|
||||||
exec "$srcdir"/configure "$@"
|
exec $srcdir/configure "$@"
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -1,21 +1,4 @@
|
|||||||
# Match on all types of devices but joysticks
|
# Match on all types of devices but tablet devices and joysticks
|
||||||
#
|
|
||||||
# If you want to configure your devices, do not copy this file.
|
|
||||||
# Instead, use a config snippet that contains something like this:
|
|
||||||
#
|
|
||||||
# Section "InputClass"
|
|
||||||
# Identifier "something or other"
|
|
||||||
# MatchDriver "libinput"
|
|
||||||
#
|
|
||||||
# MatchIsTouchpad "on"
|
|
||||||
# ... other Match directives ...
|
|
||||||
# Option "someoption" "value"
|
|
||||||
# EndSection
|
|
||||||
#
|
|
||||||
# This applies the option any libinput device also matched by the other
|
|
||||||
# directives. See the xorg.conf(5) man page for more info on
|
|
||||||
# matching devices.
|
|
||||||
|
|
||||||
Section "InputClass"
|
Section "InputClass"
|
||||||
Identifier "libinput pointer catchall"
|
Identifier "libinput pointer catchall"
|
||||||
MatchIsPointer "on"
|
MatchIsPointer "on"
|
||||||
@@ -43,10 +26,3 @@ Section "InputClass"
|
|||||||
MatchDevicePath "/dev/input/event*"
|
MatchDevicePath "/dev/input/event*"
|
||||||
Driver "libinput"
|
Driver "libinput"
|
||||||
EndSection
|
EndSection
|
||||||
|
|
||||||
Section "InputClass"
|
|
||||||
Identifier "libinput tablet catchall"
|
|
||||||
MatchIsTablet "on"
|
|
||||||
MatchDevicePath "/dev/input/event*"
|
|
||||||
Driver "libinput"
|
|
||||||
EndSection
|
|
||||||
90
configure.ac
90
configure.ac
@@ -23,112 +23,44 @@
|
|||||||
# Initialize Autoconf
|
# Initialize Autoconf
|
||||||
AC_PREREQ([2.60])
|
AC_PREREQ([2.60])
|
||||||
AC_INIT([xf86-input-libinput],
|
AC_INIT([xf86-input-libinput],
|
||||||
[1.5.0],
|
[0.19.1],
|
||||||
[https://gitlab.freedesktop.org/xorg/driver/xf86-input-libinput/issues],
|
[https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
|
||||||
[xf86-input-libinput])
|
[xf86-input-libinput])
|
||||||
AC_CONFIG_SRCDIR([Makefile.am])
|
AC_CONFIG_SRCDIR([Makefile.am])
|
||||||
AC_CONFIG_HEADERS([config.h])
|
AC_CONFIG_HEADERS([config.h])
|
||||||
AC_CONFIG_AUX_DIR(.)
|
AC_CONFIG_AUX_DIR(.)
|
||||||
|
|
||||||
# Initialize Automake
|
# Initialize Automake
|
||||||
AM_INIT_AUTOMAKE([foreign dist-xz])
|
AM_INIT_AUTOMAKE([foreign dist-bzip2])
|
||||||
|
|
||||||
# Initialize libtool
|
# Initialize libtool
|
||||||
AC_DISABLE_STATIC
|
AC_DISABLE_STATIC
|
||||||
LT_INIT
|
LT_INIT
|
||||||
|
|
||||||
# Initialize X.Org macros 1.8 or later for MAN_SUBSTS set by XORG_MANPAGE_SECTIONS
|
# Initialize X.Org macros 1.8 or later for MAN_SUBSTS set by XORG_MANPAGE_SECTIONS
|
||||||
m4_ifndef([XORG_MACROS_VERSION],
|
m4_ifndef([XORG_MACROS_VERSION],
|
||||||
[m4_fatal([must install xorg-macros 1.8 or later before running autoconf/autogen])])
|
[m4_fatal([must install xorg-macros 1.8 or later before running autoconf/autogen])])
|
||||||
XORG_MACROS_VERSION(1.8)
|
XORG_MACROS_VERSION(1.8)
|
||||||
XORG_DEFAULT_OPTIONS
|
XORG_DEFAULT_OPTIONS
|
||||||
|
|
||||||
# Obtain compiler/linker options from server and required extensions
|
# Obtain compiler/linker options from server and required extensions
|
||||||
PKG_CHECK_MODULES(XORG, [xorg-server >= 1.19] xproto [inputproto >= 2.2])
|
PKG_CHECK_MODULES(XORG, [xorg-server >= 1.10] xproto [inputproto >= 2.2])
|
||||||
PKG_CHECK_MODULES(LIBINPUT, [libinput >= 1.11.0])
|
PKG_CHECK_MODULES(LIBINPUT, [libinput >= 1.1.901])
|
||||||
|
|
||||||
PKG_CHECK_MODULES(INPUTPROTO24, [inputproto >= 2.3.99.1],
|
|
||||||
[AC_DEFINE(HAVE_INPUTPROTO24, [1], [inputproto 2.4 is available])],
|
|
||||||
[:])
|
|
||||||
|
|
||||||
OLD_LIBS=$LIBS
|
|
||||||
OLD_CFLAGS=$CFLAGS
|
|
||||||
LIBS="$LIBS $LIBINPUT_LIBS"
|
|
||||||
CFLAGS="$CFLAGS $LIBINPUT_CFLAGS"
|
|
||||||
|
|
||||||
AC_MSG_CHECKING([if libinput_device_config_scroll_get_button_lock is available])
|
|
||||||
AC_LINK_IFELSE(
|
|
||||||
[AC_LANG_PROGRAM([[#include <libinput.h>]],
|
|
||||||
[[libinput_device_config_scroll_get_button_lock(NULL)]])],
|
|
||||||
[AC_MSG_RESULT([yes])
|
|
||||||
AC_DEFINE(HAVE_LIBINPUT_SCROLL_BUTTON_LOCK, [1],
|
|
||||||
[libinput_device_config_scroll_get_button_lock() is available])
|
|
||||||
[libinput_have_scroll_button_lock=yes]],
|
|
||||||
[AC_MSG_RESULT([no])
|
|
||||||
[libinput_have_scroll_button_lock=no]])
|
|
||||||
|
|
||||||
AC_MSG_CHECKING([if libinput_event_pointer_get_scroll_value_v120 is available])
|
|
||||||
AC_LINK_IFELSE(
|
|
||||||
[AC_LANG_PROGRAM([[#include <libinput.h>]],
|
|
||||||
[[libinput_event_pointer_get_scroll_value_v120(NULL, 0)]])],
|
|
||||||
[AC_MSG_RESULT([yes])
|
|
||||||
AC_DEFINE(HAVE_LIBINPUT_AXIS_VALUE_V120, [1],
|
|
||||||
[libinput_event_pointer_get_scroll_value_v120() is available])
|
|
||||||
[libinput_have_axis_value_v120=yes]],
|
|
||||||
[AC_MSG_RESULT([no])
|
|
||||||
[libinput_have_axis_value_v120=no]])
|
|
||||||
|
|
||||||
AC_MSG_CHECKING([if libinput_config_accel_create is available])
|
|
||||||
AC_LINK_IFELSE(
|
|
||||||
[AC_LANG_PROGRAM([[#include <libinput.h>]],
|
|
||||||
[[libinput_config_accel_create(0)]])],
|
|
||||||
[AC_MSG_RESULT([yes])
|
|
||||||
AC_DEFINE(HAVE_LIBINPUT_CUSTOM_ACCEL, [1],
|
|
||||||
[libinput_config_accel_create() is available])
|
|
||||||
[libinput_have_custom_accel=yes]],
|
|
||||||
[AC_MSG_RESULT([no])
|
|
||||||
[libinput_have_custom_accel=no]])
|
|
||||||
|
|
||||||
AC_MSG_CHECKING([if libinput_tablet_tool_config_pressure_range_set is available])
|
|
||||||
AC_LINK_IFELSE(
|
|
||||||
[AC_LANG_PROGRAM([[#include <libinput.h>]],
|
|
||||||
[[libinput_tablet_tool_config_pressure_range_set(0)]])],
|
|
||||||
[AC_MSG_RESULT([yes])
|
|
||||||
AC_DEFINE(HAVE_LIBINPUT_PRESURE_RANGE, [1],
|
|
||||||
[libinput_tablet_tool_config_pressure_range_set() is available])
|
|
||||||
[libinput_have_pressure_range=yes]],
|
|
||||||
[AC_MSG_RESULT([no])
|
|
||||||
[libinput_have_pressure_range=no]])
|
|
||||||
|
|
||||||
AC_MSG_CHECKING([if libinput_device_config_click_set_clickfinger_button_map is available])
|
|
||||||
AC_LINK_IFELSE(
|
|
||||||
[AC_LANG_PROGRAM([[#include <libinput.h>]],
|
|
||||||
[[libinput_device_config_click_set_clickfinger_button_map(NULL, 0)]])],
|
|
||||||
[AC_MSG_RESULT([yes])
|
|
||||||
AC_DEFINE(HAVE_LIBINPUT_CLICKFINGER_BUTTON_MAP, [1],
|
|
||||||
[libinput_device_config_click_set_clickfinger_button_map() is available])
|
|
||||||
[libinput_have_clickfinger_button_map=yes]],
|
|
||||||
[AC_MSG_RESULT([no])
|
|
||||||
[libinput_have_clickfinger_button_map=no]])
|
|
||||||
|
|
||||||
LIBS=$OLD_LIBS
|
|
||||||
CFLAGS=$OLD_CFLAGS
|
|
||||||
|
|
||||||
# Define a configure option for an alternate input module directory
|
# Define a configure option for an alternate input module directory
|
||||||
PKG_PROG_PKG_CONFIG([0.25])
|
|
||||||
AC_ARG_WITH(xorg-module-dir,
|
AC_ARG_WITH(xorg-module-dir,
|
||||||
AS_HELP_STRING([--with-xorg-module-dir=DIR],
|
AC_HELP_STRING([--with-xorg-module-dir=DIR],
|
||||||
[Default xorg module directory]),
|
[Default xorg module directory [[default=$libdir/xorg/modules]]]),
|
||||||
[moduledir="$withval"],
|
[moduledir="$withval"],
|
||||||
[moduledir=`$PKG_CONFIG --variable=moduledir xorg-server`])
|
[moduledir="$libdir/xorg/modules"])
|
||||||
inputdir=${moduledir}/input
|
inputdir=${moduledir}/input
|
||||||
AC_SUBST(inputdir)
|
AC_SUBST(inputdir)
|
||||||
|
|
||||||
AC_ARG_WITH(xorg-conf-dir,
|
AC_ARG_WITH(xorg-conf-dir,
|
||||||
AC_HELP_STRING([--with-xorg-conf-dir=DIR],
|
AC_HELP_STRING([--with-xorg-conf-dir=DIR],
|
||||||
[Default xorg.conf.d directory [[default=${prefix}/share/X11/xorg.conf.d]]]),
|
[Default xorg.conf.d directory [[default=$prefix/share/X11/xorg.conf.d/]]]),
|
||||||
[xorgconfdir="$withval"],
|
[xorgconfdir="$withval"],
|
||||||
[xorgconfdir='${prefix}/share/X11/xorg.conf.d'])
|
[xorgconfdir="$prefix/share/X11/xorg.conf.d"])
|
||||||
AC_SUBST(xorgconfdir)
|
AC_SUBST(xorgconfdir)
|
||||||
|
|
||||||
# X Server SDK location is required to install header files
|
# X Server SDK location is required to install header files
|
||||||
|
|||||||
@@ -1,26 +1,24 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-License-Identifier: MIT
|
|
||||||
*
|
|
||||||
* Copyright © 2015 Red Hat, Inc.
|
* Copyright © 2015 Red Hat, Inc.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
* Permission to use, copy, modify, distribute, and sell this software
|
||||||
* of this software and associated documentation files (the "Software"), to
|
* and its documentation for any purpose is hereby granted without
|
||||||
* deal in the Software without restriction, including without limitation the
|
* fee, provided that the above copyright notice appear in all copies
|
||||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
* and that both that copyright notice and this permission notice
|
||||||
* sell copies of the Software, and to permit persons to whom the Software is
|
* appear in supporting documentation, and that the name of Red Hat
|
||||||
* furnished to do so, subject to the following conditions:
|
* not be used in advertising or publicity pertaining to distribution
|
||||||
|
* of the software without specific, written prior permission. Red
|
||||||
|
* Hat makes no representations about the suitability of this software
|
||||||
|
* for any purpose. It is provided "as is" without express or implied
|
||||||
|
* warranty.
|
||||||
*
|
*
|
||||||
* The above copyright notice and this permission notice (including the next
|
* THE AUTHORS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||||
* paragraph) shall be included in all copies or substantial portions of the
|
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
|
||||||
* Software.
|
* NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||||
*
|
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
* OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
||||||
* IN THE SOFTWARE.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _LIBINPUT_PROPERTIES_H_
|
#ifndef _LIBINPUT_PROPERTIES_H_
|
||||||
@@ -44,20 +42,6 @@
|
|||||||
/* Tap drag lock default enabled/disabled: BOOL, 1 value, read-only */
|
/* Tap drag lock default enabled/disabled: BOOL, 1 value, read-only */
|
||||||
#define LIBINPUT_PROP_TAP_DRAG_LOCK_DEFAULT "libinput Tapping Drag Lock Enabled Default"
|
#define LIBINPUT_PROP_TAP_DRAG_LOCK_DEFAULT "libinput Tapping Drag Lock Enabled Default"
|
||||||
|
|
||||||
/* Tap button order: BOOL, 2 values in order LRM, LMR, only one may be set
|
|
||||||
at any time */
|
|
||||||
#define LIBINPUT_PROP_TAP_BUTTONMAP "libinput Tapping Button Mapping Enabled"
|
|
||||||
|
|
||||||
/* Tap button default order: BOOL, 2 values in order LRM, LMR, read-only */
|
|
||||||
#define LIBINPUT_PROP_TAP_BUTTONMAP_DEFAULT "libinput Tapping Button Mapping Default"
|
|
||||||
|
|
||||||
/* Clickfinger button order: BOOL, 2 values in order LRM, LMR, only one may be set
|
|
||||||
at any time */
|
|
||||||
#define LIBINPUT_PROP_CLICKFINGER_BUTTONMAP "libinput Clickfinger Button Mapping Enabled"
|
|
||||||
|
|
||||||
/* Clickfinger button default order: BOOL, 2 values in order LRM, LMR, read-only */
|
|
||||||
#define LIBINPUT_PROP_CLICKFINGER_BUTTONMAP_DEFAULT "libinput Clickfinger Button Mapping Default"
|
|
||||||
|
|
||||||
/* Calibration matrix: FLOAT, 9 values of a 3x3 matrix, in rows */
|
/* Calibration matrix: FLOAT, 9 values of a 3x3 matrix, in rows */
|
||||||
#define LIBINPUT_PROP_CALIBRATION "libinput Calibration Matrix"
|
#define LIBINPUT_PROP_CALIBRATION "libinput Calibration Matrix"
|
||||||
|
|
||||||
@@ -70,36 +54,18 @@
|
|||||||
/* Pointer accel speed: FLOAT, 1 value, 32 bit, read-only*/
|
/* Pointer accel speed: FLOAT, 1 value, 32 bit, read-only*/
|
||||||
#define LIBINPUT_PROP_ACCEL_DEFAULT "libinput Accel Speed Default"
|
#define LIBINPUT_PROP_ACCEL_DEFAULT "libinput Accel Speed Default"
|
||||||
|
|
||||||
/* Pointer accel profile: BOOL, 3 values in order adaptive, flat, custom
|
/* Pointer accel profile: BOOL, 2 values in oder adaptive, flat,
|
||||||
* only one is enabled at a time at max, read-only */
|
* only one is enabled at a time at max, read-only */
|
||||||
#define LIBINPUT_PROP_ACCEL_PROFILES_AVAILABLE "libinput Accel Profiles Available"
|
#define LIBINPUT_PROP_ACCEL_PROFILES_AVAILABLE "libinput Accel Profiles Available"
|
||||||
|
|
||||||
/* Pointer accel profile: BOOL, 3 values in order adaptive, flat, custom
|
/* Pointer accel profile: BOOL, 2 values in order adaptive, flat,
|
||||||
only one is enabled at a time at max, read-only */
|
only one is enabled at a time at max, read-only */
|
||||||
#define LIBINPUT_PROP_ACCEL_PROFILE_ENABLED_DEFAULT "libinput Accel Profile Enabled Default"
|
#define LIBINPUT_PROP_ACCEL_PROFILE_ENABLED_DEFAULT "libinput Accel Profile Enabled Default"
|
||||||
|
|
||||||
/* Pointer accel profile: BOOL, 3 values in order adaptive, flat, custom
|
/* Pointer accel profile: BOOL, 2 values in order adaptive, flat,
|
||||||
only one is enabled at a time at max */
|
only one is enabled at a time at max */
|
||||||
#define LIBINPUT_PROP_ACCEL_PROFILE_ENABLED "libinput Accel Profile Enabled"
|
#define LIBINPUT_PROP_ACCEL_PROFILE_ENABLED "libinput Accel Profile Enabled"
|
||||||
|
|
||||||
/* Points for the custom accel profile: FLOAT, N values */
|
|
||||||
#define LIBINPUT_PROP_ACCEL_CUSTOM_POINTS_FALLBACK "libinput Accel Custom Fallback Points"
|
|
||||||
|
|
||||||
/* Steps for the custom accel profile: FLOAT, 1 value */
|
|
||||||
#define LIBINPUT_PROP_ACCEL_CUSTOM_STEP_FALLBACK "libinput Accel Custom Fallback Step"
|
|
||||||
|
|
||||||
/* Points for the custom accel profile: FLOAT, N values */
|
|
||||||
#define LIBINPUT_PROP_ACCEL_CUSTOM_POINTS_MOTION "libinput Accel Custom Motion Points"
|
|
||||||
|
|
||||||
/* Steps for the custom accel profile: FLOAT, 1 value */
|
|
||||||
#define LIBINPUT_PROP_ACCEL_CUSTOM_STEP_MOTION "libinput Accel Custom Motion Step"
|
|
||||||
|
|
||||||
/* Points for the custom accel profile: FLOAT, N values */
|
|
||||||
#define LIBINPUT_PROP_ACCEL_CUSTOM_POINTS_SCROLL "libinput Accel Custom Scroll Points"
|
|
||||||
|
|
||||||
/* Steps for the custom accel profile: FLOAT, 1 value */
|
|
||||||
#define LIBINPUT_PROP_ACCEL_CUSTOM_STEP_SCROLL "libinput Accel Custom Scroll Step"
|
|
||||||
|
|
||||||
/* Natural scrolling: BOOL, 1 value */
|
/* Natural scrolling: BOOL, 1 value */
|
||||||
#define LIBINPUT_PROP_NATURAL_SCROLL "libinput Natural Scrolling Enabled"
|
#define LIBINPUT_PROP_NATURAL_SCROLL "libinput Natural Scrolling Enabled"
|
||||||
|
|
||||||
@@ -142,24 +108,6 @@
|
|||||||
/* Scroll button for button scrolling: 32-bit int, 1 value, read-only */
|
/* Scroll button for button scrolling: 32-bit int, 1 value, read-only */
|
||||||
#define LIBINPUT_PROP_SCROLL_BUTTON_DEFAULT "libinput Button Scrolling Button Default"
|
#define LIBINPUT_PROP_SCROLL_BUTTON_DEFAULT "libinput Button Scrolling Button Default"
|
||||||
|
|
||||||
/* Scroll button lock: BOOL, 1 value, TRUE for enabled, FALSE otherwise */
|
|
||||||
#define LIBINPUT_PROP_SCROLL_BUTTON_LOCK "libinput Button Scrolling Button Lock Enabled"
|
|
||||||
|
|
||||||
/* Scroll button lock: BOOL, 1 value, TRUE for enabled, FALSE otherwise, read-only*/
|
|
||||||
#define LIBINPUT_PROP_SCROLL_BUTTON_LOCK_DEFAULT "libinput Button Scrolling Button Lock Enabled Default"
|
|
||||||
|
|
||||||
/* Scroll pixel distance: CARD32, 1 value (with implementation-defined limits) */
|
|
||||||
#define LIBINPUT_PROP_SCROLL_PIXEL_DISTANCE "libinput Scrolling Pixel Distance"
|
|
||||||
|
|
||||||
/* Scroll pixel distance: CARD32, 1 value, read-only */
|
|
||||||
#define LIBINPUT_PROP_SCROLL_PIXEL_DISTANCE_DEFAULT "libinput Scrolling Pixel Distance Default"
|
|
||||||
|
|
||||||
/* Scroll factor: FLOAT, 1 value, 32 bit */
|
|
||||||
#define LIBINPUT_PROP_SCROLL_FACTOR "libinput Scrolling Factor"
|
|
||||||
|
|
||||||
/* Scroll factor: FLOAT, 1 value, 32 bit, read-only */
|
|
||||||
#define LIBINPUT_PROP_SCROLL_FACTOR_DEFAULT "libinput Scrolling Factor Default"
|
|
||||||
|
|
||||||
/* Click method: BOOL read-only, 2 values in order buttonareas, clickfinger
|
/* Click method: BOOL read-only, 2 values in order buttonareas, clickfinger
|
||||||
shows available click methods */
|
shows available click methods */
|
||||||
#define LIBINPUT_PROP_CLICK_METHODS_AVAILABLE "libinput Click Methods Available"
|
#define LIBINPUT_PROP_CLICK_METHODS_AVAILABLE "libinput Click Methods Available"
|
||||||
@@ -194,76 +142,4 @@
|
|||||||
* If disabled, horizontal scroll events are discarded */
|
* If disabled, horizontal scroll events are discarded */
|
||||||
#define LIBINPUT_PROP_HORIZ_SCROLL_ENABLED "libinput Horizontal Scroll Enabled"
|
#define LIBINPUT_PROP_HORIZ_SCROLL_ENABLED "libinput Horizontal Scroll Enabled"
|
||||||
|
|
||||||
/* Number of modes each pad mode group has available: CARD8, one for each
|
|
||||||
* pad mode group, read-only.
|
|
||||||
*/
|
|
||||||
#define LIBINPUT_PROP_TABLET_PAD_MODE_GROUPS_AVAILABLE "libinput Pad Mode Groups Modes Available"
|
|
||||||
|
|
||||||
/* Mode each pad mode group is currently in: CARD8, one for each pad mode
|
|
||||||
* group, read-only.
|
|
||||||
*/
|
|
||||||
#define LIBINPUT_PROP_TABLET_PAD_MODE_GROUPS "libinput Pad Mode Groups Modes"
|
|
||||||
|
|
||||||
/* The association of each logical button with the pad mode group: INT8,
|
|
||||||
* one for each logical button. If set to -1 the button cannot be associated
|
|
||||||
* with a mode group. read-only
|
|
||||||
*/
|
|
||||||
#define LIBINPUT_PROP_TABLET_PAD_MODE_GROUP_BUTTONS "libinput Pad Mode Group Buttons"
|
|
||||||
|
|
||||||
/* The association of each logical strip with the pad mode group: INT8,
|
|
||||||
* one for each logical strip. If set to -1 the strip cannot be associated
|
|
||||||
* with a mode group. read-only
|
|
||||||
*/
|
|
||||||
#define LIBINPUT_PROP_TABLET_PAD_MODE_GROUP_STRIPS "libinput Pad Mode Group Strips"
|
|
||||||
|
|
||||||
/* The association of each logical ring with the pad mode group: INT8,
|
|
||||||
* one for each logical ring. If set to -1 the ring cannot be associated
|
|
||||||
* with a mode group. read-only
|
|
||||||
*/
|
|
||||||
#define LIBINPUT_PROP_TABLET_PAD_MODE_GROUP_RINGS "libinput Pad Mode Group Rings"
|
|
||||||
|
|
||||||
/* Device rotation: FLOAT, 1 value, 32 bit */
|
|
||||||
#define LIBINPUT_PROP_ROTATION_ANGLE "libinput Rotation Angle"
|
|
||||||
|
|
||||||
/* Device rotation: FLOAT, 1 value, 32 bit, read-only */
|
|
||||||
#define LIBINPUT_PROP_ROTATION_ANGLE_DEFAULT "libinput Rotation Angle Default"
|
|
||||||
|
|
||||||
/* Tablet tool pressure curve: float, 8 values, 32 bit
|
|
||||||
* Value range is [0.0, 1.0], the values specify the x/y of the four
|
|
||||||
* control points for a cubic bezier curve.
|
|
||||||
* Default value: 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0
|
|
||||||
*/
|
|
||||||
#define LIBINPUT_PROP_TABLET_TOOL_PRESSURECURVE "libinput Tablet Tool Pressurecurve"
|
|
||||||
|
|
||||||
/* Tablet tool pressure range: float, 2 values, 32 bit
|
|
||||||
* Value range is [0.0, 1.0] for min and max physical pressure to map to the logical range
|
|
||||||
* Default value: 0.0 1.0
|
|
||||||
*/
|
|
||||||
#define LIBINPUT_PROP_TABLET_TOOL_PRESSURE_RANGE "libinput Tablet Tool Pressure Range"
|
|
||||||
|
|
||||||
/* Tablet tool pressure range: float, 2 values, 32 bit, read-only */
|
|
||||||
#define LIBINPUT_PROP_TABLET_TOOL_PRESSURE_RANGE_DEFAULT "libinput Tablet Tool Pressure Range Default"
|
|
||||||
|
|
||||||
/* Tablet tool area ratio: CARD32, 2 values, w and h */
|
|
||||||
#define LIBINPUT_PROP_TABLET_TOOL_AREA_RATIO "libinput Tablet Tool Area Ratio"
|
|
||||||
|
|
||||||
/* High-resolution wheel scroll events enabled: BOOL, 1 value (0 or 1).
|
|
||||||
* If disabled, high-resolution wheel scroll events are discarded */
|
|
||||||
#define LIBINPUT_PROP_HIRES_WHEEL_SCROLL_ENABLED "libinput High Resolution Wheel Scroll Enabled"
|
|
||||||
|
|
||||||
/* The tablet tool unique serial number: CARD32, 1 value, constant for the
|
|
||||||
* lifetime of the device.
|
|
||||||
*
|
|
||||||
* If this property exists and is zero, the tool does not have a unique serial
|
|
||||||
* number.
|
|
||||||
*/
|
|
||||||
#define LIBINPUT_PROP_TABLET_TOOL_SERIAL "libinput Tablet Tool Serial"
|
|
||||||
|
|
||||||
/* The tablet tool hardware ID: CARD32, 1 value, constant for the lifetime of the device.
|
|
||||||
*
|
|
||||||
* This property only exists if the device has a known tool ID.
|
|
||||||
* See libinput_tablet_tool_get_tool_id() in the libinput documentation for details.
|
|
||||||
*/
|
|
||||||
#define LIBINPUT_PROP_TABLET_TOOL_ID "libinput Tablet Tool ID"
|
|
||||||
|
|
||||||
#endif /* _LIBINPUT_PROPERTIES_H_ */
|
#endif /* _LIBINPUT_PROPERTIES_H_ */
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
# DEALINGS IN THE SOFTWARE.
|
# DEALINGS IN THE SOFTWARE.
|
||||||
#
|
#
|
||||||
|
|
||||||
drivermandir = $(DRIVER_MAN_DIR)
|
drivermandir = $(DRIVER_MAN_DIR)
|
||||||
|
|
||||||
@@ -32,9 +32,6 @@ CLEANFILES = $(driverman_DATA)
|
|||||||
|
|
||||||
SUFFIXES = .$(DRIVER_MAN_SUFFIX) .man
|
SUFFIXES = .$(DRIVER_MAN_SUFFIX) .man
|
||||||
|
|
||||||
MAN_SUBSTS += \
|
|
||||||
-e 's|\@VERSION\@|$(PACKAGE_NAME) $(PACKAGE_VERSION)|g'
|
|
||||||
|
|
||||||
# String replacements in MAN_SUBSTS now come from xorg-macros.m4 via configure
|
# String replacements in MAN_SUBSTS now come from xorg-macros.m4 via configure
|
||||||
.man.$(DRIVER_MAN_SUFFIX):
|
.man.$(DRIVER_MAN_SUFFIX):
|
||||||
$(AM_V_GEN)$(SED) $(MAN_SUBSTS) < $< > $@
|
$(AM_V_GEN)$(SED) $(MAN_SUBSTS) < $< > $@
|
||||||
|
|||||||
630
man/libinput.man
630
man/libinput.man
@@ -1,7 +1,6 @@
|
|||||||
'\" t
|
|
||||||
.\" shorthand for double quote that works everywhere.
|
.\" shorthand for double quote that works everywhere.
|
||||||
.ds q \N'34'
|
.ds q \N'34'
|
||||||
.TH LIBINPUT 4 2025-06-01 "@VERSION@"
|
.TH LIBINPUT __drivermansuffix__ __vendorversion__
|
||||||
.SH NAME
|
.SH NAME
|
||||||
libinput \- libinput-based X.Org input driver
|
libinput \- libinput-based X.Org input driver
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
@@ -15,93 +14,64 @@ libinput \- libinput-based X.Org input driver
|
|||||||
.fi
|
.fi
|
||||||
|
|
||||||
.SH NOTE
|
.SH NOTE
|
||||||
This is the man page for the X input driver.
|
This is the man page for the X input driver. If you are looking for the
|
||||||
If you are looking for the library documentation, go to
|
library documentation, go to
|
||||||
.B http://wayland.freedesktop.org/libinput/doc/
|
.BI http://wayland.freedesktop.org/libinput/doc/
|
||||||
|
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
.B libinput
|
.B libinput
|
||||||
is an Xorg input driver based on libinput.
|
is an __xservername__ input driver based on libinput. It
|
||||||
It therefore supports all input devices that libinput can handle, including
|
therefore supports all input devices that libinput can handle, including
|
||||||
most mice, keyboards, tablets and touchscreens.
|
most mice, keyboards, tablets and touchscreens.
|
||||||
.PP
|
.PP
|
||||||
It is recommended that
|
It is recommended that
|
||||||
.B libinput
|
.B libinput
|
||||||
devices are configured through the
|
devices are configured through the
|
||||||
.B InputClass
|
.B InputClass
|
||||||
directive (refer to
|
directive (refer to __xconfigfile__(__filemansuffix__)) instead of manual
|
||||||
.BR xorg.conf (5))
|
per-device configuration. Devices configured in the
|
||||||
instead of manual per-device configuration.
|
__xconfigfile__(__filemansuffix__) are not hot-plug capable.
|
||||||
Devices configured using the
|
|
||||||
.B InputDevice
|
|
||||||
directive in the
|
|
||||||
.BR xorg.conf (5)
|
|
||||||
file are not hot-plug capable.
|
|
||||||
|
|
||||||
.SH CONFIGURATION DETAILS
|
.SH CONFIGURATION DETAILS
|
||||||
Please refer to
|
Please refer to __xconfigfile__(__filemansuffix__) for general configuration
|
||||||
.BR xorg.conf (5)
|
details and for options that can be used with all input drivers. This
|
||||||
for general configuration details
|
section only covers configuration details specific to this driver.
|
||||||
and for options that can be used with all input drivers.
|
|
||||||
This section only covers configuration details specific to this driver.
|
|
||||||
.PP
|
.PP
|
||||||
The following driver
|
The following driver
|
||||||
.B Options
|
.B Options
|
||||||
are supported:
|
are supported:
|
||||||
.TP 7
|
.TP 7
|
||||||
|
.BI "Option \*qDevice\*q \*q" string \*q
|
||||||
|
Specifies the device through which the device can be accessed. This will
|
||||||
|
generally be of the form \*q/dev/input/eventX\*q, where X is some integer.
|
||||||
|
When using
|
||||||
|
.B InputClass
|
||||||
|
directives, this option is set by the server.
|
||||||
|
The mapping from device node to hardware is system-dependent. Property:
|
||||||
|
"Device Node" (read-only).
|
||||||
|
.TP 7
|
||||||
.BI "Option \*qAccelProfile\*q \*q" string \*q
|
.BI "Option \*qAccelProfile\*q \*q" string \*q
|
||||||
Sets the pointer acceleration profile to the given profile.
|
Sets the pointer acceleration profile to the given profile. Permitted values
|
||||||
Permitted values are
|
are
|
||||||
.BR adaptive ,
|
.BI adaptive,
|
||||||
.BR flat ,
|
.BI flat.
|
||||||
.BR custom .
|
Not all devices support this option or all profiles. If a profile is
|
||||||
Not all devices support this option or all profiles.
|
unsupported, the default profile for this is used. For a description on the
|
||||||
If a profile is unsupported, the default profile for this device is used.
|
profiles and their behavior, see the libinput documentation.
|
||||||
For a description on the profiles and their behavior,
|
|
||||||
see the libinput documentation.
|
|
||||||
.TP 7
|
.TP 7
|
||||||
.BI "Option \*qAccelSpeed\*q \*q" float \*q
|
.BI "Option \*qAccelSpeed\*q \*q" float \*q
|
||||||
Sets the pointer acceleration speed within the range [-1, 1].
|
Sets the pointer acceleration speed within the range [-1, 1]
|
||||||
This only applies to the flat or adaptive profile.
|
|
||||||
.TP 7
|
|
||||||
.BI "Option \*qAccelPointsFallback\*q \*q" string \*q
|
|
||||||
.TQ
|
|
||||||
.BI "Option \*qAccelPointsMotion\*q \*q" string \*q
|
|
||||||
.TQ
|
|
||||||
.BI "Option \*qAccelPointsScroll\*q \*q" string \*q
|
|
||||||
Sets the points of the Fallback/Motion/Scroll acceleration functions.
|
|
||||||
The string must be a space-separated list of
|
|
||||||
floating point non-negative numbers, e.g.,
|
|
||||||
"0.0 1.0 2.4 2.5".
|
|
||||||
This only applies to the custom profile.
|
|
||||||
See section
|
|
||||||
.B CUSTOM ACCELERATION PROFILE
|
|
||||||
.TP 7
|
|
||||||
.BI "Option \*qAccelStepFallback\*q \*q" float \*q
|
|
||||||
.TQ
|
|
||||||
.BI "Option \*qAccelStepMotion\*q \*q" float \*q
|
|
||||||
.TQ
|
|
||||||
.BI "Option \*qAccelStepScroll\*q \*q" float \*q
|
|
||||||
Sets the step between the points of the Fallback/Motion/Scroll
|
|
||||||
acceleration functions.
|
|
||||||
When a step of 0.0 is provided,
|
|
||||||
libinput's Fallback acceleration function is used.
|
|
||||||
This only applies to the custom profile.
|
|
||||||
See section
|
|
||||||
.B CUSTOM ACCELERATION PROFILE
|
|
||||||
.TP 7
|
.TP 7
|
||||||
.BI "Option \*qButtonMapping\*q \*q" string \*q
|
.BI "Option \*qButtonMapping\*q \*q" string \*q
|
||||||
Sets the logical button mapping for this device, see
|
Sets the logical button mapping for this device, see
|
||||||
.BR XSetPointerMapping (3).
|
XSetPointerMapping(__libmansuffix__). The string must be a
|
||||||
The string must be a space-separated list of button mappings in the order of the
|
space-separated list of button mappings in the order of the
|
||||||
logical buttons on the device, starting with button 1.
|
logical buttons on the device, starting with button 1.
|
||||||
The default mapping is "1 2 3 ... 32".
|
The default mapping is "1 2 3 ... 32". A mapping of 0
|
||||||
A mapping of 0 deactivates the button.
|
deactivates the button. Multiple buttons can have the same mapping.
|
||||||
Multiple buttons can have the same mapping.
|
|
||||||
Invalid mapping strings are discarded and the default mapping
|
Invalid mapping strings are discarded and the default mapping
|
||||||
is used for all buttons.
|
is used for all buttons. Buttons not specified in the user's mapping use the
|
||||||
Buttons not specified in the user's mapping use the default mapping.
|
default mapping. See section
|
||||||
See section
|
|
||||||
.B BUTTON MAPPING
|
.B BUTTON MAPPING
|
||||||
for more details.
|
for more details.
|
||||||
.TP 7
|
.TP 7
|
||||||
@@ -112,352 +82,183 @@ Sets the calibration matrix to the 3x3 matrix where the first row is (abc),
|
|||||||
the second row is (def) and the third row is (ghi).
|
the second row is (def) and the third row is (ghi).
|
||||||
.TP 7
|
.TP 7
|
||||||
.BI "Option \*qClickMethod\*q \*q" string \*q
|
.BI "Option \*qClickMethod\*q \*q" string \*q
|
||||||
Enables a click method.
|
Enables a click method. Permitted values are
|
||||||
Permitted values are
|
.BI none,
|
||||||
.BR none ,
|
.BI buttonareas,
|
||||||
.BR buttonareas ,
|
.BI clickfinger.
|
||||||
.BR clickfinger .
|
Not all devices support all methods, if an option is unsupported, the
|
||||||
Not all devices support all methods.
|
default click method for this device is used.
|
||||||
If an option is unsupported, the default click method for this device is used.
|
|
||||||
.TP 7
|
|
||||||
.BI "Option \*qDisableWhileTyping\*q \*q" bool \*q
|
|
||||||
Indicates if the touchpad should be disabled while typing on the keyboard
|
|
||||||
(this does not apply to modifier keys such as Ctrl or Alt).
|
|
||||||
.TP 7
|
|
||||||
.BI "Option \*qDevice\*q \*q" string \*q
|
|
||||||
Specifies the device through which the device can be accessed.
|
|
||||||
This will generally be of the form \*q/dev/input/eventX\*q,
|
|
||||||
where X is some integer.
|
|
||||||
When using
|
|
||||||
.B InputClass
|
|
||||||
directives, this option is set by the server.
|
|
||||||
The mapping from device node to hardware is system-dependent.
|
|
||||||
Property: "Device Node" (read-only).
|
|
||||||
.TP 7
|
|
||||||
.BI "Option \*qDragLockButtons\*q \*q" "L1 B1 L2 B2 ..." \*q
|
|
||||||
Sets "drag lock buttons" that simulate a button logically down even when it has
|
|
||||||
been physically released.
|
|
||||||
To logically release a locked button,
|
|
||||||
a second click of the same button is required.
|
|
||||||
.IP
|
|
||||||
If the option is a single button number, that button acts as the
|
|
||||||
"meta" locking button for the next button number.
|
|
||||||
See section
|
|
||||||
.B BUTTON DRAG LOCK
|
|
||||||
for details.
|
|
||||||
.IP
|
|
||||||
If the option is a list of button number pairs, the first number of each
|
|
||||||
number pair is the lock button, the second number the logical button number
|
|
||||||
to be locked.
|
|
||||||
See section
|
|
||||||
.B BUTTON DRAG LOCK
|
|
||||||
for details.
|
|
||||||
.IP
|
|
||||||
For both meta and button pair configuration,
|
|
||||||
the button numbers are device button numbers, i.e. the
|
|
||||||
.B ButtonMapping
|
|
||||||
applies after drag lock.
|
|
||||||
.TP 7
|
|
||||||
.BI "Option \*qHighResolutionWheelScrolling\*q \*q" bool \*q
|
|
||||||
Disables high-resolution wheel scroll events, enabled by default. When enabled,
|
|
||||||
the driver forwards only high-resolution wheel scroll events from libinput.
|
|
||||||
When disabled, the driver forwards legacy wheel scroll events instead.
|
|
||||||
.TP 7
|
|
||||||
.BI "Option \*qHorizontalScrolling\*q \*q" bool \*q
|
|
||||||
Enables or disables horizontal scrolling.
|
|
||||||
When disabled,
|
|
||||||
this driver will discard any horizontal scroll events from libinput.
|
|
||||||
This does not disable horizontal scroll events from libinput;
|
|
||||||
it merely discards the horizontal axis from any scroll events.
|
|
||||||
Default is enabled.
|
|
||||||
.TP 7
|
.TP 7
|
||||||
.BI "Option \*qLeftHanded\*q \*q" bool \*q
|
.BI "Option \*qLeftHanded\*q \*q" bool \*q
|
||||||
Enables left-handed button orientation, i.e. swapping left and right buttons.
|
Enables left-handed button orientation, i.e. swapping left and right buttons.
|
||||||
.TP 7
|
.TP 7
|
||||||
.BI "Option \*qMiddleEmulation\*q \*q" bool \*q
|
.BI "Option \*qMiddleEmulation\*q \*q" bool \*q
|
||||||
Enables middle button emulation.
|
Enables middle button emulation. When enabled, pressing the left and right
|
||||||
When enabled, pressing the left and right
|
|
||||||
buttons simultaneously produces a middle mouse button click.
|
buttons simultaneously produces a middle mouse button click.
|
||||||
.TP 7
|
.TP 7
|
||||||
.BI "Option \*qNaturalScrolling\*q \*q" bool \*q
|
.BI "Option \*qNaturalScrolling\*q \*q" bool \*q
|
||||||
Enables or disables natural scrolling behavior.
|
Enables or disables natural scrolling behavior.
|
||||||
.TP 7
|
.TP 7
|
||||||
.BI "Option \*qRotationAngle\*q \*q" float \*q
|
|
||||||
Sets the rotation angle of the device to the given angle, in degrees clockwise.
|
|
||||||
The angle must be between 0.0 (inclusive) and 360.0 (exclusive).
|
|
||||||
.TP 7
|
|
||||||
.BI "Option \*qScrollButton\*q \*q" int \*q
|
.BI "Option \*qScrollButton\*q \*q" int \*q
|
||||||
Designates a button as scroll button.
|
Designates a button as scroll button. If the
|
||||||
If the
|
.BI ScrollMethod
|
||||||
.B ScrollMethod
|
|
||||||
is
|
is
|
||||||
.B button
|
.BI button
|
||||||
and the button is logically down, x/y axis movement is converted into
|
and the button is logically held down, x/y axis movement is converted into
|
||||||
scroll events.
|
scroll events.
|
||||||
.TP 7
|
.TP 7
|
||||||
.BI "Option \*qScrollButtonLock\*q \*q" bool \*q
|
|
||||||
Enables or disables the scroll button lock.
|
|
||||||
If enabled, the
|
|
||||||
.B ScrollButton
|
|
||||||
is considered logically down after the first click and remains down until
|
|
||||||
the second click of that button.
|
|
||||||
If disabled (the default), the
|
|
||||||
.B ScrollButton
|
|
||||||
button is considered logically down while held down and up once physically
|
|
||||||
released.
|
|
||||||
.TP 7
|
|
||||||
.BI "Option \*qScrollFactor\*q \*q" float \*q
|
|
||||||
Sets the scroll factor for scroll events. A value higher than 1.0 means faster scrolling.
|
|
||||||
Applications that don't support xi2 input will instead receive scroll button events
|
|
||||||
less or more frequently depending on the scroll factor value, instead of scrolling "smoother".
|
|
||||||
.TP 7
|
|
||||||
.BI "Option \*qScrollMethod\*q \*q" string \*q
|
.BI "Option \*qScrollMethod\*q \*q" string \*q
|
||||||
Enables a scroll method. Permitted values are
|
Enables a scroll method. Permitted values are
|
||||||
.BR none ,
|
.BI none,
|
||||||
.BR twofinger ,
|
.BI twofinger,
|
||||||
.BR edge ,
|
.BI edge,
|
||||||
.BR button .
|
.BI button.
|
||||||
Not all devices support all options.
|
Not all devices support all options, if an option is unsupported, the
|
||||||
If an option is unsupported, the default scroll option for this device is used.
|
default scroll option for this device is used.
|
||||||
.TP 7
|
.TP 7
|
||||||
.BI "Option \*qScrollPixelDistance\*q \*q" int \*q
|
.BI "Option \*qHorizontalScrolling\*q" bool \*q
|
||||||
Sets the movement distance, in "pixels", required to trigger one logical
|
Disables horizontal scrolling. When disabled, this driver will discard any
|
||||||
wheel click.
|
horizontal scroll events from libinput. Note that this does not disable
|
||||||
This option only applies to the scroll methods
|
horizontal scrolling, it merely discards the horizontal axis from any scroll
|
||||||
.BR twofinger ,
|
events.
|
||||||
.BR edge ,
|
|
||||||
.BR button .
|
|
||||||
See section
|
|
||||||
.B SCROLL PIXEL DISTANCE
|
|
||||||
for more details.
|
|
||||||
.TP 7
|
.TP 7
|
||||||
.BI "Option \*qSendEventsMode\*q \*q" (disabled|enabled|disabled-on-external-mouse) \*q
|
.BI "Option \*qSendEventsMode\*q \*q" (disabled|enabled|disabled-on-external-mouse) \*q
|
||||||
Sets the send events mode to disabled, enabled,
|
Sets the send events mode to disabled, enabled, or "disable when an external
|
||||||
or "disable when an external mouse is connected".
|
mouse is connected".
|
||||||
.TP 7
|
|
||||||
.BI "Option \*qTabletToolPressureCurve\*q \*q" "x0/y0 x1/y1 x2/y2 x3/y3" \*q
|
|
||||||
Set the pressure curve for a tablet stylus to the bezier formed by the four
|
|
||||||
points.
|
|
||||||
The respective x/y coordinate must be in the [0.0, 1.0] range.
|
|
||||||
For more information see section
|
|
||||||
.B TABLET TOOL PRESSURE CURVE.
|
|
||||||
.TP 7
|
|
||||||
.BI "Option \*qTabletToolPressureRange\*q \*q" "min max" \*q
|
|
||||||
Set the pressure range for a tablet stylus to the given subset of the physical
|
|
||||||
range.
|
|
||||||
The min/max values must be in the [0.0, 1.0] range.
|
|
||||||
For example, a min of 0.3 means the tablet will send 0 pressure for anything
|
|
||||||
equal or below 30% of the physical pressure range and a max of 0.7 means
|
|
||||||
the tablet sends its maximum pressure value for any pressure equal or higher to
|
|
||||||
70% of the physical pressure range.
|
|
||||||
.TP 7
|
|
||||||
.BI "Option \*qTabletToolAreaRatio\*q \*q" "w:h" \*q
|
|
||||||
Sets the area ratio for a tablet tool.
|
|
||||||
The area always starts at the origin (0/0) and
|
|
||||||
expands to the largest available area with the specified aspect ratio.
|
|
||||||
Events outside this area are cropped to the area.
|
|
||||||
The special value "default" is used for the default mapping
|
|
||||||
(i.e. the device-native mapping).
|
|
||||||
For more information see section
|
|
||||||
.B TABLET TOOL AREA RATIO.
|
|
||||||
.TP 7
|
.TP 7
|
||||||
.BI "Option \*qTapping\*q \*q" bool \*q
|
.BI "Option \*qTapping\*q \*q" bool \*q
|
||||||
Enables or disables tap-to-click behavior.
|
Enables or disables tap-to-click behavior.
|
||||||
.TP 7
|
.TP 7
|
||||||
.BI "Option \*qTappingButtonMap\*q \*q" (lrm|lmr) \*q
|
|
||||||
Set the button mapping for 1/2/3-finger taps to left/right/middle or
|
|
||||||
left/middle/right, respectively.
|
|
||||||
.TP 7
|
|
||||||
.BI "Option \*qTappingDrag\*q \*q" bool \*q
|
.BI "Option \*qTappingDrag\*q \*q" bool \*q
|
||||||
Enables or disables drag during tapping behavior ("tap-and-drag").
|
Enables or disables drag during tapping behavior ("tap-and-drag"). When
|
||||||
When enabled, a tap followed by a finger held down causes a single button down
|
enabled, a tap followed by a finger held down causes a single button down
|
||||||
only, all motions of that finger thus translate into dragging motion.
|
only, all motions of that finger thus translate into dragging motion.
|
||||||
Tap-and-drag requires option
|
Tap-and-drag requires option
|
||||||
.B Tapping
|
.B Tapping
|
||||||
to be enabled.
|
to be enabled.
|
||||||
.TP 7
|
.TP 7
|
||||||
.BI "Option \*qTappingDragLock\*q \*q" bool \*q
|
.BI "Option \*qTappingDragLock\*q \*q" bool \*q
|
||||||
Enables or disables drag lock during tapping behavior.
|
Enables or disables drag lock during tapping behavior. When enabled, a
|
||||||
When enabled,
|
finger up during tap-and-drag will not immediately release the button. If
|
||||||
a finger up during tap-and-drag will not immediately release the button.
|
the finger is set down again within the timeout, the dragging process
|
||||||
If the finger is set down again within the timeout,
|
continues.
|
||||||
the dragging process continues.
|
.TP 7
|
||||||
|
.BI "Option \*qDisableWhileTyping\*q \*q" bool \*q
|
||||||
|
Indicates if the touchpad should be disabled while typing on the keyboard
|
||||||
|
(this does not apply to modifier keys such as Ctrl or Alt).
|
||||||
|
.TP 7
|
||||||
|
.BI "Option \*qDragLockButtons\*q \*q" "L1 B1 L2 B2 ..." \*q
|
||||||
|
Sets "drag lock buttons" that simulate a button logically down even when it has
|
||||||
|
been physically released. To logically release a locked button, a second click
|
||||||
|
of the same button is required.
|
||||||
|
.IP
|
||||||
|
If the option is a single button number, that button acts as the
|
||||||
|
"meta" locking button for the next button number. See section
|
||||||
|
.B BUTTON DRAG LOCK
|
||||||
|
for details.
|
||||||
|
.IP
|
||||||
|
If the option is a list of button number pairs, the first number of each
|
||||||
|
number pair is the lock button, the second number the logical button number
|
||||||
|
to be locked. See section
|
||||||
|
.B BUTTON DRAG LOCK
|
||||||
|
for details.
|
||||||
|
.IP
|
||||||
|
For both meta and button pair configuration, the button numbers are
|
||||||
|
device button numbers, i.e. the
|
||||||
|
.B ButtonMapping
|
||||||
|
applies after drag lock.
|
||||||
.PP
|
.PP
|
||||||
For all options, the options are only parsed if the device supports that
|
For all options, the options are only parsed if the device supports that
|
||||||
configuration option.
|
configuration option. For all options, the default value is the one used by
|
||||||
For all options, the default value is the one used by libinput.
|
libinput. On configuration failure, the default value is applied.
|
||||||
On configuration failure, the default value is applied.
|
|
||||||
|
|
||||||
.SH SUPPORTED PROPERTIES
|
.SH SUPPORTED PROPERTIES
|
||||||
.B libinput
|
.B libinput
|
||||||
exports runtime-configurable options as properties.
|
exports runtime-configurable options as properties. If a property listed
|
||||||
If a property listed below is not available,
|
below is not available, the matching configuration option is not available
|
||||||
the matching configuration option is not available on the device.
|
on the device. This however does not imply that the feature is not available
|
||||||
This however does not imply that the feature is not available on the device.
|
on the device. The following properties are provided by the
|
||||||
The following properties are provided by the
|
|
||||||
.B libinput
|
.B libinput
|
||||||
driver.
|
driver.
|
||||||
.TP 7
|
.TP 7
|
||||||
.B "libinput Accel Profiles Available"
|
.BI "libinput Tapping Enabled"
|
||||||
3 boolean values (8 bit, 0 or 1), in order "adaptive", "flat", "custom".
|
1 boolean value (8 bit, 0 or 1). 1 enables tapping
|
||||||
Indicates which acceleration profiles are available on this device.
|
|
||||||
.TP 7
|
.TP 7
|
||||||
.B "libinput Accel Profile Enabled"
|
.BI "libinput Tapping Drag Lock Enabled"
|
||||||
3 boolean values (8 bit, 0 or 1), in order "adaptive", "flat", "custom".
|
1 boolean value (8 bit, 0 or 1). 1 enables drag lock during tapping
|
||||||
Indicates which acceleration profile is currently enabled on this device.
|
|
||||||
.TP 7
|
.TP 7
|
||||||
.B "libinput Accel Speed"
|
.BI "libinput Calibration Matrix"
|
||||||
1 32-bit float value, defines the pointer speed.
|
|
||||||
Value range -1, 1.
|
|
||||||
This only applies to the flat or adaptive profile.
|
|
||||||
.TP 7
|
|
||||||
.B "libinput Accel Custom Fallback Points"
|
|
||||||
.TQ
|
|
||||||
.B "libinput Accel Custom Motion Points"
|
|
||||||
.TQ
|
|
||||||
.B "libinput Accel Custom Scroll Points"
|
|
||||||
A space-separated list of 32-bit floating point non-negative numbers, e.g.
|
|
||||||
"0.0 1.0 2.4 2.5".
|
|
||||||
Sets the points of the Fallback/Motion/Scroll acceleration functions.
|
|
||||||
This only applies to the custom profile.
|
|
||||||
See section
|
|
||||||
.B CUSTOM ACCELERATION PROFILE
|
|
||||||
.TP 7
|
|
||||||
.B "libinput Accel Custom Fallback Step"
|
|
||||||
.TQ
|
|
||||||
.B "libinput Accel Custom Motion Step"
|
|
||||||
.TQ
|
|
||||||
.B "libinput Accel Custom Scroll Step"
|
|
||||||
1 32-bit float value, sets the step between the points of the
|
|
||||||
Fallback/Motion/Scroll acceleration functions.
|
|
||||||
When a step of 0.0 is provided, libinput's Fallback acceleration
|
|
||||||
function is used.
|
|
||||||
This only applies to the custom profile.
|
|
||||||
See section
|
|
||||||
.B CUSTOM ACCELERATION PROFILE
|
|
||||||
.TP 7
|
|
||||||
.B "libinput Button Scrolling Button"
|
|
||||||
1 32-bit value. Sets the button number to use for button scrolling.
|
|
||||||
This setting is independent of the scroll method, to enable button scrolling the
|
|
||||||
method must be set to button-scrolling and a valid button must be set.
|
|
||||||
.TP 7
|
|
||||||
.B "libinput Button Scrolling Button Lock Enabled"
|
|
||||||
1 boolean value. If true, the scroll button lock is enabled.
|
|
||||||
This setting is independent of the scroll method or the scroll button, to enable
|
|
||||||
button scrolling the method must be set to button-scrolling and a valid
|
|
||||||
button must be set.
|
|
||||||
.TP 7
|
|
||||||
.B "libinput Calibration Matrix"
|
|
||||||
9 32-bit float values, representing a 3x3 calibration matrix, order is row
|
9 32-bit float values, representing a 3x3 calibration matrix, order is row
|
||||||
1, row 2, row 3
|
1, row 2, row 3
|
||||||
.TP 7
|
.TP 7
|
||||||
.B "libinput Click Methods Available"
|
.BI "libinput Accel Speed"
|
||||||
2 boolean values (8 bit, 0 or 1), in order "buttonareas", "clickfinger".
|
1 32-bit float value, defines the pointer speed. Value range -1, 1
|
||||||
Indicates which click methods are available on this device.
|
|
||||||
.TP 7
|
.TP 7
|
||||||
.B "libinput Click Methods Enabled"
|
.BI "libinput Natural Scrolling Enabled"
|
||||||
2 boolean values (8 bit, 0 or 1), in order "buttonareas", "clickfinger".
|
1 boolean value (8 bit, 0 or 1). 1 enables natural scrolling
|
||||||
Indicates which click methods are enabled on this device.
|
|
||||||
.TP 7
|
.TP 7
|
||||||
.B "libinput Drag Lock Buttons"
|
.BI "libinput Send Events Modes Available"
|
||||||
Either one 8-bit value specifying the meta drag lock button, or a list of
|
2 boolean values (8 bit, 0 or 1), in order "disabled" and
|
||||||
button pairs.
|
"disabled-on-external-mouse". Indicates which send-event modes are available
|
||||||
See section
|
on this device.
|
||||||
.B BUTTON DRAG LOCK
|
|
||||||
for details.
|
|
||||||
.TP 7
|
.TP 7
|
||||||
.B "libinput High Resolution Wheel Scroll Enabled"
|
.BI "libinput Send Events Mode Enabled"
|
||||||
1 boolean value (8 bit, 0 or 1).
|
2 boolean values (8 bit, 0 or 1), in order "disabled" and
|
||||||
Indicates whether high-resolution wheel scroll events are enabled or not.
|
"disabled-on-external-mouse". Indicates which send-event modes is currently
|
||||||
|
enabled on this device.
|
||||||
.TP 7
|
.TP 7
|
||||||
.B "libinput Horizontal Scroll Enabled"
|
.BI "libinput Left Handed Enabled"
|
||||||
1 boolean value (8 bit, 0 or 1).
|
1 boolean value (8 bit, 0 or 1). Indicates if left-handed mode is enabled or
|
||||||
Indicates whether horizontal scrolling events are enabled or not.
|
disabled.
|
||||||
.TP 7
|
.TP 7
|
||||||
.B "libinput Left Handed Enabled"
|
.BI "libinput Scroll Methods Available"
|
||||||
1 boolean value (8 bit, 0 or 1).
|
|
||||||
Indicates if left-handed mode is enabled or disabled.
|
|
||||||
.TP 7
|
|
||||||
.B "libinput Middle Emulation Enabled"
|
|
||||||
1 boolean value (8 bit, 0 or 1).
|
|
||||||
Indicates if middle emulation is enabled or disabled.
|
|
||||||
.TP 7
|
|
||||||
.B "libinput Natural Scrolling Enabled"
|
|
||||||
1 boolean value (8 bit, 0 or 1).
|
|
||||||
1 enables natural scrolling.
|
|
||||||
.TP 7
|
|
||||||
.B "libinput Rotation Angle"
|
|
||||||
1 32-bit float value [0.0 to 360.0).
|
|
||||||
Sets the rotation angle of the device,
|
|
||||||
clockwise of its natural neutral position.
|
|
||||||
.TP 7
|
|
||||||
.B "libinput Scrolling Factor"
|
|
||||||
1 32-bit float value.
|
|
||||||
Sets the scroll factor for scroll events. A value higher than 1.0 means faster scrolling.
|
|
||||||
Applications that don't support xi2 input will instead receive scroll button events
|
|
||||||
less or more frequently depending on the scroll factor value, instead of scrolling "smoother".
|
|
||||||
.TP 7
|
|
||||||
.B "libinput Scroll Methods Available"
|
|
||||||
3 boolean values (8 bit, 0 or 1), in order "two-finger", "edge", "button".
|
3 boolean values (8 bit, 0 or 1), in order "two-finger", "edge", "button".
|
||||||
Indicates which scroll methods are available on this device.
|
Indicates which scroll methods are available on this device.
|
||||||
.TP 7
|
.TP 7
|
||||||
.B "libinput Scroll Method Enabled"
|
.BI "libinput Scroll Method Enabled"
|
||||||
3 boolean values (8 bit, 0 or 1), in order "two-finger", "edge", "button".
|
3 boolean values (8 bit, 0 or 1), in order "two-finger", "edge", "button".
|
||||||
Indicates which scroll method is currently enabled on this device.
|
Indicates which scroll method is currently enabled on this device.
|
||||||
.TP 7
|
.TP 7
|
||||||
.B "libinput Scrolling Pixel Distance"
|
.BI "libinput Button Scrolling Button"
|
||||||
1 32-bit value (nonzero, with additional implementation-defined range checks).
|
1 32-bit value. Sets the button number to use for button scrolling. This
|
||||||
Changes the movement distance required to trigger one logical wheel click.
|
setting is independent of the scroll method, to enable button scrolling the
|
||||||
|
method must be set to button-scrolling and a valid button must be set.
|
||||||
.TP 7
|
.TP 7
|
||||||
.B "libinput Send Events Modes Available"
|
.BI "libinput Click Methods Available"
|
||||||
2 boolean values (8 bit, 0 or 1), in order "disabled" and
|
2 boolean values (8 bit, 0 or 1), in order "buttonareas", "clickfinger".
|
||||||
"disabled-on-external-mouse".
|
Indicates which click methods are available on this device.
|
||||||
Indicates which send-event modes are available on this device.
|
|
||||||
.TP 7
|
.TP 7
|
||||||
.B "libinput Send Events Mode Enabled"
|
.BI "libinput Click Methods Enabled"
|
||||||
2 boolean values (8 bit, 0 or 1), in order "disabled" and
|
2 boolean values (8 bit, 0 or 1), in order "buttonareas", "clickfinger".
|
||||||
"disabled-on-external-mouse".
|
Indicates which click methods are enabled on this device.
|
||||||
Indicates which send-event mode is currently enabled on this device.
|
|
||||||
.TP 7
|
.TP 7
|
||||||
.B "libinput Tablet Tool Pressurecurve"
|
.BI "libinput Middle Emulation Enabled"
|
||||||
4 32-bit float values [0.0 to 1.0].
|
1 boolean value (8 bit, 0 or 1). Indicates if middle emulation is enabled or
|
||||||
See section
|
disabled.
|
||||||
.B TABLET TOOL PRESSURE CURVE
|
|
||||||
.TP 7
|
.TP 7
|
||||||
.B "libinput Tablet Tool Area Ratio"
|
.BI "libinput Disable While Typing Enabled"
|
||||||
2 32-bit values, corresponding to width and height.
|
1 boolean value (8 bit, 0 or 1). Indicates if disable while typing is
|
||||||
Special value 0, 0 resets to the default ratio.
|
enabled or disabled.
|
||||||
See section
|
|
||||||
.B TABLET TOOL AREA RATIO
|
|
||||||
for more information.
|
|
||||||
.TP 7
|
|
||||||
.B "libinput Tapping Enabled"
|
|
||||||
1 boolean value (8 bit, 0 or 1).
|
|
||||||
1 enables tapping.
|
|
||||||
.TP 7.
|
|
||||||
.B "libinput Tapping Button Mapping Enabled"
|
|
||||||
2 boolean value (8 bit, 0 or 1), in order "lrm" and "lmr".
|
|
||||||
Indicates which button mapping is currently enabled on this device.
|
|
||||||
.TP 7
|
|
||||||
.B "libinput Tapping Drag Lock Enabled"
|
|
||||||
1 boolean value (8 bit, 0 or 1).
|
|
||||||
1 enables drag lock during tapping.
|
|
||||||
.TP 7
|
|
||||||
.B "libinput Disable While Typing Enabled"
|
|
||||||
1 boolean value (8 bit, 0 or 1).
|
|
||||||
Indicates if disable while typing is enabled or disabled.
|
|
||||||
.PP
|
.PP
|
||||||
Most properties have a
|
The above properties have a
|
||||||
.B "libinput <property name> Default"
|
.BI "libinput <property name> Default"
|
||||||
equivalent that indicates the default value for this setting on this device.
|
equivalent that indicates the default value for this setting on this device.
|
||||||
|
.TP 7
|
||||||
|
.BI "libinput Drag Lock Buttons"
|
||||||
|
Either one 8-bit value specifying the meta drag lock button, or a list of
|
||||||
|
button pairs. See section
|
||||||
|
.B BUTTON DRAG LOCK
|
||||||
|
for details.
|
||||||
|
.TP 7
|
||||||
|
.BI "libinput Horizontal Scrolling Enabled"
|
||||||
|
1 boolean value (8 bit, 0 or 1). Indicates whether horizontal scrolling
|
||||||
|
events are enabled or not.
|
||||||
|
|
||||||
.SH BUTTON MAPPING
|
.SH BUTTON MAPPING
|
||||||
X clients receive events with logical button numbers,
|
X clients receive events with logical button numbers, where 1, 2, 3
|
||||||
where 1, 2, 3 are usually interpreted as left, middle, right;
|
are usually interpreted as left, middle, right and logical buttons 4, 5, 6,
|
||||||
and logical buttons 4, 5, 6, 7 are usually interpreted
|
7 are usually interpreted as scroll up, down, left, right. The fourth and
|
||||||
as scroll up, down, left, right.
|
fifth physical buttons on a device will thus send logical buttons 8 and 9.
|
||||||
The fourth and fifth physical buttons on a device
|
|
||||||
will thus send logical buttons 8 and 9.
|
|
||||||
The
|
The
|
||||||
.B ButtonMapping
|
.B ButtonMapping
|
||||||
option adjusts the logical button mapping, it does not affect how a physical
|
option adjusts the logical button mapping, it does not affect how a physical
|
||||||
@@ -468,136 +269,35 @@ button mapping of
|
|||||||
.B "\*q3 2 1 ...\*q"
|
.B "\*q3 2 1 ...\*q"
|
||||||
On systems using the
|
On systems using the
|
||||||
.B libinput
|
.B libinput
|
||||||
Xorg input driver it is recommended to use the
|
__xservername__ input driver it is recommended to use the
|
||||||
.B LeftHanded
|
.B LeftHanded
|
||||||
option instead.
|
option instead.
|
||||||
.PP
|
.PP
|
||||||
The
|
The
|
||||||
.B libinput
|
.B libinput
|
||||||
Xorg input driver does not use the button mapping after setup.
|
__xservername__ input driver does not use the button mapping after setup.
|
||||||
Use
|
Use XSetPointerMapping(__libmansuffix__) to modify the button mapping at
|
||||||
.BR XSetPointerMapping (3)
|
runtime.
|
||||||
to modify the button mapping at runtime.
|
|
||||||
|
|
||||||
.SH BUTTON DRAG LOCK
|
.SH BUTTON DRAG LOCK
|
||||||
Button drag lock holds a button logically down even when the button itself
|
Button drag lock holds a button logically down even when the button itself
|
||||||
has been physically released since.
|
has been physically released since. Button drag lock comes in two modes.
|
||||||
Button drag lock comes in two modes.
|
|
||||||
.PP
|
.PP
|
||||||
If in "meta" mode, a meta button click activates drag lock for the next
|
If in "meta" mode, a meta button click activates drag lock for the next
|
||||||
button press of any other button.
|
button press of any other button. A button click in the future will keep
|
||||||
A button click in the future will keep that button held logically down
|
that button held logically down until a subsequent click of that same
|
||||||
until a subsequent click of that same button.
|
button. The meta button events themselves are discarded. A separate meta
|
||||||
The meta button events themselves are discarded.
|
button click is required each time a drag lock should be activated for a
|
||||||
A separate meta button click is required each time a drag lock should be
|
button in the future.
|
||||||
activated for a button in the future.
|
|
||||||
.PP
|
.PP
|
||||||
If in "pairs" mode, each button can be assigned a target locking button.
|
If in "pairs" mode, each button can be assigned a target locking button.
|
||||||
On button click, the target lock button is held logically down until the
|
On button click, the target lock button is held logically down until the
|
||||||
next click of the same button.
|
next click of the same button. The button events themselves are discarded
|
||||||
The button events themselves are discarded
|
|
||||||
and only the target button events are sent.
|
and only the target button events are sent.
|
||||||
.PP
|
.TP
|
||||||
This feature is provided by this driver, not by libinput.
|
This feature is provided by this driver, not by libinput.
|
||||||
|
|
||||||
.SH TABLET TOOL PRESSURE CURVE
|
|
||||||
The pressure curve affects how stylus pressure is reported.
|
|
||||||
By default, the hardware pressure is reported as-is.
|
|
||||||
By setting a pressure curve, the feel of the stylus can be adjusted
|
|
||||||
to be more like e.g. a pencil or a brush.
|
|
||||||
.PP
|
|
||||||
The pressure curve is a cubic Bezier curve, drawn within a normalized range
|
|
||||||
of 0.0 to 1.0 between the four points provided.
|
|
||||||
This normalized range is applied to the tablet's pressure input
|
|
||||||
so that the highest pressure maps to 1.0.
|
|
||||||
The points must have increasing x coordinates, if x0 is larger than 0.0
|
|
||||||
all pressure values lower than x0 are equivalent to y0.
|
|
||||||
If x3 is less than 1.0,
|
|
||||||
all pressure values higher than x3 are equivalent to y3.
|
|
||||||
.PP
|
|
||||||
The input for a linear curve (default) is "0.0/0.0 0.0/0.0 1.0/1.0 1.0/1.0";
|
|
||||||
a slightly depressed curve (firmer) might be
|
|
||||||
"0.0/0.0 0.05/0.0 1.0/0.95 1.0/1.0";
|
|
||||||
a slightly raised curve (softer) might be "0.0/0.0 0.0/0.05 0.95/1.0 1.0/1.0".
|
|
||||||
.PP
|
|
||||||
This feature is provided by this driver, not by libinput.
|
|
||||||
|
|
||||||
.SH TABLET TOOL AREA RATIO
|
|
||||||
By default, a tablet tool can access the whole sensor area and the tablet
|
|
||||||
area is mapped to the available screen area.
|
|
||||||
For external tablets like the Wacom Intuos series,
|
|
||||||
the height:width ratio of the tablet may be different to that of the monitor,
|
|
||||||
causing the skew of input data.
|
|
||||||
.PP
|
|
||||||
To avoid this skew of input data, an area ratio may be set to match the
|
|
||||||
ratio of the screen device.
|
|
||||||
For example, a ratio of 4:3 will reduce the available area of the tablet
|
|
||||||
to the largest available area with a ratio of 4:3.
|
|
||||||
Events within this area will scale to the tablet's announced axis range,
|
|
||||||
the area ratio is thus transparent to the X server.
|
|
||||||
Any events outside this area will send events equal to the maximum value of
|
|
||||||
that axis.
|
|
||||||
The area always starts at the device's origin in it's current rotation, i.e.,
|
|
||||||
it takes left-handed-ness into account.
|
|
||||||
.PP
|
|
||||||
This feature is provided by this driver, not by libinput.
|
|
||||||
|
|
||||||
.SH SCROLL PIXEL DISTANCE
|
|
||||||
The X server does not support per-pixel scrolling but it does support
|
|
||||||
smooth scrolling.
|
|
||||||
All scroll events however are based around a logical unit of scrolling
|
|
||||||
(traditionally corresponding to a wheel click).
|
|
||||||
It is thus not possible to scroll by 10 pixels, but it is possible for a
|
|
||||||
driver to scroll by 1/10th of a logical wheel click.
|
|
||||||
.PP
|
|
||||||
libinput provides scroll data in pixels.
|
|
||||||
The \fBScrollPixelDistance\fR option defines the amount of movement equivalent
|
|
||||||
to one wheel click.
|
|
||||||
For example, a value of 50 means the user has to move a finger by 50 pixels to
|
|
||||||
generate one logical click event and each pixel is 1/50th of a wheel click.
|
|
||||||
|
|
||||||
.SH CUSTOM ACCELERATION PROFILE
|
|
||||||
The custom pointer acceleration profile gives users full control over the
|
|
||||||
acceleration behavior at different speeds.
|
|
||||||
libinput exposes an acceleration function \fIf(x)\fP
|
|
||||||
where the x-axis is the device speed in device units per millisecond
|
|
||||||
and the y-axis is the pointer speed.
|
|
||||||
.PP
|
|
||||||
The custom acceleration function is defined using n points which are spaced
|
|
||||||
uniformly along the x-axis, starting from 0 and continuing in constant steps.
|
|
||||||
Thus the points defining the custom function are:
|
|
||||||
.EX
|
|
||||||
(0 * step, f[0]), (1 * step, f[1]), ..., ((n-1) * step, f[n-1])
|
|
||||||
.EE
|
|
||||||
When a velocity value does not lie exactly on those points,
|
|
||||||
a linear interpolation/extrapolation of the two closest points
|
|
||||||
will be calculated.
|
|
||||||
.PP
|
|
||||||
There are 3 custom acceleration functions,
|
|
||||||
which are used for different movement types:
|
|
||||||
.TS
|
|
||||||
tab(;) allbox;
|
|
||||||
l l l.
|
|
||||||
Movement type; Uses; supported by
|
|
||||||
Fallback; Catch-all default movement type; All devices
|
|
||||||
Motion; Used for pointer motion; All devices
|
|
||||||
Scroll; Used for scroll movement; Mouse, Touchpad
|
|
||||||
.TE
|
|
||||||
.PP
|
|
||||||
See libinput library documentation for more details:
|
|
||||||
https://wayland.freedesktop.org/libinput/doc/latest/pointer-acceleration.html#the-custom-acceleration-profile
|
|
||||||
|
|
||||||
.SH BUGS
|
|
||||||
This driver does not work with \fBOption \*qDevice\*q\fR set to an event
|
|
||||||
node in \fI/dev/input/by-id\fR and \fI/dev/input/by-path\fR.
|
|
||||||
This can be usually be worked by using \fBSection \*qInputClass\*q\fR with an
|
|
||||||
appropriate \fBMatch*\fR statement in the
|
|
||||||
.BR xorg.conf (5).
|
|
||||||
|
|
||||||
.SH AUTHORS
|
.SH AUTHORS
|
||||||
Peter Hutterer
|
Peter Hutterer
|
||||||
.SH "SEE ALSO"
|
.SH "SEE ALSO"
|
||||||
.BR Xorg (1),
|
__xservername__(__appmansuffix__), __xconfigfile__(__filemansuffix__), Xserver(__appmansuffix__), X(__miscmansuffix__)
|
||||||
.BR xorg.conf (5),
|
|
||||||
.BR Xserver (1),
|
|
||||||
.BR X (7)
|
|
||||||
|
|||||||
154
meson.build
154
meson.build
@@ -1,154 +0,0 @@
|
|||||||
project('xf86-input-libinput', 'c',
|
|
||||||
version: '1.5.0', # bump version in configure.ac
|
|
||||||
default_options: ['warning_level=2'],
|
|
||||||
meson_version: '>= 0.50.0')
|
|
||||||
|
|
||||||
driver_version = meson.project_version().split('.')
|
|
||||||
|
|
||||||
dir_pkgconf = get_option('prefix') / get_option('libdir') / 'pkgconfig'
|
|
||||||
dir_man4 = get_option('prefix') / get_option('mandir') / 'man4'
|
|
||||||
|
|
||||||
cc = meson.get_compiler('c')
|
|
||||||
cflags = [
|
|
||||||
'-Wno-unused-parameter',
|
|
||||||
'-Wno-sign-compare', # lots of work to get rid of this
|
|
||||||
'-Wmissing-prototypes',
|
|
||||||
'-Wstrict-prototypes',
|
|
||||||
'-Wlogical-op',
|
|
||||||
'-Wpointer-arith',
|
|
||||||
'-Wuninitialized',
|
|
||||||
'-Winit-self',
|
|
||||||
'-Wstrict-prototypes',
|
|
||||||
'-Wimplicit-fallthrough',
|
|
||||||
'-Wredundant-decls',
|
|
||||||
'-Wincompatible-pointer-types',
|
|
||||||
'-Wformat=2',
|
|
||||||
'-Wno-missing-field-initializers',
|
|
||||||
'-Wmissing-declarations',
|
|
||||||
|
|
||||||
'-fvisibility=hidden',
|
|
||||||
]
|
|
||||||
add_project_arguments(cc.get_supported_arguments(cflags), language: 'c')
|
|
||||||
|
|
||||||
pkgconfig = import('pkgconfig')
|
|
||||||
dep_xserver = dependency('xorg-server', version: '>= 1.19')
|
|
||||||
dep_xproto = dependency('xproto')
|
|
||||||
dep_inputproto = dependency('inputproto', version: '>= 2.2')
|
|
||||||
dep_libinput = dependency('libinput', version: '>= 1.11.0')
|
|
||||||
|
|
||||||
config_h = configuration_data()
|
|
||||||
config_h.set('PACKAGE_VERSION_MAJOR', driver_version[0])
|
|
||||||
config_h.set('PACKAGE_VERSION_MINOR', driver_version[1])
|
|
||||||
config_h.set('PACKAGE_VERSION_PATCHLEVEL', driver_version[2])
|
|
||||||
|
|
||||||
if dep_inputproto.version().version_compare('>= 2.3.99.1')
|
|
||||||
config_h.set('HAVE_INPUTPROTO24', 1)
|
|
||||||
endif
|
|
||||||
|
|
||||||
if cc.has_function('libinput_device_config_scroll_get_button_lock',
|
|
||||||
dependencies: dep_libinput)
|
|
||||||
config_h.set('HAVE_LIBINPUT_SCROLL_BUTTON_LOCK', 1)
|
|
||||||
endif
|
|
||||||
if cc.has_function('libinput_event_pointer_get_scroll_value_v120',
|
|
||||||
dependencies: dep_libinput)
|
|
||||||
config_h.set('HAVE_LIBINPUT_AXIS_VALUE_V120', 1)
|
|
||||||
endif
|
|
||||||
if cc.has_function('libinput_config_accel_create',
|
|
||||||
dependencies: dep_libinput)
|
|
||||||
config_h.set('HAVE_LIBINPUT_CUSTOM_ACCEL', 1)
|
|
||||||
endif
|
|
||||||
if cc.has_function('libinput_tablet_tool_config_pressure_range_set',
|
|
||||||
dependencies: dep_libinput)
|
|
||||||
config_h.set('HAVE_LIBINPUT_PRESSURE_RANGE', 1)
|
|
||||||
endif
|
|
||||||
if cc.has_function('libinput_device_config_click_set_clickfinger_button_map',
|
|
||||||
dependencies: dep_libinput)
|
|
||||||
config_h.set('HAVE_LIBINPUT_CLICKFINGER_BUTTON_MAP', 1)
|
|
||||||
endif
|
|
||||||
if cc.has_header_symbol('libinput.h', 'LIBINPUT_LED_COMPOSE')
|
|
||||||
config_h.set('HAVE_LIBINPUT_COMPOSE_AND_KANA', 1)
|
|
||||||
endif
|
|
||||||
|
|
||||||
dir_headers = get_option('sdkdir')
|
|
||||||
if dir_headers == ''
|
|
||||||
dir_headers = dep_xserver.get_pkgconfig_variable('sdkdir')
|
|
||||||
endif
|
|
||||||
|
|
||||||
dir_xorg_module = get_option('xorg-module-dir')
|
|
||||||
if dir_xorg_module == ''
|
|
||||||
dir_xorg_module = dep_xserver.get_pkgconfig_variable('moduledir') / 'input'
|
|
||||||
endif
|
|
||||||
|
|
||||||
dir_xorg_conf = get_option('xorg-conf-dir')
|
|
||||||
if dir_xorg_conf == ''
|
|
||||||
dir_xorg_conf = dep_xserver.get_pkgconfig_variable('sysconfigdir')
|
|
||||||
endif
|
|
||||||
|
|
||||||
libbezier = static_library('bezier', ['src/bezier.c', 'src/bezier.h'])
|
|
||||||
dep_libbezier = declare_dependency(link_with: libbezier)
|
|
||||||
|
|
||||||
libdraglock = static_library('draglock', ['src/draglock.c', 'src/draglock.h'])
|
|
||||||
dep_libdraglock = declare_dependency(link_with: libdraglock)
|
|
||||||
|
|
||||||
dep_drivers = [
|
|
||||||
dep_xserver,
|
|
||||||
dep_xproto,
|
|
||||||
dep_inputproto,
|
|
||||||
dep_libinput,
|
|
||||||
dep_libbezier,
|
|
||||||
dep_libdraglock,
|
|
||||||
]
|
|
||||||
|
|
||||||
driver_src = ['src/xf86libinput.c', 'src/util-strings.c']
|
|
||||||
driver_lib = shared_module(
|
|
||||||
'libinput_drv',
|
|
||||||
driver_src,
|
|
||||||
name_prefix: '', # we want libinput_drv.so, not liblibinput_drv.so
|
|
||||||
include_directories: include_directories('include'),
|
|
||||||
dependencies: dep_drivers,
|
|
||||||
install: true,
|
|
||||||
install_dir: dir_xorg_module,
|
|
||||||
)
|
|
||||||
|
|
||||||
test_bezier = executable('test-bezier',
|
|
||||||
['test/test-bezier.c'],
|
|
||||||
dependencies: dep_libbezier,
|
|
||||||
include_directories: include_directories('src'),
|
|
||||||
install: false)
|
|
||||||
test('test-bezier', test_bezier)
|
|
||||||
|
|
||||||
test_draglock = executable('test-draglock',
|
|
||||||
['test/test-draglock.c'],
|
|
||||||
dependencies: dep_libdraglock,
|
|
||||||
include_directories: include_directories('src'),
|
|
||||||
install: false)
|
|
||||||
test('test-draglock', test_draglock)
|
|
||||||
|
|
||||||
|
|
||||||
conf_pkgconf = configuration_data()
|
|
||||||
conf_pkgconf.set('PACKAGE_VERSION', meson.project_version())
|
|
||||||
conf_pkgconf.set('sdkdir', dir_headers)
|
|
||||||
|
|
||||||
configure_file(
|
|
||||||
input: 'xorg-libinput.pc.in',
|
|
||||||
output: 'xorg-libinput.pc',
|
|
||||||
configuration: conf_pkgconf,
|
|
||||||
install_dir: dir_pkgconf,
|
|
||||||
)
|
|
||||||
|
|
||||||
config_man = configuration_data()
|
|
||||||
config_man.set('VERSION', '@0@ @1@'.format(meson.project_name(), meson.project_version()))
|
|
||||||
|
|
||||||
configure_file(
|
|
||||||
input: 'man/libinput.man',
|
|
||||||
output: 'libinput.4',
|
|
||||||
configuration: config_man,
|
|
||||||
install_dir: dir_man4
|
|
||||||
)
|
|
||||||
|
|
||||||
install_headers('include/libinput-properties.h', install_dir: dir_headers)
|
|
||||||
|
|
||||||
install_data('conf/40-libinput.conf', install_dir: dir_xorg_conf)
|
|
||||||
|
|
||||||
# Now generate config.h
|
|
||||||
configure_file(output: 'config.h', configuration: config_h)
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
option('sdkdir',
|
|
||||||
type: 'string',
|
|
||||||
value: '',
|
|
||||||
description: 'Directory to install header files in [default=from xorg-server pkgconf]',
|
|
||||||
)
|
|
||||||
option('xorg-module-dir',
|
|
||||||
type : 'string',
|
|
||||||
value : '',
|
|
||||||
description : 'Default xorg module directory [default=from xorg-server pkgconf]',
|
|
||||||
)
|
|
||||||
option('xorg-conf-dir',
|
|
||||||
type : 'string',
|
|
||||||
value : '',
|
|
||||||
description : 'Default xorg.conf.d directory [default=from xorg-server pkgconfig]'
|
|
||||||
)
|
|
||||||
@@ -30,16 +30,10 @@ AM_CPPFLAGS =-I$(top_srcdir)/include $(LIBINPUT_CFLAGS)
|
|||||||
|
|
||||||
@DRIVER_NAME@_drv_la_LTLIBRARIES = @DRIVER_NAME@_drv.la
|
@DRIVER_NAME@_drv_la_LTLIBRARIES = @DRIVER_NAME@_drv.la
|
||||||
@DRIVER_NAME@_drv_la_LDFLAGS = -module -avoid-version
|
@DRIVER_NAME@_drv_la_LDFLAGS = -module -avoid-version
|
||||||
@DRIVER_NAME@_drv_la_LIBADD = $(LIBINPUT_LIBS) libdraglock.la libbezier.la -lm
|
@DRIVER_NAME@_drv_la_LIBADD = $(LIBINPUT_LIBS) libdraglock.la
|
||||||
@DRIVER_NAME@_drv_ladir = @inputdir@
|
@DRIVER_NAME@_drv_ladir = @inputdir@
|
||||||
|
|
||||||
@DRIVER_NAME@_drv_la_SOURCES = \
|
@DRIVER_NAME@_drv_la_SOURCES = xf86libinput.c
|
||||||
xf86libinput.c \
|
|
||||||
util-macros.h \
|
|
||||||
util-strings.h \
|
|
||||||
util-strings.c \
|
|
||||||
$(NULL)
|
|
||||||
|
|
||||||
noinst_LTLIBRARIES = libdraglock.la libbezier.la
|
noinst_LTLIBRARIES = libdraglock.la
|
||||||
libdraglock_la_SOURCES = draglock.c draglock.h
|
libdraglock_la_SOURCES = draglock.c draglock.h
|
||||||
libbezier_la_SOURCES = bezier.c bezier.h
|
|
||||||
|
|||||||
179
src/bezier.c
179
src/bezier.c
@@ -1,179 +0,0 @@
|
|||||||
/*
|
|
||||||
* SPDX-License-Identifier: MIT
|
|
||||||
*
|
|
||||||
* Copyright © 2016 Red Hat, Inc.
|
|
||||||
*
|
|
||||||
* 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:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice (including the next
|
|
||||||
* paragraph) shall be included in all copies or substantial portions of the
|
|
||||||
* Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
||||||
* IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <assert.h>
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#include "bezier.h"
|
|
||||||
|
|
||||||
const struct bezier_control_point bezier_defaults[4] = {
|
|
||||||
{ 0.0, 0.0 },
|
|
||||||
{ 0.0, 0.0 },
|
|
||||||
{ 1.0, 1.0 },
|
|
||||||
{ 1.0, 1.0 },
|
|
||||||
};
|
|
||||||
|
|
||||||
struct point {
|
|
||||||
int x, y;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* de Casteljau's algorithm. See this page here
|
|
||||||
* https://pomax.github.io/bezierinfo/#extended
|
|
||||||
*
|
|
||||||
* To play with bezier curve shapes, I used
|
|
||||||
* http://cubic-bezier.com/
|
|
||||||
*/
|
|
||||||
static struct point
|
|
||||||
decasteljau(const struct point *controls,
|
|
||||||
size_t ncontrols,
|
|
||||||
double t)
|
|
||||||
{
|
|
||||||
struct point new_controls[ncontrols];
|
|
||||||
|
|
||||||
if (ncontrols == 1)
|
|
||||||
return controls[0];
|
|
||||||
|
|
||||||
for (int i = 0; i < ncontrols - 1; i++) {
|
|
||||||
new_controls[i].x = (1.0 - t) * controls[i].x + t * controls[i + 1].x;
|
|
||||||
new_controls[i].y = (1.0 - t) * controls[i].y + t * controls[i + 1].y;
|
|
||||||
}
|
|
||||||
|
|
||||||
return decasteljau(new_controls, ncontrols - 1, t);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Given a Bézier curve defined by the control points, reduce the curve to
|
|
||||||
* one with ncurve_points.
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
flatten_curve(const struct point *controls,
|
|
||||||
size_t ncontrols,
|
|
||||||
struct point *curve,
|
|
||||||
size_t ncurve_points)
|
|
||||||
{
|
|
||||||
ncurve_points--; /* make sure we end up with 100/100 as last point */
|
|
||||||
|
|
||||||
for (int i = 0; i <= ncurve_points; i++) {
|
|
||||||
double t = 1.0 * i/ncurve_points;
|
|
||||||
struct point p;
|
|
||||||
|
|
||||||
p = decasteljau(controls, ncontrols, t);
|
|
||||||
curve[i] = p;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Calculate line through a and b, set curve[x] for each x between
|
|
||||||
* [a.x, b.x].
|
|
||||||
*
|
|
||||||
* Note: pcurve must be at least b.x size.
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
line_between(struct point a, struct point b,
|
|
||||||
struct point *curve, size_t curve_sz)
|
|
||||||
{
|
|
||||||
double slope;
|
|
||||||
double offset;
|
|
||||||
|
|
||||||
assert(b.x < curve_sz);
|
|
||||||
|
|
||||||
if (a.x == b.x) {
|
|
||||||
curve[a.x].x = a.x;
|
|
||||||
curve[a.x].y = a.y;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
slope = (double)(b.y - a.y)/(b.x - a.x);
|
|
||||||
offset = a.y - slope * a.x;
|
|
||||||
|
|
||||||
for (int x = a.x; x <= b.x; x++) {
|
|
||||||
struct point p;
|
|
||||||
p.x = x;
|
|
||||||
p.y = slope * x + offset;
|
|
||||||
curve[x] = p;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
cubic_bezier(const struct bezier_control_point controls[4],
|
|
||||||
int *bezier_out,
|
|
||||||
size_t bezier_sz)
|
|
||||||
{
|
|
||||||
const int nsegments = 50;
|
|
||||||
const int range = bezier_sz - 1;
|
|
||||||
struct point curve[nsegments];
|
|
||||||
struct point bezier[bezier_sz];
|
|
||||||
struct point zero = { 0, 0 },
|
|
||||||
max = { range, range};
|
|
||||||
|
|
||||||
/* Scale control points into the [0, bezier_sz) range */
|
|
||||||
struct point ctrls[4];
|
|
||||||
|
|
||||||
for (int i = 0; i < 4; i++) {
|
|
||||||
if (controls[i].x < 0.0 || controls[i].x > 1.0 ||
|
|
||||||
controls[i].y < 0.0 || controls[i].y > 1.0)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
ctrls[i].x = controls[i].x * range;
|
|
||||||
ctrls[i].y = controls[i].y * range;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < 3; i++) {
|
|
||||||
if (ctrls[i].x > ctrls[i+1].x)
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Reduce curve to nsegments, because this isn't a drawing program */
|
|
||||||
flatten_curve(ctrls, 4, curve, nsegments);
|
|
||||||
|
|
||||||
/* we now have nsegments points in curve that represent the bezier
|
|
||||||
curve (already in the [0, bezier_sz) range). Run through the
|
|
||||||
points and draw a straight line between each point and voila, we
|
|
||||||
have our curve.
|
|
||||||
|
|
||||||
If the first control points (x0/y0) is not at x == 0 or the last
|
|
||||||
control point (x3/y3) is not at the max value, draw a line
|
|
||||||
between from 0/0 to x0/y0 and from x3/y3 to xmax/y3.
|
|
||||||
*/
|
|
||||||
|
|
||||||
line_between(zero, curve[0], bezier, bezier_sz);
|
|
||||||
|
|
||||||
for (int i = 0; i < nsegments - 1; i++)
|
|
||||||
line_between(curve[i], curve[i+1], bezier, bezier_sz);
|
|
||||||
|
|
||||||
if (curve[nsegments - 1].x < max.x)
|
|
||||||
line_between(curve[nsegments - 1], max, bezier, bezier_sz);
|
|
||||||
|
|
||||||
for (int i = 0; i < bezier_sz; i++)
|
|
||||||
bezier_out[i] = bezier[i].y;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
71
src/bezier.h
71
src/bezier.h
@@ -1,71 +0,0 @@
|
|||||||
/*
|
|
||||||
* SPDX-License-Identifier: MIT
|
|
||||||
*
|
|
||||||
* Copyright © 2016 Red Hat, Inc.
|
|
||||||
*
|
|
||||||
* 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:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice (including the next
|
|
||||||
* paragraph) shall be included in all copies or substantial portions of the
|
|
||||||
* Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
||||||
* IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef BEZIER_H
|
|
||||||
#define BEZIER_H
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdbool.h>
|
|
||||||
|
|
||||||
struct bezier_control_point {
|
|
||||||
double x, y;
|
|
||||||
};
|
|
||||||
|
|
||||||
extern const struct bezier_control_point bezier_defaults[4];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Given four control points in the range [(0.0/0.0), (1.0/1.0)]
|
|
||||||
* construct a Bézier curve.
|
|
||||||
*
|
|
||||||
* ^
|
|
||||||
*1.0 | c2 ______ c3
|
|
||||||
* | _/
|
|
||||||
* | /
|
|
||||||
* |c1 /
|
|
||||||
* | /
|
|
||||||
* | /
|
|
||||||
* |/_________________>
|
|
||||||
* c0 1.0
|
|
||||||
*
|
|
||||||
* This function requires that c[i].x <= c[i+1].x
|
|
||||||
*
|
|
||||||
* The curve is mapped into a canvas size [0, bezier_sz)². For each x
|
|
||||||
* coordinate in [0, bezier_sz), the matching y coordinate is thus
|
|
||||||
* bezier[x].
|
|
||||||
*
|
|
||||||
* In other words, if you have a range [0,2048) input possible values,
|
|
||||||
* the output is a list of 2048 points in a [0, 2048) range.
|
|
||||||
*
|
|
||||||
* @return true on success, false otherwise
|
|
||||||
*/
|
|
||||||
bool
|
|
||||||
cubic_bezier(const struct bezier_control_point controls[4],
|
|
||||||
int *bezier,
|
|
||||||
size_t bezier_sz);
|
|
||||||
#endif
|
|
||||||
@@ -1,26 +1,24 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-License-Identifier: MIT
|
|
||||||
*
|
|
||||||
* Copyright © 2015 Red Hat, Inc.
|
* Copyright © 2015 Red Hat, Inc.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
* Permission to use, copy, modify, distribute, and sell this software
|
||||||
* of this software and associated documentation files (the "Software"), to
|
* and its documentation for any purpose is hereby granted without
|
||||||
* deal in the Software without restriction, including without limitation the
|
* fee, provided that the above copyright notice appear in all copies
|
||||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
* and that both that copyright notice and this permission notice
|
||||||
* sell copies of the Software, and to permit persons to whom the Software is
|
* appear in supporting documentation, and that the name of Red Hat
|
||||||
* furnished to do so, subject to the following conditions:
|
* not be used in advertising or publicity pertaining to distribution
|
||||||
|
* of the software without specific, written prior permission. Red
|
||||||
|
* Hat makes no representations about the suitability of this software
|
||||||
|
* for any purpose. It is provided "as is" without express or implied
|
||||||
|
* warranty.
|
||||||
*
|
*
|
||||||
* The above copyright notice and this permission notice (including the next
|
* THE AUTHORS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||||
* paragraph) shall be included in all copies or substantial portions of the
|
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
|
||||||
* Software.
|
* NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||||
*
|
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
* OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
||||||
* IN THE SOFTWARE.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
@@ -118,7 +116,7 @@ draglock_get_meta(const struct draglock *dl)
|
|||||||
}
|
}
|
||||||
|
|
||||||
size_t
|
size_t
|
||||||
draglock_get_pairs(const struct draglock *dl, int *array, size_t nelem)
|
draglock_get_pairs(const struct draglock *dl, int *array, size_t sz)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
size_t last = 0;
|
size_t last = 0;
|
||||||
@@ -133,8 +131,8 @@ draglock_get_pairs(const struct draglock *dl, int *array, size_t nelem)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* size N array with a[0] == 0, the rest ordered by button number */
|
/* size N array with a[0] == 0, the rest ordered by button number */
|
||||||
memset(array, 0, nelem * sizeof(array[0]));
|
memset(array, 0, sz * sizeof(array[0]));
|
||||||
for (i = 0; i < nelem && i < ARRAY_SIZE(dl->lock_pair); i++) {
|
for (i = 0; i < sz && i < ARRAY_SIZE(dl->lock_pair); i++) {
|
||||||
array[i] = dl->lock_pair[i];
|
array[i] = dl->lock_pair[i];
|
||||||
if (array[i] != 0 && i > last)
|
if (array[i] != 0 && i > last)
|
||||||
last = i;
|
last = i;
|
||||||
@@ -155,20 +153,20 @@ draglock_set_meta(struct draglock *dl, int meta_button)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
draglock_set_pairs(struct draglock *dl, const int *array, size_t nelem)
|
draglock_set_pairs(struct draglock *dl, const int *array, size_t sz)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
if (nelem == 0 || array[0] != 0)
|
if (sz == 0 || array[0] != 0)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
for (i = 0; i < nelem; i++) {
|
for (i = 0; i < sz; i++) {
|
||||||
if (array[i] < 0 || array[i] >= DRAGLOCK_MAX_BUTTONS)
|
if (array[i] < 0 || array[i] >= DRAGLOCK_MAX_BUTTONS)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
dl->mode = DRAGLOCK_DISABLED;
|
dl->mode = DRAGLOCK_DISABLED;
|
||||||
for (i = 0; i < nelem; i++) {
|
for (i = 0; i < sz; i++) {
|
||||||
dl->lock_pair[i] = array[i];
|
dl->lock_pair[i] = array[i];
|
||||||
if (dl->lock_pair[i])
|
if (dl->lock_pair[i])
|
||||||
dl->mode = DRAGLOCK_PAIRS;
|
dl->mode = DRAGLOCK_PAIRS;
|
||||||
|
|||||||
@@ -1,26 +1,24 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-License-Identifier: MIT
|
|
||||||
*
|
|
||||||
* Copyright © 2015 Red Hat, Inc.
|
* Copyright © 2015 Red Hat, Inc.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
* Permission to use, copy, modify, distribute, and sell this software
|
||||||
* of this software and associated documentation files (the "Software"), to
|
* and its documentation for any purpose is hereby granted without
|
||||||
* deal in the Software without restriction, including without limitation the
|
* fee, provided that the above copyright notice appear in all copies
|
||||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
* and that both that copyright notice and this permission notice
|
||||||
* sell copies of the Software, and to permit persons to whom the Software is
|
* appear in supporting documentation, and that the name of Red Hat
|
||||||
* furnished to do so, subject to the following conditions:
|
* not be used in advertising or publicity pertaining to distribution
|
||||||
|
* of the software without specific, written prior permission. Red
|
||||||
|
* Hat makes no representations about the suitability of this software
|
||||||
|
* for any purpose. It is provided "as is" without express or implied
|
||||||
|
* warranty.
|
||||||
*
|
*
|
||||||
* The above copyright notice and this permission notice (including the next
|
* THE AUTHORS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||||
* paragraph) shall be included in all copies or substantial portions of the
|
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
|
||||||
* Software.
|
* NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||||
*
|
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
* OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
||||||
* IN THE SOFTWARE.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
@@ -109,13 +107,13 @@ draglock_get_meta(const struct draglock *dl);
|
|||||||
* @note Button numbers start at 1, array[0] is always 0.
|
* @note Button numbers start at 1, array[0] is always 0.
|
||||||
*
|
*
|
||||||
* @param[in|out] array Caller-allocated array to hold the button mappings.
|
* @param[in|out] array Caller-allocated array to hold the button mappings.
|
||||||
* @param[in] nelem Maximum number of elements in array
|
* @param[in] sz Maximum number of elements in array
|
||||||
*
|
*
|
||||||
* @return The number of valid elements in array or 0 if the current mode is
|
* @return The number of valid elements in array or 0 if the current mode is
|
||||||
* not DRAGLOCK_PAIRS
|
* not DRAGLOCK_PAIRS
|
||||||
*/
|
*/
|
||||||
size_t
|
size_t
|
||||||
draglock_get_pairs(const struct draglock *dl, int *array, size_t nelem);
|
draglock_get_pairs(const struct draglock *dl, int *array, size_t sz);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the drag lock config to the DRAGLOCK_META mode, with the given
|
* Set the drag lock config to the DRAGLOCK_META mode, with the given
|
||||||
@@ -142,7 +140,7 @@ draglock_set_meta(struct draglock *dl, int meta_button);
|
|||||||
* @return 0 on successor nonzero otherwise
|
* @return 0 on successor nonzero otherwise
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
draglock_set_pairs(struct draglock *dl, const int *array, size_t nelem);
|
draglock_set_pairs(struct draglock *dl, const int *array, size_t sz);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Process the given button event through the drag lock state machine.
|
* Process the given button event through the drag lock state machine.
|
||||||
|
|||||||
@@ -1,65 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright © 2008-2011 Kristian Høgsberg
|
|
||||||
* Copyright © 2011 Intel Corporation
|
|
||||||
* Copyright © 2013-2015 Red Hat, Inc.
|
|
||||||
*
|
|
||||||
* 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:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice (including the next
|
|
||||||
* paragraph) shall be included in all copies or substantial portions of the
|
|
||||||
* Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
||||||
* DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#define ARRAY_LENGTH(a) (sizeof (a) / sizeof (a)[0])
|
|
||||||
/**
|
|
||||||
* Iterate through the array _arr, assigning the variable elem to each
|
|
||||||
* element. elem only exists within the loop.
|
|
||||||
*/
|
|
||||||
#define ARRAY_FOR_EACH(_arr, _elem) \
|
|
||||||
for (__typeof__((_arr)[0]) *_elem = _arr; \
|
|
||||||
_elem < (_arr) + ARRAY_LENGTH(_arr); \
|
|
||||||
_elem++)
|
|
||||||
|
|
||||||
#define min(a, b) (((a) < (b)) ? (a) : (b))
|
|
||||||
#define max(a, b) (((a) > (b)) ? (a) : (b))
|
|
||||||
|
|
||||||
#define ANSI_HIGHLIGHT "\x1B[0;1;39m"
|
|
||||||
#define ANSI_RED "\x1B[0;31m"
|
|
||||||
#define ANSI_GREEN "\x1B[0;32m"
|
|
||||||
#define ANSI_YELLOW "\x1B[0;33m"
|
|
||||||
#define ANSI_BLUE "\x1B[0;34m"
|
|
||||||
#define ANSI_MAGENTA "\x1B[0;35m"
|
|
||||||
#define ANSI_CYAN "\x1B[0;36m"
|
|
||||||
#define ANSI_BRIGHT_RED "\x1B[0;31;1m"
|
|
||||||
#define ANSI_BRIGHT_GREEN "\x1B[0;32;1m"
|
|
||||||
#define ANSI_BRIGHT_YELLOW "\x1B[0;33;1m"
|
|
||||||
#define ANSI_BRIGHT_BLUE "\x1B[0;34;1m"
|
|
||||||
#define ANSI_BRIGHT_MAGENTA "\x1B[0;35;1m"
|
|
||||||
#define ANSI_BRIGHT_CYAN "\x1B[0;36;1m"
|
|
||||||
#define ANSI_NORMAL "\x1B[0m"
|
|
||||||
|
|
||||||
#define ANSI_UP "\x1B[%dA"
|
|
||||||
#define ANSI_DOWN "\x1B[%dB"
|
|
||||||
#define ANSI_RIGHT "\x1B[%dC"
|
|
||||||
#define ANSI_LEFT "\x1B[%dD"
|
|
||||||
|
|
||||||
#define CASE_RETURN_STRING(a) case a: return #a
|
|
||||||
|
|
||||||
#define _fallthrough_ __attribute__((fallthrough))
|
|
||||||
@@ -1,114 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright © 2008 Kristian Høgsberg
|
|
||||||
* Copyright © 2013-2015 Red Hat, Inc.
|
|
||||||
*
|
|
||||||
* 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:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice (including the next
|
|
||||||
* paragraph) shall be included in all copies or substantial portions of the
|
|
||||||
* Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
||||||
* DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
#define _GNU_SOURCE
|
|
||||||
|
|
||||||
#include "util-strings.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the next word in a string pointed to by state before the first
|
|
||||||
* separator character. Call repeatedly to tokenize a whole string.
|
|
||||||
*
|
|
||||||
* @param state Current state
|
|
||||||
* @param len String length of the word returned
|
|
||||||
* @param separators List of separator characters
|
|
||||||
*
|
|
||||||
* @return The first word in *state, NOT null-terminated
|
|
||||||
*/
|
|
||||||
static const char *
|
|
||||||
next_word(const char **state, size_t *len, const char *separators)
|
|
||||||
{
|
|
||||||
const char *next = *state;
|
|
||||||
size_t l;
|
|
||||||
|
|
||||||
if (!*next)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
next += strspn(next, separators);
|
|
||||||
if (!*next) {
|
|
||||||
*state = next;
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
l = strcspn(next, separators);
|
|
||||||
*state = next + l;
|
|
||||||
*len = l;
|
|
||||||
|
|
||||||
return next;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return a null-terminated string array with the tokens in the input
|
|
||||||
* string, e.g. "one two\tthree" with a separator list of " \t" will return
|
|
||||||
* an array [ "one", "two", "three", NULL ] and num elements 3.
|
|
||||||
*
|
|
||||||
* Use strv_free() to free the array.
|
|
||||||
*
|
|
||||||
* Another example:
|
|
||||||
* result = strv_from_string("+1-2++3--4++-+5-+-", "+-", &nelem)
|
|
||||||
* result == [ "1", "2", "3", "4", "5", NULL ] and nelem == 5
|
|
||||||
*
|
|
||||||
* @param in Input string
|
|
||||||
* @param separators List of separator characters
|
|
||||||
* @param num_elements Number of elements found in the input string
|
|
||||||
*
|
|
||||||
* @return A null-terminated string array or NULL on errors
|
|
||||||
*/
|
|
||||||
char **
|
|
||||||
strv_from_string(const char *in, const char *separators, size_t *num_elements)
|
|
||||||
{
|
|
||||||
assert(in != NULL);
|
|
||||||
|
|
||||||
const char *s = in;
|
|
||||||
size_t l, nelems = 0;
|
|
||||||
while (next_word(&s, &l, separators) != NULL)
|
|
||||||
nelems++;
|
|
||||||
|
|
||||||
if (nelems == 0) {
|
|
||||||
*num_elements = 0;
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t strv_len = nelems + 1; /* NULL-terminated */
|
|
||||||
char **strv = zalloc(strv_len * sizeof *strv);
|
|
||||||
|
|
||||||
size_t idx = 0;
|
|
||||||
const char *word;
|
|
||||||
s = in;
|
|
||||||
while ((word = next_word(&s, &l, separators)) != NULL) {
|
|
||||||
char *copy = strndup(word, l);
|
|
||||||
if (!copy) {
|
|
||||||
strv_free(strv);
|
|
||||||
*num_elements = 0;
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
strv[idx++] = copy;
|
|
||||||
}
|
|
||||||
|
|
||||||
*num_elements = nelems;
|
|
||||||
|
|
||||||
return strv;
|
|
||||||
}
|
|
||||||
@@ -1,157 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright © 2008 Kristian Høgsberg
|
|
||||||
* Copyright © 2013-2015 Red Hat, Inc.
|
|
||||||
*
|
|
||||||
* 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:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice (including the next
|
|
||||||
* paragraph) shall be included in all copies or substantial portions of the
|
|
||||||
* Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
||||||
* DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <assert.h>
|
|
||||||
#include <ctype.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <limits.h>
|
|
||||||
#include <math.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdbool.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdarg.h>
|
|
||||||
#ifdef HAVE_LOCALE_H
|
|
||||||
#include <locale.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_XLOCALE_H
|
|
||||||
#include <xlocale.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "util-macros.h"
|
|
||||||
|
|
||||||
static inline bool
|
|
||||||
safe_atod(const char *str, double *val)
|
|
||||||
{
|
|
||||||
char *endptr;
|
|
||||||
double v;
|
|
||||||
#ifdef HAVE_LOCALE_H
|
|
||||||
locale_t c_locale;
|
|
||||||
#endif
|
|
||||||
size_t slen = strlen(str);
|
|
||||||
|
|
||||||
/* We don't have a use-case where we want to accept hex for a double
|
|
||||||
* or any of the other values strtod can parse */
|
|
||||||
for (size_t i = 0; i < slen; i++) {
|
|
||||||
char c = str[i];
|
|
||||||
|
|
||||||
if (isdigit(c))
|
|
||||||
continue;
|
|
||||||
switch(c) {
|
|
||||||
case '+':
|
|
||||||
case '-':
|
|
||||||
case '.':
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef HAVE_LOCALE_H
|
|
||||||
/* Create a "C" locale to force strtod to use '.' as separator */
|
|
||||||
c_locale = newlocale(LC_NUMERIC_MASK, "C", (locale_t)0);
|
|
||||||
if (c_locale == (locale_t)0)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
errno = 0;
|
|
||||||
v = strtod_l(str, &endptr, c_locale);
|
|
||||||
freelocale(c_locale);
|
|
||||||
#else
|
|
||||||
/* No locale support in provided libc, assume it already uses '.' */
|
|
||||||
errno = 0;
|
|
||||||
v = strtod(str, &endptr);
|
|
||||||
#endif
|
|
||||||
if (errno > 0)
|
|
||||||
return false;
|
|
||||||
if (str == endptr)
|
|
||||||
return false;
|
|
||||||
if (*str != '\0' && *endptr != '\0')
|
|
||||||
return false;
|
|
||||||
if (v != 0.0 && !isnormal(v))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
*val = v;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
char **strv_from_string(const char *in, const char *separator, size_t *num_elements);
|
|
||||||
|
|
||||||
static inline void
|
|
||||||
strv_free(char **strv) {
|
|
||||||
char **s = strv;
|
|
||||||
|
|
||||||
if (!strv)
|
|
||||||
return;
|
|
||||||
|
|
||||||
while (*s != NULL) {
|
|
||||||
free(*s);
|
|
||||||
*s = (char*)0x1; /* detect use-after-free */
|
|
||||||
s++;
|
|
||||||
}
|
|
||||||
|
|
||||||
free (strv);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* parse a string containing a list of doubles into a double array.
|
|
||||||
*
|
|
||||||
* @param in string to parse
|
|
||||||
* @param separator string used to separate double in list e.g. ","
|
|
||||||
* @param result double array
|
|
||||||
* @param length length of double array
|
|
||||||
* @return true when parsed successfully otherwise false
|
|
||||||
*/
|
|
||||||
static inline double *
|
|
||||||
double_array_from_string(const char *in,
|
|
||||||
const char *separator,
|
|
||||||
size_t *length)
|
|
||||||
{
|
|
||||||
double *result = NULL;
|
|
||||||
*length = 0;
|
|
||||||
|
|
||||||
size_t nelem;
|
|
||||||
char **strv = strv_from_string(in, separator, &nelem);
|
|
||||||
if(!strv)
|
|
||||||
return result;
|
|
||||||
|
|
||||||
double *numv = zalloc(sizeof(double) * nelem);
|
|
||||||
for (size_t idx = 0; idx < nelem; idx++) {
|
|
||||||
double val;
|
|
||||||
if (!safe_atod(strv[idx], &val))
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
numv[idx] = val;
|
|
||||||
}
|
|
||||||
|
|
||||||
result = numv;
|
|
||||||
numv = NULL;
|
|
||||||
*length = nelem;
|
|
||||||
|
|
||||||
out:
|
|
||||||
strv_free(strv);
|
|
||||||
free(numv);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
3595
src/xf86libinput.c
3595
src/xf86libinput.c
File diff suppressed because it is too large
Load Diff
@@ -3,14 +3,11 @@ AM_CPPFLAGS = $(XORG_CFLAGS) \
|
|||||||
-I$(top_srcdir)/include \
|
-I$(top_srcdir)/include \
|
||||||
-I$(top_srcdir)/src
|
-I$(top_srcdir)/src
|
||||||
|
|
||||||
tests = test-draglock test-bezier
|
tests = test-draglock
|
||||||
|
|
||||||
noinst_PROGRAMS = $(tests)
|
noinst_PROGRAMS = $(tests)
|
||||||
|
|
||||||
test_draglock_SOURCES = test-draglock.c
|
test_draglock_SOURCES = test-draglock.c
|
||||||
test_draglock_LDADD = ../src/libdraglock.la
|
test_draglock_LDADD = ../src/libdraglock.la
|
||||||
|
|
||||||
test_bezier_SOURCES = test-bezier.c
|
|
||||||
test_bezier_LDADD = ../src/libbezier.la -lm
|
|
||||||
|
|
||||||
TESTS = $(tests)
|
TESTS = $(tests)
|
||||||
|
|||||||
@@ -1,208 +0,0 @@
|
|||||||
/*
|
|
||||||
* SPDX-License-Identifier: MIT
|
|
||||||
*
|
|
||||||
* Copyright © 2016 Red Hat, Inc.
|
|
||||||
*
|
|
||||||
* 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:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice (including the next
|
|
||||||
* paragraph) shall be included in all copies or substantial portions of the
|
|
||||||
* Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
||||||
* IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "bezier.h"
|
|
||||||
|
|
||||||
#include <assert.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
static inline void
|
|
||||||
print_curve(int *bezier, size_t size)
|
|
||||||
{
|
|
||||||
/* look at it with gnuplot, "plot 'output-file.txt'" */
|
|
||||||
for (int i = 0; i < size; i++)
|
|
||||||
printf("%d %d\n", i, bezier[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
test_linear(void)
|
|
||||||
{
|
|
||||||
const int size = 2048;
|
|
||||||
int bezier[size];
|
|
||||||
|
|
||||||
struct bezier_control_point controls[] = {
|
|
||||||
{ 0.0, 0.0 },
|
|
||||||
{ 0.0, 0.0 },
|
|
||||||
{ 1.0, 1.0 },
|
|
||||||
{ 1.0, 1.0 }
|
|
||||||
};
|
|
||||||
|
|
||||||
cubic_bezier(controls, bezier, size);
|
|
||||||
|
|
||||||
assert(bezier[0] == 0);
|
|
||||||
assert(bezier[size - 1] == size - 1);
|
|
||||||
|
|
||||||
for (int x = 1; x < size; x++)
|
|
||||||
assert(bezier[x] == x);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Center point pulled down towards X axis */
|
|
||||||
static void
|
|
||||||
test_flattened(void)
|
|
||||||
{
|
|
||||||
const int size = 2048;
|
|
||||||
int bezier[size];
|
|
||||||
|
|
||||||
struct bezier_control_point controls[] = {
|
|
||||||
{ 0.0, 0.0 },
|
|
||||||
{ 0.1, 0.0 },
|
|
||||||
{ 1.0, 0.9 },
|
|
||||||
{ 1.0, 1.0 }
|
|
||||||
};
|
|
||||||
|
|
||||||
cubic_bezier(controls, bezier, size);
|
|
||||||
|
|
||||||
assert(bezier[0] == 0);
|
|
||||||
assert(bezier[size - 1] == size - 1);
|
|
||||||
|
|
||||||
for (int x = 1; x < size - 1; x++) {
|
|
||||||
assert(bezier[x] < x);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Center point pulled up from X axis */
|
|
||||||
static void
|
|
||||||
test_raised(void)
|
|
||||||
{
|
|
||||||
const int size = 2048;
|
|
||||||
int bezier[size];
|
|
||||||
|
|
||||||
struct bezier_control_point controls[] = {
|
|
||||||
{ 0.0, 0.0 },
|
|
||||||
{ 0.1, 0.4 },
|
|
||||||
{ 0.4, 1.0 },
|
|
||||||
{ 1.0, 1.0 }
|
|
||||||
};
|
|
||||||
|
|
||||||
cubic_bezier(controls, bezier, size);
|
|
||||||
|
|
||||||
assert(bezier[0] == 0);
|
|
||||||
assert(bezier[size - 1] == size - 1);
|
|
||||||
|
|
||||||
for (int x = 1; x < size; x++)
|
|
||||||
assert(bezier[x] >= x);
|
|
||||||
|
|
||||||
for (int x = 10; x < size - 10; x++)
|
|
||||||
assert(bezier[x] > x);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
test_windy(void)
|
|
||||||
{
|
|
||||||
const int size = 2048;
|
|
||||||
int bezier[size];
|
|
||||||
|
|
||||||
struct bezier_control_point controls[] = {
|
|
||||||
{ 0.0, 0.0 },
|
|
||||||
{ 0.0, 0.3 },
|
|
||||||
{ 1.0, 0.7 },
|
|
||||||
{ 1.0, 1.0 }
|
|
||||||
};
|
|
||||||
|
|
||||||
cubic_bezier(controls, bezier, size);
|
|
||||||
|
|
||||||
assert(bezier[0] == 0);
|
|
||||||
assert(bezier[size - 1] == size - 1);
|
|
||||||
|
|
||||||
for (int x = 1; x < size/2 - 20; x++)
|
|
||||||
assert(bezier[x] > x);
|
|
||||||
|
|
||||||
for (int x = size/2 + 20; x < size - 1; x++)
|
|
||||||
assert(bezier[x] < x);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
test_nonzero_x_linear(void)
|
|
||||||
{
|
|
||||||
const int size = 2048;
|
|
||||||
int bezier[size];
|
|
||||||
int x;
|
|
||||||
|
|
||||||
struct bezier_control_point controls[] = {
|
|
||||||
{ 0.2, 0.0 },
|
|
||||||
{ 0.2, 0.0 },
|
|
||||||
{ 0.8, 1.0 },
|
|
||||||
{ 0.8, 1.0 }
|
|
||||||
};
|
|
||||||
|
|
||||||
cubic_bezier(controls, bezier, size);
|
|
||||||
|
|
||||||
x = 0;
|
|
||||||
do {
|
|
||||||
assert(bezier[x] == 0);
|
|
||||||
} while (++x < size * 0.2 - 1);
|
|
||||||
|
|
||||||
/* ppc64le, ppc64, aarch64 have different math results at -O2,
|
|
||||||
resulting in one extra zero at the beginning of the array.
|
|
||||||
some other numbers are different too but within the error
|
|
||||||
margin (#99992) */
|
|
||||||
if (bezier[x] == 0)
|
|
||||||
x++;
|
|
||||||
|
|
||||||
do {
|
|
||||||
assert(bezier[x] > bezier[x-1]);
|
|
||||||
} while (++x < size * 0.8 - 1);
|
|
||||||
|
|
||||||
do {
|
|
||||||
assert(bezier[x] == size - 1);
|
|
||||||
} while (++x < size);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
test_nonzero_y_linear(void)
|
|
||||||
{
|
|
||||||
const int size = 2048;
|
|
||||||
int bezier[size];
|
|
||||||
|
|
||||||
struct bezier_control_point controls[] = {
|
|
||||||
{ 0.0, 0.2 },
|
|
||||||
{ 0.0, 0.2 },
|
|
||||||
{ 1.0, 0.8 },
|
|
||||||
{ 1.0, 0.8 }
|
|
||||||
};
|
|
||||||
|
|
||||||
cubic_bezier(controls, bezier, size);
|
|
||||||
|
|
||||||
assert(bezier[0] == (int)(size * 0.2));
|
|
||||||
|
|
||||||
for (int x = 1; x < size; x++) {
|
|
||||||
assert(bezier[x - 1] <= bezier[x]);
|
|
||||||
assert(bezier[x] >= (int)(size * 0.2));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
main(int argc, char **argv)
|
|
||||||
{
|
|
||||||
test_linear();
|
|
||||||
test_flattened();
|
|
||||||
test_raised();
|
|
||||||
test_windy();
|
|
||||||
test_nonzero_x_linear();
|
|
||||||
test_nonzero_y_linear();
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
@@ -1,26 +1,24 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-License-Identifier: MIT
|
|
||||||
*
|
|
||||||
* Copyright © 2013-2015 Red Hat, Inc.
|
* Copyright © 2013-2015 Red Hat, Inc.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
* Permission to use, copy, modify, distribute, and sell this software
|
||||||
* of this software and associated documentation files (the "Software"), to
|
* and its documentation for any purpose is hereby granted without
|
||||||
* deal in the Software without restriction, including without limitation the
|
* fee, provided that the above copyright notice appear in all copies
|
||||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
* and that both that copyright notice and this permission notice
|
||||||
* sell copies of the Software, and to permit persons to whom the Software is
|
* appear in supporting documentation, and that the name of Red Hat
|
||||||
* furnished to do so, subject to the following conditions:
|
* not be used in advertising or publicity pertaining to distribution
|
||||||
|
* of the software without specific, written prior permission. Red
|
||||||
|
* Hat makes no representations about the suitability of this software
|
||||||
|
* for any purpose. It is provided "as is" without express or implied
|
||||||
|
* warranty.
|
||||||
*
|
*
|
||||||
* The above copyright notice and this permission notice (including the next
|
* THE AUTHORS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||||
* paragraph) shall be included in all copies or substantial portions of the
|
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
|
||||||
* Software.
|
* NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||||
*
|
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
* OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
||||||
* IN THE SOFTWARE.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "draglock.h"
|
#include "draglock.h"
|
||||||
@@ -233,7 +231,6 @@ test_filter_meta_passthrough(void)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
rc = draglock_init_from_string(&dl, "10");
|
rc = draglock_init_from_string(&dl, "10");
|
||||||
assert(rc == 0);
|
|
||||||
|
|
||||||
for (i = 0; i < 10; i++) {
|
for (i = 0; i < 10; i++) {
|
||||||
button = i;
|
button = i;
|
||||||
@@ -260,7 +257,6 @@ test_filter_meta_click_meta_only(void)
|
|||||||
int button, press;
|
int button, press;
|
||||||
|
|
||||||
rc = draglock_init_from_string(&dl, "10");
|
rc = draglock_init_from_string(&dl, "10");
|
||||||
assert(rc == 0);
|
|
||||||
|
|
||||||
button = 10;
|
button = 10;
|
||||||
press = 1;
|
press = 1;
|
||||||
@@ -285,7 +281,6 @@ test_filter_meta(void)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
rc = draglock_init_from_string(&dl, "10");
|
rc = draglock_init_from_string(&dl, "10");
|
||||||
assert(rc == 0);
|
|
||||||
|
|
||||||
for (i = 1; i < 10; i++) {
|
for (i = 1; i < 10; i++) {
|
||||||
/* meta down */
|
/* meta down */
|
||||||
@@ -342,7 +337,6 @@ test_filter_meta_extra_click(void)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
rc = draglock_init_from_string(&dl, "10");
|
rc = draglock_init_from_string(&dl, "10");
|
||||||
assert(rc == 0);
|
|
||||||
|
|
||||||
for (i = 1; i < 10; i++) {
|
for (i = 1; i < 10; i++) {
|
||||||
/* meta down */
|
/* meta down */
|
||||||
@@ -413,7 +407,6 @@ test_filter_meta_interleaved(void)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
rc = draglock_init_from_string(&dl, "10");
|
rc = draglock_init_from_string(&dl, "10");
|
||||||
assert(rc == 0);
|
|
||||||
|
|
||||||
for (i = 1; i < 10; i++) {
|
for (i = 1; i < 10; i++) {
|
||||||
/* meta down */
|
/* meta down */
|
||||||
@@ -472,7 +465,6 @@ test_filter_pairs(void)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
rc = draglock_init_from_string(&dl, "1 11 2 0 3 13 4 0 5 15 6 0 7 17 8 0 9 19");
|
rc = draglock_init_from_string(&dl, "1 11 2 0 3 13 4 0 5 15 6 0 7 17 8 0 9 19");
|
||||||
assert(rc == 0);
|
|
||||||
|
|
||||||
for (i = 1; i < 10; i++) {
|
for (i = 1; i < 10; i++) {
|
||||||
button = i;
|
button = i;
|
||||||
|
|||||||
Reference in New Issue
Block a user