X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fscreenhack.c;h=e2becbe4b4ac652b34cf20aaa4667bac4e8403ac;hb=585e1a6717d1dd9b90fbb53acaaae82106354d33;hp=786d24b4cc5ddf95a3f02eb4186c5c5fecedb0e8;hpb=72c1f4c1dc6ab07fe121a327ff1c30bf51ef74c1;p=xscreensaver diff --git a/hacks/screenhack.c b/hacks/screenhack.c index 786d24b4..e2becbe4 100644 --- a/hacks/screenhack.c +++ b/hacks/screenhack.c @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright (c) 1992, 1995, 1997, 1998 +/* xscreensaver, Copyright (c) 1992, 1995, 1997, 1998, 2001 * Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its @@ -77,7 +77,6 @@ static XrmOptionDescRec default_options [] = { { "-install", ".installColormap", XrmoptionNoArg, "True" }, { "-noinstall",".installColormap", XrmoptionNoArg, "False" }, { "-visual", ".visualID", XrmoptionSepArg, 0 }, - { "-window-id", ".windowID", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; @@ -87,7 +86,7 @@ static char *default_defaults[] = { "*mono: false", "*installColormap: false", "*visualID: default", - "*windowID: ", + "*desktopGrabber: xscreensaver-getimage %s", 0 }; @@ -276,9 +275,9 @@ pick_visual (Screen *screen) /* Notice when the user has requested a different visual or colormap - on a pre-existing window (e.g., "-root -visual truecolor" or - "-window-id 0x2c00001 -install") and complain, since when drawing - on an existing window, we have no choice about these things. + on a pre-existing window (e.g., "-root -visual truecolor") and + complain, since when drawing on an existing window, we have no + choice about these things. */ static void visual_warning (Screen *screen, Window window, Visual *visual, Colormap cmap, @@ -301,7 +300,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 +328,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 */ } @@ -333,7 +346,6 @@ main (int argc, char **argv) Visual *visual; Colormap cmap; Bool root_p; - Window on_window = 0; XEvent event; Boolean dont_clear /*, dont_map */; char version[255]; @@ -427,24 +439,7 @@ main (int argc, char **argv) root_p = get_boolean_resource ("root", "Boolean"); - { - char *s = get_string_resource ("windowID", "WindowID"); - if (s && *s) - on_window = get_integer_resource ("windowID", "WindowID"); - if (s) free (s); - } - - if (on_window) - { - XWindowAttributes xgwa; - window = (Window) on_window; - XtDestroyWidget (toplevel); - XGetWindowAttributes (dpy, window, &xgwa); - cmap = xgwa.colormap; - visual = xgwa.visual; - visual_warning (screen, window, visual, cmap, True); - } - else if (root_p) + if (root_p) { XWindowAttributes xgwa; window = RootWindowOfScreen (XtScreen (toplevel)); @@ -459,6 +454,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 +486,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 +495,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); @@ -546,12 +550,18 @@ main (int argc, char **argv) XClearWindow (dpy, window); } - if (!root_p && !on_window) + if (!root_p) /* wait for it to be mapped */ 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; }