From http://www.jwz.org/xscreensaver/xscreensaver-5.22.tar.gz
[xscreensaver] / hacks / screenhack.c
index f90289d1edbc929fefe5440f0c5289aa35050627..089e76b44b9dfed76537cd3ae1a52062c2e59cb6 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 1992-2008 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1992-2013 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
@@ -157,6 +157,7 @@ static char *default_defaults[] = {
   "*mono:              false",
   "*installColormap:   false",
   "*doFPS:             false",
+  "*multiSample:       false",
   "*visualID:          default",
   "*windowID:          ",
   "*desktopGrabber:    xscreensaver-getimage %s",
@@ -221,6 +222,8 @@ merge_options (void)
          strcat (newr, oldr);
          *s = newr;
        }
+      else
+        *s = strdup (*s);
   }
 }
 
@@ -442,7 +445,7 @@ screenhack_table_handle_events (Display *dpy,
             ft->reshape_cb (dpy, window, closure,
                             event.xconfigure.width, event.xconfigure.height);
 #ifdef DEBUG_PAIR
-          if (event.xany.window == window2)
+          if (window2 && event.xany.window == window2)
             ft->reshape_cb (dpy, window2, closure2,
                             event.xconfigure.width, event.xconfigure.height);
 #endif
@@ -451,7 +454,7 @@ screenhack_table_handle_events (Display *dpy,
                (! (event.xany.window == window
                    ? ft->event_cb (dpy, window, closure, &event)
 #ifdef DEBUG_PAIR
-                   : event.xany.window == window2
+                   : (window2 && event.xany.window == window2)
                    ? ft->event_cb (dpy, window2, closure2, &event)
 #endif
                    : 0)))
@@ -507,7 +510,7 @@ usleep_and_process_events (Display *dpy,
 static void
 screenhack_do_fps (Display *dpy, Window w, fps_state *fpst, void *closure)
 {
-  fps_compute (fpst, 0);
+  fps_compute (fpst, 0, -1);
   fps_draw (fpst);
 }
 
@@ -572,7 +575,7 @@ run_screenhack_table (Display *dpy,
 
 #ifdef DEBUG_PAIR
   if (window2) ft->free_cb (dpy, window2, closure2);
-  if (window2) fps_free (fpst2);
+  if (fpst2) fps_free (fpst2);
 #endif
 }
 
@@ -724,13 +727,17 @@ main (int argc, char **argv)
   {
     char *v = (char *) strdup(strchr(screensaver_id, ' '));
     char *s1, *s2, *s3, *s4;
+    const char *ot = get_string_resource (dpy, "title", "Title");
     s1 = (char *) strchr(v,  ' '); s1++;
     s2 = (char *) strchr(s1, ' ');
     s3 = (char *) strchr(v,  '('); s3++;
     s4 = (char *) strchr(s3, ')');
     *s2 = 0;
     *s4 = 0;
-    sprintf (version, "%s: from the XScreenSaver %s distribution (%s.)",
+    if (ot && !*ot) ot = 0;
+    sprintf (version, "%.50s%s%s: from the XScreenSaver %s distribution (%s)",
+             (ot ? ot : ""),
+             (ot ? ": " : ""),
             progclass, s1, s3);
     free(v);
   }
@@ -806,6 +813,12 @@ main (int argc, char **argv)
       exit (help_p ? 0 : 1);
     }
 
+  {
+    char **s;
+    for (s = merged_defaults; *s; s++)
+      free(*s);
+  }
+
   free (merged_options);
   free (merged_defaults);
   merged_options = 0;