From 000a137a6554cfc350407f3b719fb4aa3a1c33c6 Mon Sep 17 00:00:00 2001 From: Uli Schlachter Date: Mon, 17 Dec 2012 17:12:59 +0100 Subject: boilerplate-xcb: Ignore MappingNotify events The boilerplate code makes sure that our tests didn't cause any X11 errors or X11 events, because those might confuse API users. However, when the keyboard layout changes, every connection gets a MappingNotify event. This means that the test and performance test suites failed when the keyboard layout was changed while they are running. Fix this by ignoring MappingNotifies. Reported by Arthur Huillet on IRC. Signed-off-by: Uli Schlachter --- boilerplate/cairo-boilerplate-xcb.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'boilerplate') diff --git a/boilerplate/cairo-boilerplate-xcb.c b/boilerplate/cairo-boilerplate-xcb.c index 979f5b59..ffefecb9 100644 --- a/boilerplate/cairo-boilerplate-xcb.c +++ b/boilerplate/cairo-boilerplate-xcb.c @@ -46,9 +46,15 @@ typedef struct _xcb_target_closure { static cairo_status_t _cairo_boilerplate_xcb_handle_errors (xcb_target_closure_t *xtc) { - xcb_generic_event_t *ev; + xcb_generic_event_t *ev = NULL; - if ((ev = xcb_poll_for_event (xtc->c)) != NULL) { + /* Ignore all MappingNotify events; those might happen without us causing them */ + do { + free(ev); + ev = xcb_poll_for_event(xtc->c); + } while (ev != NULL && ev->response_type == XCB_MAPPING_NOTIFY); + + if (ev != NULL) { if (ev->response_type == CAIRO_XCB_ERROR) { xcb_generic_error_t *error = (xcb_generic_error_t *) ev; -- cgit v1.2.3