From http://www.jwz.org/xscreensaver/xscreensaver-5.27.tar.gz
[xscreensaver] / driver / lock.c
index 3a84355a54c0f748a743a126466f94831e812e63..564998450828f78af6d9f9375b72795f300c6bf9 100644 (file)
@@ -1,5 +1,5 @@
 /* lock.c --- handling the password dialog for locking-mode.
- * xscreensaver, Copyright (c) 1993-2011 Jamie Zawinski <jwz@jwz.org>
+ * xscreensaver, Copyright (c) 1993-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
@@ -487,6 +487,11 @@ make_passwd_window (saver_info *si,
    * room for the dialog to grow without going off the edge of the screen. */
   max_string_width_px *= 0.75;
 
+  if (!info_msg && senescent_p())
+    info_msg = ("\n"
+                "This version of XScreenSaver\n"
+                "is very old! Please upgrade!\n");
+
   pw->info_label = mlstring_new(info_msg ? info_msg : pw->body_label,
                                pw->label_font, max_string_width_px);
 
@@ -1417,6 +1422,8 @@ destroy_passwd_window (saver_info *si)
 }
 
 
+#if defined(HAVE_XF86MISCSETGRABKEYSSTATE) || defined(HAVE_XF86VMODE)
+
 static Bool error_handler_hit_p = False;
 
 static int
@@ -1426,6 +1433,8 @@ ignore_all_errors_ehandler (Display *dpy, XErrorEvent *error)
   return 0;
 }
 
+#endif /* HAVE_XF86MISCSETGRABKEYSSTATE || HAVE_XF86VMODE */
+
 
 #ifdef HAVE_XHPDISABLERESET
 /* This function enables and disables the C-Sh-Reset hot-key, which
@@ -1734,6 +1743,9 @@ handle_passwd_key (saver_info *si, XKeyEvent *event)
   /* XLookupString may return more than one character via XRebindKeysym;
      and on some systems it returns multi-byte UTF-8 characters (contrary
      to its documentation, which says it returns only Latin1.)
+
+     It seems to only do so, however, if setlocale() has been called.
+     See the code inside ENABLE_NLS in xscreensaver.c.
    */
   int decoded_size = XLookupString (event, (char *)decoded, sizeof(decoded),
                                     &keysym, compose_status);
@@ -1876,6 +1888,7 @@ passwd_event_loop (saver_info *si)
   } event;
 
   passwd_animate_timer ((XtPointer) si, 0);
+  reset_watchdog_timer (si, False);    /* Disable watchdog while dialog up */
 
   while (si->unlock_state == ul_read)
     {
@@ -1968,6 +1981,8 @@ passwd_event_loop (saver_info *si)
          ;
       }
     }
+
+  reset_watchdog_timer (si, True);     /* Re-enable watchdog */
 }