[PATCH libinput 02/10] Add an interface to enable/disable tapping

Peter Hutterer peter.hutterer at who-t.net
Mon Jun 2 22:34:55 PDT 2014


Provide an interface to enable/disable tapping, with a default mapping of
1/2/3 fingers mapping to L/R/M button events, respectively.

Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---
 src/libinput-private.h | 13 +++++++++
 src/libinput.c         | 33 +++++++++++++++++++++++
 src/libinput.h         | 73 +++++++++++++++++++++++++++++++++++++++++++++++++-
 3 files changed, 118 insertions(+), 1 deletion(-)

diff --git a/src/libinput-private.h b/src/libinput-private.h
index 61cdc79..020167e 100644
--- a/src/libinput-private.h
+++ b/src/libinput-private.h
@@ -69,12 +69,25 @@ struct libinput_seat {
 	uint32_t button_count[KEY_CNT];
 };
 
+struct libinput_device_config_tap {
+	int (*count)(struct libinput_device *device);
+	enum libinput_config_status (*enable)(struct libinput_device *device,
+					      int enable);
+	int (*is_enabled)(struct libinput_device *device);
+	void (*reset)(struct libinput_device *device);
+};
+
+struct libinput_device_config {
+	struct libinput_device_config_tap *tap;
+};
+
 struct libinput_device {
 	struct libinput_seat *seat;
 	struct list link;
 	void *user_data;
 	int terminated;
 	int refcount;
+	struct libinput_device_config config;
 };
 
 typedef void (*libinput_source_dispatch_t)(void *data);
diff --git a/src/libinput.c b/src/libinput.c
index 6b7e8b8..6a713bb 100644
--- a/src/libinput.c
+++ b/src/libinput.c
@@ -1182,3 +1182,36 @@ libinput_event_touch_get_base_event(struct libinput_event_touch *event)
 {
 	return &event->base;
 }
+
+LIBINPUT_EXPORT int
+libinput_device_config_tap_get_finger_count(struct libinput_device *device)
+{
+	return device->config.tap ? device->config.tap->count(device) : 0;
+}
+
+LIBINPUT_EXPORT enum libinput_config_status
+libinput_device_config_tap_enable(struct libinput_device *device,
+				  int enable)
+{
+	if (enable &&
+	    libinput_device_config_tap_get_finger_count(device) == 0)
+		return LIBINPUT_CONFIG_STATUS_UNSUPPORTED;
+
+	return device->config.tap->enable(device, enable);
+}
+
+LIBINPUT_EXPORT int
+libinput_device_config_tap_is_enabled(struct libinput_device *device)
+{
+	if (libinput_device_config_tap_get_finger_count(device) == 0)
+		return 0;
+
+	return device->config.tap->is_enabled(device);
+}
+
+LIBINPUT_EXPORT void
+libinput_device_config_tap_reset(struct libinput_device *device)
+{
+	if (device->config.tap)
+		device->config.tap->reset(device);
+}
diff --git a/src/libinput.h b/src/libinput.h
index c9ec71a..0c84547 100644
--- a/src/libinput.h
+++ b/src/libinput.h
@@ -1362,8 +1362,79 @@ enum libinput_config_status {
 const char *
 libinput_config_status_to_str(enum libinput_config_status status);
 
+/**
+ * @ingroup config
+ *
+ * Check if the device supports tap-to-click. See
+ * libinput_device_config_tap_set() for more information.
+ *
+ * @param device The device to configure
+ * @return The number of fingers that can generate a tap event, or 0 if the
+ * device does not support tapping.
+ *
+ * @see libinput_device_config_tap_enable
+ * @see libinput_device_config_tap_is_enabled
+ * @see libinput_device_config_tap_reset
+ */
+int
+libinput_device_config_tap_get_finger_count(struct libinput_device *device);
+
+/**
+ * @ingroup config
+ *
+ * Enable tap-to-click on this device, with a default mapping of 1, 2, 3
+ * finger tap mapping to left, right, middle click, respectively.
+ * Tapping is limited by the number of simultaneous touches
+ * supported by the device, see
+ * libinput_device_config_tap_get_finger_count().
+ *
+ * @param device The device to configure
+ * @param enable Non-zero to enable, zero to disable
+ *
+ * @return A config status code. Disabling tapping on a device that does not
+ * support tapping always succeeds.
+ *
+ * @see libinput_device_config_tap_get_finger_count
+ * @see libinput_device_config_tap_is_enabled
+ * @see libinput_device_config_tap_reset
+ */
+enum libinput_config_status
+libinput_device_config_tap_enable(struct libinput_device *device,
+				  int enable);
+
+/**
+ * @ingroup config
+ *
+ * Check if tap-to-click is enabled on this device. If the device does not
+ * support tapping, this function always returns 0.
+ *
+ * @param device The device to configure
+ *
+ * @return 1 if enabled, 0 otherwise.
+ *
+ * @see libinput_device_config_tap_get_finger_count
+ * @see libinput_device_config_tap_enable
+ * @see libinput_device_config_tap_reset
+ */
+int
+libinput_device_config_tap_is_enabled(struct libinput_device *device);
+
+/**
+ * @ingroup config
+ *
+ * Reset tapping to the default configuration for this device. If the device
+ * does not support tapping, this function does nothing.
+ *
+ * @param device The device to configure
+ *
+ * @see libinput_device_config_tap_get_finger_count
+ * @see libinput_device_config_tap_enable
+ * @see libinput_device_config_tap_is_enabled
+ */
+void
+libinput_device_config_tap_reset(struct libinput_device *device);
+
 #ifdef __cplusplus
 }
 #endif
-
 #endif /* LIBINPUT_H */
-- 
1.9.0



More information about the wayland-devel mailing list