X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=driver%2Fwindows.c;h=694236113b4a1581c6a0300e0084b9e270df9cfc;hb=4cecfc89e5e889c7232693897c06168fb378bd5c;hp=cbc72d76b698bc8322a2b435f3f521a9f644f824;hpb=3f9592851ce4ed76a9979bfdd6ec7dc5c457e183;p=xscreensaver diff --git a/driver/windows.c b/driver/windows.c index cbc72d76..69423611 100644 --- a/driver/windows.c +++ b/driver/windows.c @@ -119,7 +119,7 @@ grab_kbd(saver_info *si, Window w, int screen_no) } if (p->verbose_p) - fprintf(stderr, "%s: %d: grabbing keyboard on 0x%x... %s.\n", + fprintf(stderr, "%s: %d: grabbing keyboard on 0x%lx... %s.\n", blurb(), screen_no, (unsigned long) w, grab_string(status)); return status; } @@ -139,7 +139,7 @@ grab_mouse (saver_info *si, Window w, Cursor cursor, int screen_no) } if (p->verbose_p) - fprintf(stderr, "%s: %d: grabbing mouse on 0x%x... %s.\n", + fprintf(stderr, "%s: %d: grabbing mouse on 0x%lx... %s.\n", blurb(), screen_no, (unsigned long) w, grab_string(status)); return status; } @@ -151,7 +151,7 @@ ungrab_kbd(saver_info *si) saver_preferences *p = &si->prefs; XUngrabKeyboard(si->dpy, CurrentTime); if (p->verbose_p) - fprintf(stderr, "%s: %d: ungrabbing keyboard (was 0x%x).\n", + fprintf(stderr, "%s: %d: ungrabbing keyboard (was 0x%lx).\n", blurb(), si->keyboard_grab_screen, (unsigned long) si->keyboard_grab_window); si->keyboard_grab_window = 0; @@ -164,7 +164,7 @@ ungrab_mouse(saver_info *si) saver_preferences *p = &si->prefs; XUngrabPointer(si->dpy, CurrentTime); if (p->verbose_p) - fprintf(stderr, "%s: %d: ungrabbing mouse (was 0x%x).\n", + fprintf(stderr, "%s: %d: ungrabbing mouse (was 0x%lx).\n", blurb(), si->mouse_grab_screen, (unsigned long) si->mouse_grab_window); si->mouse_grab_window = 0; @@ -361,6 +361,11 @@ remove_vroot_property (Display *dpy, Window win) static Bool safe_XKillClient (Display *dpy, XID id); +#ifdef HAVE_XF86VMODE +static Bool safe_XF86VidModeGetViewPort (Display *, int, int *, int *); +#endif /* HAVE_XF86VMODE */ + + static void kill_xsetroot_data_1 (Display *dpy, Window window, Atom prop, const char *atom_name, @@ -966,8 +971,8 @@ get_screen_viewport (saver_screen_info *ssi, if (!xinerama_p && /* Xinerama + VidMode = broken. */ XF86VidModeQueryExtension (si->dpy, &event, &error) && - XF86VidModeGetModeLine (si->dpy, ssi->number, &dot, &ml) && - XF86VidModeGetViewPort (si->dpy, ssi->number, &x, &y)) + safe_XF86VidModeGetViewPort (si->dpy, ssi->number, &x, &y) && + XF86VidModeGetModeLine (si->dpy, ssi->number, &dot, &ml)) { char msg[512]; *x_ret = x; @@ -1164,6 +1169,36 @@ safe_XKillClient (Display *dpy, XID id) } +#ifdef HAVE_XF86VMODE +static Bool +safe_XF86VidModeGetViewPort (Display *dpy, int screen, int *xP, int *yP) +{ + Bool result; + XErrorHandler old_handler; + XSync (dpy, False); + error_handler_hit_p = False; + old_handler = XSetErrorHandler (ignore_all_errors_ehandler); + + result = XF86VidModeGetViewPort (dpy, screen, xP, yP); + + XSync (dpy, False); + XSetErrorHandler (old_handler); + XSync (dpy, False); + + return (error_handler_hit_p + ? False + : result); +} + +/* There is no "safe_XF86VidModeGetModeLine" because it fails with an + untrappable I/O error instead of an X error -- so one must call + safe_XF86VidModeGetViewPort first, and assume that both have the + same error condition. Thank you XFree, may I have another. + */ + +#endif /* HAVE_XF86VMODE */ + + static void initialize_screensaver_window_1 (saver_screen_info *ssi) { @@ -1518,7 +1553,7 @@ mouse_screen (saver_info *si) &root_x, &root_y, &win_x, &win_y, &mask)) { if (p->verbose_p) - fprintf (stderr, "%s: mouse is on screen %d\n", + fprintf (stderr, "%s: mouse is on screen %d of %d\n", blurb(), i, si->nscreens); return i; } @@ -1577,9 +1612,9 @@ blank_screen (saver_info *si) { int ev, er; if (!XF86VidModeQueryExtension (si->dpy, &ev, &er) || - !XF86VidModeGetViewPort (si->dpy, i, - &ssi->blank_vp_x, - &ssi->blank_vp_y)) + !safe_XF86VidModeGetViewPort (si->dpy, i, + &ssi->blank_vp_x, + &ssi->blank_vp_y)) ssi->blank_vp_x = ssi->blank_vp_y = -1; } #endif /* HAVE_XF86VMODE */