X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=driver%2Fxscreensaver.c;h=cb41a4942f4351d059971b4562cf6b1871f3df15;hb=0d6b320def9180cf907ceaed56b23a972a11b757;hp=ab39b84e62341db668725061a05b382b7e0bc23c;hpb=ffd8c0873576a9e3065696a624dce6b766b77062;p=xscreensaver diff --git a/driver/xscreensaver.c b/driver/xscreensaver.c index ab39b84e..cb41a494 100644 --- a/driver/xscreensaver.c +++ b/driver/xscreensaver.c @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright (c) 1991-2003 Jamie Zawinski +/* xscreensaver, Copyright (c) 1991-2005 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -255,7 +255,7 @@ do_help (saver_info *si) fflush (stdout); fflush (stderr); fprintf (stdout, "\ -xscreensaver %s, copyright (c) 1991-2004 by Jamie Zawinski \n\ +xscreensaver %s, copyright (c) 1991-2005 by Jamie Zawinski \n\ \n\ All xscreensaver configuration is via the `~/.xscreensaver' file.\n\ Rather than editing that file by hand, just run `xscreensaver-demo':\n\ @@ -719,7 +719,7 @@ print_banner (saver_info *si) if (p->verbose_p) fprintf (stderr, - "%s %s, copyright (c) 1991-2004 " + "%s %s, copyright (c) 1991-2005 " "by Jamie Zawinski .\n", progname, si->version); @@ -904,6 +904,8 @@ initialize_per_screen_info (saver_info *si, Widget toplevel_shell) 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) { @@ -1190,8 +1192,13 @@ main_loop (saver_info *si) /* 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, @@ -1591,10 +1598,12 @@ clientmessage_response (saver_info *si, Window w, Bool error, 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++) @@ -1606,9 +1615,19 @@ bogus_clientmessage_warning (saver_info *si, XEvent *event) 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; @@ -1902,11 +1921,7 @@ handle_clientmessage (saver_info *si, XEvent *event, Bool until_idle_p) "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."); @@ -1950,6 +1965,12 @@ handle_clientmessage (saver_info *si, XEvent *event, Bool until_idle_p) } 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 " @@ -2258,7 +2279,7 @@ display_is_on_console_p (saver_info *si) 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)