summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2017-02-10 10:30:38 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2017-02-13 08:28:37 +1000
commit019f1851076c267002bf11673af69b5a0d48a301 (patch)
treee595418dfe27476e684008aaa443cec47e393837 /src
parentbe30b28a1278190197f60c80821ba74602d09dac (diff)
touchpad: add a hwdb quirk for (external) touchpad/keyboard combos
Specify the layout of the combo so we know when to initialize palm detection. This allows us to drop palm detection on external touchpads otherwise, replacing the wacom-specific check with something more generic.. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Diffstat (limited to 'src')
-rw-r--r--src/evdev-mt-touchpad.c19
-rw-r--r--src/libinput-util.c24
-rw-r--r--src/libinput-util.h7
3 files changed, 48 insertions, 2 deletions
diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c
index c5eeeac..1ac8413 100644
--- a/src/evdev-mt-touchpad.c
+++ b/src/evdev-mt-touchpad.c
@@ -2175,6 +2175,21 @@ tp_dwt_config_get_default(struct libinput_device *device)
LIBINPUT_CONFIG_DWT_DISABLED;
}
+static inline bool
+tp_is_tpkb_combo_below(struct evdev_device *device)
+{
+ const char *prop;
+ enum tpkbcombo_layout layout = TPKBCOMBO_LAYOUT_UNKNOWN;
+
+ prop = udev_device_get_property_value(device->udev_device,
+ "LIBINPUT_ATTR_TPKBCOMBO_LAYOUT");
+ if (!prop)
+ return false;
+
+ return parse_tpkbcombo_layout_poperty(prop, &layout) &&
+ layout == TPKBCOMBO_LAYOUT_BELOW;
+}
+
static void
tp_init_dwt(struct tp_dispatch *tp,
struct evdev_device *device)
@@ -2203,8 +2218,8 @@ tp_init_palmdetect(struct tp_dispatch *tp,
tp->palm.right_edge = INT_MAX;
tp->palm.left_edge = INT_MIN;
- /* Wacom doesn't have internal touchpads */
- if (device->model_flags & EVDEV_MODEL_WACOM_TOUCHPAD)
+ if (device->tags & EVDEV_TAG_EXTERNAL_TOUCHPAD &&
+ !tp_is_tpkb_combo_below(device))
return;
evdev_device_get_size(device, &width, &height);
diff --git a/src/libinput-util.c b/src/libinput-util.c
index d75955c..351bbe4 100644
--- a/src/libinput-util.c
+++ b/src/libinput-util.c
@@ -336,6 +336,30 @@ parse_switch_reliability_property(const char *prop,
}
/**
+ * Parses a string with the allowed values: "below"
+ * The value refers to the position of the touchpad (relative to the
+ * keyboard, i.e. your average laptop would be 'below')
+ *
+ * @param prop The value of the property
+ * @param layout The layout
+ * @return true on success, false otherwise
+ */
+bool
+parse_tpkbcombo_layout_poperty(const char *prop,
+ enum tpkbcombo_layout *layout)
+{
+ if (!prop)
+ return false;
+
+ if (streq(prop, "below")) {
+ *layout = TPKBCOMBO_LAYOUT_BELOW;
+ return true;
+ }
+
+ return false;
+}
+
+/**
* Return the next word in a string pointed to by state before the first
* separator character. Call repeatedly to tokenize a whole string.
*
diff --git a/src/libinput-util.h b/src/libinput-util.h
index 00ece58..d86ff12 100644
--- a/src/libinput-util.h
+++ b/src/libinput-util.h
@@ -379,6 +379,13 @@ double parse_trackpoint_accel_property(const char *prop);
bool parse_dimension_property(const char *prop, size_t *width, size_t *height);
bool parse_calibration_property(const char *prop, float calibration[6]);
+enum tpkbcombo_layout {
+ TPKBCOMBO_LAYOUT_UNKNOWN,
+ TPKBCOMBO_LAYOUT_BELOW,
+};
+bool parse_tpkbcombo_layout_poperty(const char *prop,
+ enum tpkbcombo_layout *layout);
+
enum switch_reliability {
RELIABILITY_UNKNOWN,
RELIABILITY_RELIABLE,