litest_wait_for_event() returns if any event is available. litest_wait_for_event_of_type(... type, type, type, -1) returns if any of the given event types is availble. All other events are discarded.
Signed-off-by: Peter Hutterer <[email protected]> --- test/litest.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ test/litest.h | 2 ++ 2 files changed, 48 insertions(+) diff --git a/test/litest.c b/test/litest.c index 00db464..fcc8de1 100644 --- a/test/litest.c +++ b/test/litest.c @@ -781,6 +781,52 @@ litest_scale(const struct litest_device *d, unsigned int axis, double val) } void +litest_wait_for_event(struct libinput *li) +{ + return litest_wait_for_event_of_type(li, -1); +} + +void +litest_wait_for_event_of_type(struct libinput *li, ...) +{ + va_list args; + enum libinput_event_type types[32] = {LIBINPUT_EVENT_NONE}; + size_t ntypes = 0; + enum libinput_event_type type; + + va_start(args, li); + type = va_arg(args, int); + while ((int)type != -1) { + assert(type > 0); + assert(ntypes < ARRAY_LENGTH(types)); + types[ntypes++] = type; + } + va_end(args); + + while (1) { + size_t i; + struct libinput_event *event; + + while ((type = libinput_next_event_type(li)) == LIBINPUT_EVENT_NONE) { + msleep(10); + libinput_dispatch(li); + } + + /* no event mask means wait for any event */ + if (ntypes == 0) + return; + + for (i = 0; i < ntypes; i++) { + if (type == types[i]) + return; + } + + event = libinput_get_event(li); + libinput_event_destroy(event); + } +} + +void litest_drain_events(struct libinput *li) { struct libinput_event *event; diff --git a/test/litest.h b/test/litest.h index 2dcb7b2..815a571 100644 --- a/test/litest.h +++ b/test/litest.h @@ -137,6 +137,8 @@ void litest_button_click(struct litest_device *d, void litest_keyboard_key(struct litest_device *d, unsigned int key, bool is_press); +void litest_wait_for_event(struct libinput *li); +void litest_wait_for_event_of_type(struct libinput *li, ...); void litest_drain_events(struct libinput *li); void litest_assert_empty_queue(struct libinput *li); -- 1.9.3 _______________________________________________ wayland-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/wayland-devel
