Put back Robert de Bath's second level of bell overload tracking. It
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Mon, 16 Apr 2001 21:29:12 +0000 (21:29 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Mon, 16 Apr 2001 21:29:12 +0000 (21:29 +0000)
had a useful purpose: when primary overload handling is disabled, it
prevents MessageBeep calls overloading the program, because they
don't cancel each other like async PlaySounds do.

git-svn-id: svn://svn.tartarus.org/sgt/putty@1056 cda61777-01e9-0310-a592-d414129be87e

window.c

index 4c4360c..2982896 100644 (file)
--- a/window.c
+++ b/window.c
@@ -2663,7 +2663,21 @@ void fatalbox(char *fmt, ...) {
  */
 void beep(int mode) {
     if (mode == BELL_DEFAULT) {
+       /*
+        * For MessageBeep style bells, we want to be careful of
+        * timing, because they don't have the nice property of
+        * PlaySound bells that each one cancels the previous
+        * active one. So we limit the rate to one per 50ms or so.
+        */
+       static long lastbeep = 0;
+       long now, beepdiff;
+
+       now = GetTickCount();
+       beepdiff = now - lastbeep;
+       if (beepdiff >= 0 && beepdiff < 50)
+           return;
        MessageBeep(MB_OK);
+       lastbeep = now;
     } else if (mode == BELL_WAVEFILE) {
        if (!PlaySound(cfg.bell_wavefile, NULL, SND_ASYNC | SND_FILENAME)) {
            char buf[sizeof(cfg.bell_wavefile)+80];