X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=driver%2Fwindows.c;h=694236113b4a1581c6a0300e0084b9e270df9cfc;hb=4cecfc89e5e889c7232693897c06168fb378bd5c;hp=49db1ea7fd482b99f18d690f67a006ff0456a5d8;hpb=cccbddbc4140cf9a06d7d95cc5c0ca36eb5d6e28;p=xscreensaver diff --git a/driver/windows.c b/driver/windows.c index 49db1ea7..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; @@ -175,7 +175,7 @@ static Bool grab_keyboard_and_mouse (saver_info *si, Window window, Cursor cursor, int screen_no) { - Status mstatus, kstatus; + Status mstatus = 0, kstatus = 0; int i; int retries = 4; @@ -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 */