summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authormain()2017-07-22 20:02:11 +0200
committermain()2017-07-22 20:02:54 +0200
commitfe7e8907a5c9c5342b5234fdf32e7aa374c129dc (patch)
tree7e95293ae3aa6928bc2abe5a51e379113151d7c2
parent23ccabf5204ffbfc636c514932b65733e4a7056d (diff)
downloadaur-fe7e8907a5c9c5342b5234fdf32e7aa374c129dc.tar.gz
Apply patch
-rw-r--r--.SRCINFO14
-rw-r--r--PKGBUILD15
-rw-r--r--fix-101796.patch92
3 files changed, 109 insertions, 12 deletions
diff --git a/.SRCINFO b/.SRCINFO
index ead5c99ad6cc..192c4c2dd4ae 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,8 +1,6 @@
-# Generated by mksrcinfo v8
-# Tue Jul 4 15:48:28 UTC 2017
-pkgbase = libinput-git
- pkgdesc = Input device management and event handling library
- pkgver = 1.8.0.r7.gca9d6a8
+pkgbase = libinput-fix101796-git
+ pkgdesc = Input device management and event handling library (patched to fix bug #101796)
+ pkgver = 1.8.0.r48.g27ebea9
pkgrel = 1
url = http://freedesktop.org/wiki/Software/libinput/
arch = i686
@@ -18,10 +16,12 @@ pkgbase = libinput-git
depends = systemd
depends = libevdev
depends = libwacom
- provides = libinput=1.8.0.r7.gca9d6a8
+ provides = libinput=1.8.0.r48.g27ebea9
conflicts = libinput
source = git://anongit.freedesktop.org/wayland/libinput
+ source = fix-101796.patch
sha1sums = SKIP
+ sha1sums = 47a933749448928edf23a07c82d6d75be04e4285
-pkgname = libinput-git
+pkgname = libinput-fix101796-git
diff --git a/PKGBUILD b/PKGBUILD
index 1c12b67ef4d1..d8dad16223da 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -1,9 +1,9 @@
# Maintainer: Joel Teichroeb <joel@teichroeb.net>
-pkgname=libinput-git
-pkgver=1.8.0.r7.gca9d6a8
+pkgname=libinput-fix101796-git
+pkgver=1.8.0.r48.g27ebea9
pkgrel=1
-pkgdesc='Input device management and event handling library'
+pkgdesc='Input device management and event handling library (patched to fix bug #101796)'
arch=(i686 x86_64)
url='http://freedesktop.org/wiki/Software/libinput/'
provides=("libinput=${pkgver}")
@@ -12,8 +12,13 @@ depends=('mtdev' 'systemd' 'libevdev' 'libwacom')
checkdepends=('valgrind')
makedepends=('git' 'meson' 'doxygen' 'graphviz' 'gtk3')
conflicts=('libinput')
-source=(git://anongit.freedesktop.org/wayland/libinput)
-sha1sums=('SKIP')
+source=('git://anongit.freedesktop.org/wayland/libinput' 'fix-101796.patch')
+sha1sums=('SKIP' '47a933749448928edf23a07c82d6d75be04e4285')
+
+prepare() {
+ cd libinput
+ patch -p1 -i ../fix-101796.patch
+}
pkgver() {
cd libinput
diff --git a/fix-101796.patch b/fix-101796.patch
new file mode 100644
index 000000000000..3254dae3ad61
--- /dev/null
+++ b/fix-101796.patch
@@ -0,0 +1,92 @@
+Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
+---
+ src/evdev.c | 20 ++++++++++----------
+ test/test-pointer.c | 35 +++++++++++++++++++++++++++++++++++
+ 2 files changed, 45 insertions(+), 10 deletions(-)
+
+diff --git a/src/evdev.c b/src/evdev.c
+index 24bfad07..bd1725c0 100644
+--- a/src/evdev.c
++++ b/src/evdev.c
+@@ -836,16 +836,16 @@ fallback_process_key(struct fallback_dispatch *dispatch,
+ type = get_key_type(e->code);
+
+ /* Ignore key release events from the kernel for keys that libinput
+- * never got a pressed event for. */
+- if (e->value == 0) {
+- switch (type) {
+- case EVDEV_KEY_TYPE_NONE:
+- break;
+- case EVDEV_KEY_TYPE_KEY:
+- case EVDEV_KEY_TYPE_BUTTON:
+- if (!hw_is_key_down(dispatch, e->code))
+- return;
+- }
++ * never got a pressed event for or key presses for keys that we
++ * think are still down */
++ switch (type) {
++ case EVDEV_KEY_TYPE_NONE:
++ break;
++ case EVDEV_KEY_TYPE_KEY:
++ case EVDEV_KEY_TYPE_BUTTON:
++ if ((e->value && hw_is_key_down(dispatch, e->code)) ||
++ (e->value == 0 && !hw_is_key_down(dispatch, e->code)))
++ return;
+ }
+
+ hw_set_key_down(dispatch, e->code, e->value);
+diff --git a/test/test-pointer.c b/test/test-pointer.c
+index e09f8f8a..2f03195a 100644
+--- a/test/test-pointer.c
++++ b/test/test-pointer.c
+@@ -490,6 +490,40 @@ START_TEST(pointer_button_has_no_button)
+ }
+ END_TEST
+
++START_TEST(pointer_recover_from_lost_button_count)
++{
++ struct litest_device *dev = litest_current_device();
++ struct libinput *li = dev->libinput;
++ struct libevdev *evdev = dev->evdev;
++
++ disable_button_scrolling(dev);
++
++ litest_drain_events(dev->libinput);
++
++ litest_button_click(dev, BTN_LEFT, 1);
++
++ litest_assert_button_event(li,
++ BTN_LEFT,
++ LIBINPUT_BUTTON_STATE_PRESSED);
++
++ /* Grab for the release to make libinput lose count */
++ libevdev_grab(evdev, LIBEVDEV_GRAB);
++ litest_button_click(dev, BTN_LEFT, 0);
++ libevdev_grab(evdev, LIBEVDEV_UNGRAB);
++
++ litest_assert_empty_queue(li);
++
++ litest_button_click(dev, BTN_LEFT, 1);
++ litest_assert_empty_queue(li);
++
++ litest_button_click(dev, BTN_LEFT, 0);
++ litest_assert_button_event(li,
++ BTN_LEFT,
++ LIBINPUT_BUTTON_STATE_RELEASED);
++ litest_assert_empty_queue(li);
++}
++END_TEST
++
+ static inline double
+ wheel_click_count(struct litest_device *dev, int which)
+ {
+@@ -2088,6 +2122,7 @@ litest_setup_tests_pointer(void)
+ litest_add_no_device("pointer:button", pointer_button_auto_release);
+ litest_add_no_device("pointer:button", pointer_seat_button_count);
+ litest_add_for_device("pointer:button", pointer_button_has_no_button, LITEST_KEYBOARD);
++ litest_add("pointer:button", pointer_recover_from_lost_button_count, LITEST_BUTTON, LITEST_CLICKPAD);
+ litest_add("pointer:scroll", pointer_scroll_wheel, LITEST_WHEEL, LITEST_TABLET);
+ litest_add("pointer:scroll", pointer_scroll_button, LITEST_RELATIVE|LITEST_BUTTON, LITEST_ANY);
+ litest_add("pointer:scroll", pointer_scroll_button_noscroll, LITEST_ABSOLUTE|LITEST_BUTTON, LITEST_RELATIVE);
+--
+2.13.3