-/* xscreensaver, Copyright (c) 1991-2003 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1991-2005 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
fflush (stdout);
fflush (stderr);
fprintf (stdout, "\
-xscreensaver %s, copyright (c) 1991-2004 by Jamie Zawinski <jwz@jwz.org>\n\
+xscreensaver %s, copyright (c) 1991-2005 by Jamie Zawinski <jwz@jwz.org>\n\
\n\
All xscreensaver configuration is via the `~/.xscreensaver' file.\n\
Rather than editing that file by hand, just run `xscreensaver-demo':\n\
if (p->verbose_p)
fprintf (stderr,
- "%s %s, copyright (c) 1991-2004 "
+ "%s %s, copyright (c) 1991-2005 "
"by Jamie Zawinski <jwz@jwz.org>.\n",
progname, si->version);
ssi->number = i;
ssi->screen = ScreenOfDisplay (si->dpy, ssi->real_screen_number);
+ ssi->poll_mouse_last_root_x = -1;
+ ssi->poll_mouse_last_root_y = -1;
if (!si->xinerama_p)
{
/* Go around the loop and wait for the next bout of idleness,
or for the init file to change, or for a remote command to
come in, or something.
+
+ But, if locked_p is true, go ahead. This can only happen
+ if we're in "disabled" mode but a "lock" clientmessage came
+ in: in that case, we should go ahead and blank/lock the screen.
*/
- continue;
+ if (!si->locked_p)
+ continue;
}
/* Since we're about to blank the screen, kill the de-race timer,
static void
bogus_clientmessage_warning (saver_info *si, XEvent *event)
{
+ saver_preferences *p = &si->prefs;
char *str = XGetAtomName_safe (si->dpy, event->xclient.message_type);
Window w = event->xclient.window;
char wdesc[255];
int screen = 0;
+ Bool root_p = False;
*wdesc = 0;
for (screen = 0; screen < si->nscreens; screen++)
else if (w == RootWindow (si->dpy, screen))
{
strcpy (wdesc, "root");
+ root_p = True;
break;
}
+ /* If this ClientMessage was sent to the real root window instead of to the
+ xscreensaver window, then it might be intended for someone else who is
+ listening on the root window (e.g., the window manager). So only print
+ the warning if: we are in debug mode; or if the bogus message was
+ actually sent to one of the xscreensaver-created windows.
+ */
+ if (root_p && !p->debug_p)
+ return;
+
if (!*wdesc)
{
XErrorHandler old_handler;
"not compiled with support for locking.",
"locking not enabled.");
#else /* !NO_LOCKING */
- if (p->mode == DONT_BLANK)
- clientmessage_response(si, window, True,
- "LOCK ClientMessage received in DONT_BLANK mode.",
- "screen blanking is currently disabled.");
- else if (si->locking_disabled_p)
+ if (si->locking_disabled_p)
clientmessage_response (si, window, True,
"LOCK ClientMessage received, but locking is disabled.",
"locking not enabled.");
}
else if (type == XA_THROTTLE)
{
+ /* The THROTTLE command is deprecated -- it predates the XDPMS
+ extension. Instead of using -throttle, users should instead
+ just power off the monitor (e.g., "xset dpms force off".)
+ In a few minutes, xscreensaver will notice that the monitor
+ is off, and cease running hacks.
+ */
if (si->throttled_p)
clientmessage_response (si, window, True,
"THROTTLE ClientMessage received, but "
void
check_for_leaks (const char *where)
{
-#ifdef HAVE_SBRK
+#if defined(HAVE_SBRK) && defined(LEAK_PARANOIA)
static unsigned long last_brk = 0;
int b = (unsigned long) sbrk(0);
if (last_brk && last_brk < b)