[PATCH 02/11] Add libinput_device_has_key function

Hans de Goede hdegoede at redhat.com
Thu Nov 6 07:37:31 PST 2014


In some cases the compositor will want to know which keys (buttons) a device
has.

E.g. for scrolling we want the compositor to be able to set a button to change
a relative device (e.g. a trackball) into scroll mode, so that it sends
scroll-axis events instead of pointer motion events.

In order for the compositor to be able to present a sane UI for this, it needs
to know which buttons a device has.

Signed-off-by: Hans de Goede <hdegoede at redhat.com>
---
 src/evdev.c    |  6 ++++++
 src/evdev.h    |  3 +++
 src/libinput.c |  6 ++++++
 src/libinput.h | 13 +++++++++++++
 4 files changed, 28 insertions(+)

diff --git a/src/evdev.c b/src/evdev.c
index 3aa87a7..b39b484 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -1480,6 +1480,12 @@ evdev_device_get_size(struct evdev_device *device,
 	return 0;
 }
 
+int
+evdev_device_has_key(struct evdev_device *device, uint32_t keycode)
+{
+	return libevdev_has_event_code(device->evdev, EV_KEY, keycode);
+}
+
 void
 evdev_post_scroll(struct evdev_device *device,
 		  uint64_t time,
diff --git a/src/evdev.h b/src/evdev.h
index 666c8dc..6867db6 100644
--- a/src/evdev.h
+++ b/src/evdev.h
@@ -239,6 +239,9 @@ evdev_device_get_size(struct evdev_device *device,
 		      double *w,
 		      double *h);
 
+int
+evdev_device_has_key(struct evdev_device *device, uint32_t keycode);
+
 double
 evdev_device_transform_x(struct evdev_device *device,
 			 double x,
diff --git a/src/libinput.c b/src/libinput.c
index 35262dd..abbfb10 100644
--- a/src/libinput.c
+++ b/src/libinput.c
@@ -1254,6 +1254,12 @@ libinput_device_get_size(struct libinput_device *device,
 				     height);
 }
 
+LIBINPUT_EXPORT int
+libinput_device_has_key(struct libinput_device *device, uint32_t keycode)
+{
+	return evdev_device_has_key((struct evdev_device *)device, keycode);
+}
+
 LIBINPUT_EXPORT struct libinput_event *
 libinput_event_device_notify_get_base_event(struct libinput_event_device_notify *event)
 {
diff --git a/src/libinput.h b/src/libinput.h
index 166c5f3..cdd8186 100644
--- a/src/libinput.h
+++ b/src/libinput.h
@@ -1434,6 +1434,19 @@ libinput_device_get_size(struct libinput_device *device,
 			 double *width,
 			 double *height);
 
+/**
+ * @ingroup device
+ *
+ * Check if a device has a key or button with the passed in keycode
+ * (see linux/input.h).
+ *
+ * @param device A current input device
+ * @param keycode keycode to check for
+ *
+ * @return 1 if the device supports this keycode, or 0 otherwise.
+ */
+int
+libinput_device_has_key(struct libinput_device *device, uint32_t keycode);
 
 /**
  * @defgroup config Device configuration
-- 
2.1.0



More information about the wayland-devel mailing list