summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2014-01-07 11:42:32 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2014-07-03 13:48:44 +1000
commit401592870d3d6df3deb669387d58bf632fa0317f (patch)
tree5ed7be4f3b3fa237b48acff5da89756fdc4805ef
parent4b88bf30d43ab3ba731c9e78f011b78a484e12ed (diff)
downloadlibinput-401592870d3d6df3deb669387d58bf632fa0317f.tar.gz
Add an interface to enable/disable tapping
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@who-t.net> Reviewed-by: Jonas Ã…dahl <jadahl@gmail.com>
-rw-r--r--src/libinput-private.h13
-rw-r--r--src/libinput.c35
-rw-r--r--src/libinput.h73
3 files changed, 120 insertions, 1 deletions
diff --git a/src/libinput-private.h b/src/libinput-private.h
index 00901b4d..23c51405 100644
--- a/src/libinput-private.h
+++ b/src/libinput-private.h
@@ -81,12 +81,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 (*set_enabled)(struct libinput_device *device,
+ int enable);
+ int (*get_enabled)(struct libinput_device *device);
+ int (*get_default)(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 6ea9e485..ff4b01e1 100644
--- a/src/libinput.c
+++ b/src/libinput.c
@@ -1275,3 +1275,38 @@ libinput_config_status_to_str(enum libinput_config_status status)
return str;
}
+
+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_set_enabled(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->set_enabled(device, enable);
+}
+
+LIBINPUT_EXPORT int
+libinput_device_config_tap_get_enabled(struct libinput_device *device)
+{
+ if (libinput_device_config_tap_get_finger_count(device) == 0)
+ return 0;
+
+ return device->config.tap->get_enabled(device);
+}
+
+LIBINPUT_EXPORT int
+libinput_device_config_tap_get_default_enabled(struct libinput_device *device)
+{
+ if (libinput_device_config_tap_get_finger_count(device) == 0)
+ return 0;
+
+ return device->config.tap->get_default(device);
+}
diff --git a/src/libinput.h b/src/libinput.h
index ead30646..0d4b79cb 100644
--- a/src/libinput.h
+++ b/src/libinput.h
@@ -1436,8 +1436,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_enabled() 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_set_enabled
+ * @see libinput_device_config_tap_get_enabled
+ * @see libinput_device_config_tap_set_enabled_get_default
+ */
+int
+libinput_device_config_tap_get_finger_count(struct libinput_device *device);
+
+/**
+ * @ingroup config
+ *
+ * Enable or disable 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_get_enabled
+ * @see libinput_device_config_tap_get_default_enabled
+ */
+enum libinput_config_status
+libinput_device_config_tap_set_enabled(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_set_enabled
+ * @see libinput_device_config_tap_get_default_enabled
+ */
+int
+libinput_device_config_tap_get_enabled(struct libinput_device *device);
+
+/**
+ * @ingroup config
+ *
+ * Return the default setting for whether tapping is enabled on this device.
+ *
+ * @param device The device to configure
+ * @return 1 if tapping is enabled by default, or 0 otherwise
+ *
+ * @see libinput_device_config_tap_get_finger_count
+ * @see libinput_device_config_tap_set_enabled
+ * @see libinput_device_config_tap_get_enabled
+ */
+int
+libinput_device_config_tap_get_default_enabled(struct libinput_device *device);
+
#ifdef __cplusplus
}
#endif
-
#endif /* LIBINPUT_H */