X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?p=xscreensaver;a=blobdiff_plain;f=driver%2Ftest-randr.c;h=5ba24b4a9d1ab2a16df126c81a0a67915ccb76f7;hp=63887efa670744f774768d9204bd7af903c77a9e;hb=ffd8c0873576a9e3065696a624dce6b766b77062;hpb=9c9d475ff889ed8be02e8ce8c17da28b93278fca diff --git a/driver/test-randr.c b/driver/test-randr.c index 63887efa..5ba24b4a 100644 --- a/driver/test-randr.c +++ b/driver/test-randr.c @@ -50,11 +50,21 @@ blurb (void) } +static Bool error_handler_hit_p = False; + +static int +ignore_all_errors_ehandler (Display *dpy, XErrorEvent *error) +{ + error_handler_hit_p = True; + return 0; +} + + int main (int argc, char **argv) { - int event_number, error_number; - int major, minor; + int event_number = -1, error_number = -1; + int major = -1, minor = -1; int nscreens = 0; int i; @@ -93,10 +103,27 @@ main (int argc, char **argv) for (i = 0; i < nscreens; i++) { - XRRScreenConfiguration *rrc = - (major >= 0 ? XRRGetScreenInfo (dpy, RootWindow (dpy, i)) : 0); + XRRScreenConfiguration *rrc; + XErrorHandler old_handler; + + XSync (dpy, False); + error_handler_hit_p = False; + old_handler = XSetErrorHandler (ignore_all_errors_ehandler); - if (rrc) + rrc = (major >= 0 ? XRRGetScreenInfo (dpy, RootWindow (dpy, i)) : 0); + + XSync (dpy, False); + XSetErrorHandler (old_handler); + XSync (dpy, False); + + if (error_handler_hit_p) + { + fprintf(stderr, "%s: XRRGetScreenInfo(dpy, %d) ==> X error:\n", + blurb(), i); + /* do it again without the error handler to print the error */ + rrc = XRRGetScreenInfo (dpy, RootWindow (dpy, i)); + } + else if (rrc) { SizeID current_size = -1; Rotation current_rotation = ~0;