From http://www.jwz.org/xscreensaver/xscreensaver-5.30.tar.gz
[xscreensaver] / driver / windows.c
index 44cce89faca0141b68fabdfd3b6bf2a754cf2210..29edc82b66b1349fb3a3f6879a83fbd6f69ea4f6 100644 (file)
@@ -1,5 +1,5 @@
 /* windows.c --- turning the screen black; dealing with visuals, virtual roots.
- * xscreensaver, Copyright (c) 1991-2008 Jamie Zawinski <jwz@jwz.org>
+ * xscreensaver, Copyright (c) 1991-2014 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
@@ -286,16 +286,27 @@ grab_keyboard_and_mouse (saver_info *si, Window window, Cursor cursor,
 
 
   /* When should we allow blanking to proceed?  The current theory
-     is that a keyboard grab is manditory; a mouse grab is optional.
+     is that a keyboard grab is mandatory; a mouse grab is optional.
 
      - If we don't have a keyboard grab, then we won't be able to
-       read a password to unlock, so the kbd grab is manditory.
+       read a password to unlock, so the kbd grab is mandatory.
        (We can't conditionalize this on locked_p, because someone
        might run "xscreensaver-command -lock" at any time.)
 
      - If we don't have a mouse grab, then we might not see mouse
        clicks as a signal to unblank -- but we will still see kbd
        activity, so that's not a disaster.
+
+     It has been suggested that we should allow blanking if locking
+     is disabled, and we have a mouse grab but no keyboard grab
+     (that is: kstatus != GrabSuccess &&
+               mstatus == GrabSuccess && 
+               si->locking_disabled_p)
+     That would allow screen blanking (but not locking) while the gdm
+     login screen had the keyboard grabbed, but one would have to use
+     the mouse to unblank.  Keyboard characters would go to the gdm
+     login field without unblanking.  I have not made this change
+     because I'm not completely convinced it is a safe thing to do.
    */
 
   if (kstatus != GrabSuccess)  /* Do not blank without a kbd grab.   */
@@ -385,10 +396,10 @@ ensure_no_screensaver_running (Display *dpy, Screen *screen)
          && type != None)
        {
          unsigned char *id;
-         if (!XGetWindowProperty (dpy, kids[i], XA_SCREENSAVER_ID, 0, 512,
+         if (XGetWindowProperty (dpy, kids[i], XA_SCREENSAVER_ID, 0, 512,
                                   False, XA_STRING, &type, &format, &nitems,
                                   &bytesafter, &id)
-             == Success
+             != Success
              || type == None)
            id = (unsigned char *) "???";
 
@@ -1442,8 +1453,8 @@ resize_screensaver_window (saver_info *si)
             int x, y;
             unsigned int mask;
             XQueryPointer (si->dpy, ssi->screensaver_window, &root, &child,
-                           &ssi->poll_mouse_last_root_x,
-                           &ssi->poll_mouse_last_root_y,
+                           &ssi->last_poll_mouse.root_x,
+                           &ssi->last_poll_mouse.root_y,
                            &x, &y, &mask);
           }
         }
@@ -1686,7 +1697,7 @@ unblank_screen (saver_info *si)
   Bool unfade_p = (si->fading_possible_p && p->unfade_p);
   int i;
 
-  monitor_power_on (si);
+  monitor_power_on (si, True);
   reset_watchdog_timer (si, False);
 
   if (si->demoing_p)