diff options
| author | Peter Hutterer <peter.hutterer@who-t.net> | 2013-07-01 10:06:55 +1000 |
|---|---|---|
| committer | Peter Hutterer <peter.hutterer@who-t.net> | 2013-07-01 10:10:25 +1000 |
| commit | 2ae4dc003a0ac4c9a6cf78ac020e1e45b9c8516b (patch) | |
| tree | 09bd076dc0d4c0f1154c5e76d9249124828604cb /libevdev | |
| parent | 0aa639b4432d5665d0f79b12aaa727140a4cd13f (diff) | |
| download | libevdev-2ae4dc003a0ac4c9a6cf78ac020e1e45b9c8516b.tar.gz | |
Don't deliver events that are filtered
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Diffstat (limited to 'libevdev')
| -rw-r--r-- | libevdev/libevdev.c | 26 |
1 files changed, 15 insertions, 11 deletions
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) { |
