diff --git a/src/compositor.c b/src/compositor.c index aaaaa63e1524d50790b04890aba44e0d6cc4dd00..43477e2c9344e5e7894be35fb063923870c6272e 100644 --- a/src/compositor.c +++ b/src/compositor.c @@ -1558,15 +1558,18 @@ present_error_handler (Display * dpy, XErrorEvent * err) g_return_val_if_fail (display_info, 0); /* XPresentPixmap() can trigger a BadWindow rather than a BadMatch */ - if (err->request_code == display_info->present_opcode && err->error_code == BadWindow) + if (err->request_code == display_info->present_opcode && + (err->error_code == BadWindow || err->error_code == BadMatch)) { - ScreenInfo *screen_info; - screen_info = myDisplayGetScreenFromOutput (display_info, err->resourceid); + GSList *screens; + + g_warning ("Dismissing XPresent as unusable, error %d for request %d", + err->error_code, err->request_code); - if (screen_info != NULL) + for (screens = display_info->screens; screens; screens = g_slist_next (screens)) { - g_warning ("Disabling XPresent, error %d on window 0x%lx for request %d", - err->error_code, err->resourceid, err->request_code); + ScreenInfo *screen_info = ((ScreenInfo *) screens->data); + screen_info->present_pending = FALSE; screen_info->use_present = FALSE; }