From: Peter Hutterer Date: Mon, 1 Jul 2013 00:06:55 +0000 (+1000) Subject: Don't deliver events that are filtered X-Git-Tag: libevdev-0.2~39 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2ae4dc003a0ac4c9a6cf78ac020e1e45b9c8516b;p=platform%2Fupstream%2Flibevdev.git Don't deliver events that are filtered Signed-off-by: Peter Hutterer --- diff --git a/libevdev/libevdev.c b/libevdev/libevdev.c index 14bb9e4..d85580c 100644 --- a/libevdev/libevdev.c +++ b/libevdev/libevdev.c @@ -556,21 +556,25 @@ int libevdev_next_event(struct libevdev *dev, unsigned int flags, struct input_e /* Always read in some more events. Best case this smoothes over a potential SYN_DROPPED, worst case we don't read fast enough and end up with SYN_DROPPED anyway */ - rc = read_more_events(dev); - if (rc < 0 && rc != -EAGAIN) - goto out; + do { + rc = read_more_events(dev); + if (rc < 0 && rc != -EAGAIN) + goto out; - if (flags & LIBEVDEV_FORCE_SYNC) { - dev->need_sync = 1; - rc = 1; - goto out; - } + if (flags & LIBEVDEV_FORCE_SYNC) { + dev->need_sync = 1; + rc = 1; + goto out; + } - if (queue_shift(dev, ev) != 0) - return -EAGAIN; + if (queue_shift(dev, ev) != 0) + return -EAGAIN; + + update_state(dev, ev); - update_state(dev, ev); + /* if we disabled a code, get the next event instead */ + } while(!libevdev_has_event_code(dev, ev->type, ev->code)); rc = 0; if (ev->type == EV_SYN && ev->code == SYN_DROPPED) {