http://packetstorm.tacticalflex.com/UNIX/admin/xscreensaver-3.27.tar.gz
[xscreensaver] / hacks / screenhack.c
index 786d24b4cc5ddf95a3f02eb4186c5c5fecedb0e8..c3c8ad4aa713280b5809c91e3253c2a29d0ff540 100644 (file)
@@ -301,7 +301,16 @@ visual_warning (Screen *screen, Window window, Visual *visual, Colormap cmap,
 
   if (visual_string && *visual_string)
     {
-      if (visual != desired_visual)
+      char *s;
+      for (s = visual_string; *s; s++)
+        if (isupper (*s)) *s = _tolower (*s);
+
+      if (!strcmp (visual_string, "default") ||
+          !strcmp (visual_string, "default") ||
+          !strcmp (visual_string, "best"))
+        /* don't warn about these, just silently DWIM. */
+        ;
+      else if (visual != desired_visual)
         {
           fprintf (stderr, "%s: ignoring `-visual %s' because of `%s'.\n",
                    progname, visual_string, why);
@@ -320,6 +329,11 @@ visual_warning (Screen *screen, Window window, Visual *visual, Colormap cmap,
       fprintf (stderr, "%s: using %s's colormap 0x%x.\n",
                progname, win, (unsigned long) cmap);
     }
+
+# ifdef USE_GL
+  if (!validate_gl_visual (stderr, screen, win, visual))
+    exit (1);
+# endif /* USE_GL */
 }
 
 
@@ -459,6 +473,11 @@ main (int argc, char **argv)
       Boolean def_visual_p;
       visual = pick_visual (screen);
 
+# ifdef USE_GL
+      if (!validate_gl_visual (stderr, screen, "window", visual))
+        exit (1);
+# endif /* USE_GL */
+
       if (toplevel->core.width <= 0)
        toplevel->core.width = 600;
       if (toplevel->core.height <= 0)
@@ -486,6 +505,7 @@ main (int argc, char **argv)
                                    XtNcolormap, cmap,
                                    XtNbackground, (Pixel) bg,
                                    XtNborderColor, (Pixel) bd,
+                                   XtNinput, True,  /* for WM_HINTS */
                                    0);
          XtDestroyWidget (toplevel);
          toplevel = new;
@@ -494,7 +514,10 @@ main (int argc, char **argv)
        }
       else
        {
-         XtVaSetValues (toplevel, XtNmappedWhenManaged, False, 0);
+         XtVaSetValues (toplevel,
+                         XtNmappedWhenManaged, False,
+                         XtNinput, True,  /* for WM_HINTS */
+                         0);
          XtRealizeWidget (toplevel);
          window = XtWindow (toplevel);
 
@@ -551,7 +574,13 @@ main (int argc, char **argv)
     XIfEvent (dpy, &event, MapNotify_event_p, (XPointer) window);
 
   XSync (dpy, False);
-  srandom ((int) time ((time_t *) 0));
+
+  /* This is the one and only place that the random-number generator is
+     seeded in any screenhack.  You do not need to seed the RNG again,
+     it is done for you before your code is invoked. */
+# undef ya_rand_init
+  ya_rand_init (0);
+
   screenhack (dpy, window); /* doesn't return */
   return 0;
 }