}
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;
}
}
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;
}
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;
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;
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;
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,
if (bugp)
fprintf(real_stderr,
"%s: see http://www.jwz.org/xscreensaver/bugs.html\n"
- "\t\tfor bug reporting information.\n\n",
+ "\t\t\tfor bug reporting information.\n\n",
blurb());
# if defined(HAVE_GETCWD)
XA_SCREENSAVER_STATUS,
XA_INTEGER, 32, PropModeReplace,
(unsigned char *) status, size);
+ free (status);
}
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;
}
+#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)
{
&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;
}
{
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 */