[cairo-commit] boilerplate/cairo-boilerplate-xcb.c

Uli Schlachter psychon at kemper.freedesktop.org
Mon Dec 17 08:17:32 PST 2012


 boilerplate/cairo-boilerplate-xcb.c |   10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

New commits:
commit 000a137a6554cfc350407f3b719fb4aa3a1c33c6
Author: Uli Schlachter <psychon at znc.in>
Date:   Mon Dec 17 17:12:59 2012 +0100

    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 <psychon at znc.in>

diff --git a/boilerplate/cairo-boilerplate-xcb.c b/boilerplate/cairo-boilerplate-xcb.c
index 979f5b5..ffefecb 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;
 


More information about the cairo-commit mailing list