From 27528b966830fc5117acd7021ad014fe831bcf4b Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Fri, 31 May 2013 14:48:43 +1000 Subject: [PATCH] Change libevdev_grab to take an enum Enum values fo 3 and 4 to avoid callers using true/false values for grabbing and ungrabbing. If the evdev mute ioctl is merged, we can extend this without having to worry about breaking callers. [1] http://lwn.net/Articles/476830/ Signed-off-by: Peter Hutterer --- libevdev/libevdev.c | 10 ++++++++-- libevdev/libevdev.h | 6 ++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/libevdev/libevdev.c b/libevdev/libevdev.c index 877abba..aba8627 100644 --- a/libevdev/libevdev.c +++ b/libevdev/libevdev.c @@ -847,9 +847,15 @@ libevdev_grab(struct libevdev *dev, int grab) { int rc = 0; - if (grab && !dev->grabbed) + if (grab != LIBEVDEV_GRAB && grab != LIBEVDEV_UNGRAB) + return -EINVAL; + + if (grab == dev->grabbed) + return 0; + + if (grab == LIBEVDEV_GRAB) rc = ioctl(dev->fd, EVIOCGRAB, (void *)1); - else if (!grab && dev->grabbed) + else if (grab == LIBEVDEV_UNGRAB) rc = ioctl(dev->fd, EVIOCGRAB, (void *)0); if (rc == 0) diff --git a/libevdev/libevdev.h b/libevdev/libevdev.h index 8feb542..d18bd1f 100644 --- a/libevdev/libevdev.h +++ b/libevdev/libevdev.h @@ -83,6 +83,12 @@ typedef void (*libevdev_log_func_t)(const char *format, va_list args); */ void libevdev_set_log_handler(struct libevdev *dev, libevdev_log_func_t logfunc); + +enum EvdevGrabModes { + LIBEVDEV_GRAB = 3, + LIBEVDEV_UNGRAB = 4, +}; + /** * Grab or ungrab the device through a kernel EVIOCGRAB. This prevents other * clients (including kernel-internal ones such as rfkill) from receiving