105 lines
3.1 KiB
Diff
105 lines
3.1 KiB
Diff
From 5a18344bbc0a47f13752d8e39a22450f89624980 Mon Sep 17 00:00:00 2001
|
|
From: Peter Hutterer <peter.hutterer@who-t.net>
|
|
Date: Fri, 22 May 2015 15:51:18 +1000
|
|
Subject: [PATCH libinput 04/10] touchpad: only check keyboards for
|
|
disable-while-typing
|
|
|
|
The keyboard test is a simple one, if we have the first row of alphabetic
|
|
keys, we assume it's a full keyboard.
|
|
|
|
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
|
|
Tested-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
|
|
---
|
|
src/evdev-mt-touchpad.c | 22 ++++++++++++----------
|
|
src/evdev.c | 20 ++++++++++++++++++++
|
|
src/evdev.h | 1 +
|
|
3 files changed, 33 insertions(+), 10 deletions(-)
|
|
|
|
diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c
|
|
index 6c0daf0..5a05129 100644
|
|
--- a/src/evdev-mt-touchpad.c
|
|
+++ b/src/evdev-mt-touchpad.c
|
|
@@ -962,16 +962,18 @@ tp_device_added(struct evdev_device *device,
|
|
tp_trackpoint_event, tp);
|
|
}
|
|
|
|
- /* FIXME: detect external keyboard better */
|
|
- kbd_is_internal = bus_tp != BUS_BLUETOOTH &&
|
|
- bus_kbd == bus_tp;
|
|
- if (tp_is_internal && kbd_is_internal &&
|
|
- tp->dwt.keyboard == NULL) {
|
|
- libinput_device_add_event_listener(&added_device->base,
|
|
- &tp->dwt.keyboard_listener,
|
|
- tp_keyboard_event, tp);
|
|
- tp->dwt.keyboard = added_device;
|
|
- tp->dwt.keyboard_active = false;
|
|
+ if (added_device->tags & EVDEV_TAG_KEYBOARD) {
|
|
+ /* FIXME: detect external keyboard better */
|
|
+ kbd_is_internal = bus_tp != BUS_BLUETOOTH &&
|
|
+ bus_kbd == bus_tp;
|
|
+ if (tp_is_internal && kbd_is_internal &&
|
|
+ tp->dwt.keyboard == NULL) {
|
|
+ libinput_device_add_event_listener(&added_device->base,
|
|
+ &tp->dwt.keyboard_listener,
|
|
+ tp_keyboard_event, tp);
|
|
+ tp->dwt.keyboard = added_device;
|
|
+ tp->dwt.keyboard_active = false;
|
|
+ }
|
|
}
|
|
|
|
if (tp->sendevents.current_mode !=
|
|
diff --git a/src/evdev.c b/src/evdev.c
|
|
index 4ce9250..a98e801 100644
|
|
--- a/src/evdev.c
|
|
+++ b/src/evdev.c
|
|
@@ -734,6 +734,25 @@ evdev_tag_trackpoint(struct evdev_device *device,
|
|
}
|
|
|
|
static void
|
|
+evdev_tag_keyboard(struct evdev_device *device,
|
|
+ struct udev_device *udev_device)
|
|
+{
|
|
+ int code;
|
|
+
|
|
+ if (!libevdev_has_event_type(device->evdev, EV_KEY))
|
|
+ return;
|
|
+
|
|
+ for (code = KEY_Q; code <= KEY_P; code++) {
|
|
+ if (!libevdev_has_event_code(device->evdev,
|
|
+ EV_KEY,
|
|
+ code))
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ device->tags |= EVDEV_TAG_KEYBOARD;
|
|
+}
|
|
+
|
|
+static void
|
|
fallback_process(struct evdev_dispatch *dispatch,
|
|
struct evdev_device *device,
|
|
struct input_event *event,
|
|
@@ -772,6 +791,7 @@ fallback_tag_device(struct evdev_device *device,
|
|
{
|
|
evdev_tag_external_mouse(device, udev_device);
|
|
evdev_tag_trackpoint(device, udev_device);
|
|
+ evdev_tag_keyboard(device, udev_device);
|
|
}
|
|
|
|
static int
|
|
diff --git a/src/evdev.h b/src/evdev.h
|
|
index 20c0b55..bd398de 100644
|
|
--- a/src/evdev.h
|
|
+++ b/src/evdev.h
|
|
@@ -68,6 +68,7 @@ enum evdev_device_tags {
|
|
EVDEV_TAG_INTERNAL_TOUCHPAD = (1 << 1),
|
|
EVDEV_TAG_TRACKPOINT = (1 << 2),
|
|
EVDEV_TAG_TOUCHPAD_TRACKPOINT = (1 << 3),
|
|
+ EVDEV_TAG_KEYBOARD = (1 << 4),
|
|
};
|
|
|
|
enum evdev_middlebutton_state {
|
|
--
|
|
2.4.1
|
|
|