X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=driver%2Fxscreensaver.c;h=cb41a4942f4351d059971b4562cf6b1871f3df15;hb=0d6b320def9180cf907ceaed56b23a972a11b757;hp=61eb69c5267c5ee4a514ae40865d3c377ba5d541;hpb=2d04c4f22466851aedb6ed0f2919d148f726b889;p=xscreensaver diff --git a/driver/xscreensaver.c b/driver/xscreensaver.c index 61eb69c5..cb41a494 100644 --- a/driver/xscreensaver.c +++ b/driver/xscreensaver.c @@ -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."); @@ -2264,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)