-/* xscreensaver, Copyright (c) 1992, 1993, 1994, 1997
- * Jamie Zawinski <jwz@netscape.com>
+/* xscreensaver, Copyright (c) 1992, 1993, 1994, 1997, 1998
+ * 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
if (error->error_code == BadWindow || error->error_code == BadDrawable)
return 0;
else if (!old_ehandler)
- abort();
+ {
+ abort();
+ return 0;
+ }
else
return (*old_ehandler) (dpy, error);
}
XWindowAttributes xgwa2;
XGetWindowAttributes (dpy, window, &xgwa2);
fprintf(stderr, "%s: ", progname);
- describe_visual(stderr, screen, xgwa2.visual);
+ describe_visual(stderr, screen, xgwa2.visual, ####);
+ fprintf (stderr, "\n");
}
#endif /* DEBUG */
#endif /* DEBUG */
copy_default_colormap_contents (screen, xgwa.colormap, xgwa.visual);
raise_window(dpy, window, saver_p);
+
+ /* Generally it's bad news to call XInstallColormap() explicitly,
+ but this file does a lot of sleazy stuff already... This is to
+ make sure that the window's colormap is installed, even in the
+ case where the window is OverrideRedirect. */
+ if (xgwa.colormap) XInstallColormap (dpy, xgwa.colormap);
+ XSync (dpy, False);
}
}
else /* root_p */
return False;
}
- /* Uh, this can't be right, can it? But it's necessary. X sucks.
- If the visual is of depth 24, but the image came back as depth 32,
- hack it to be 24 lest we get a BadMatch from XPutImage. (I presume
- I'm expected to look at the server's pixmap formats or some such
- nonsense... but fuck it.)
+ /* XReadDisplay tends to LIE about the depth of the image it read.
+ It is returning an XImage which has `depth' and `bits_per_pixel'
+ confused!
+
+ That is, on a 24-bit display, where all visuals claim depth 24, and
+ where XGetImage would return an XImage with depth 24, and where
+ XPutImage will get a BadMatch with images that are not depth 24,
+ XReadDisplay is returning images with depth 32! Fuckwits!
+
+ So if the visual is of depth 24, but the image came back as depth 32,
+ hack it to be 24 lest we get a BadMatch from XPutImage.
+
+ I wonder what happens on an 8-bit SGI... Probably it still returns
+ an image claiming depth 32? Certainly it can't be 8. So, let's just
+ smash it to 32...
*/
- if (xgwa.depth == 24 && image->depth == 32)
+ if (image->depth == 32 /* && xgwa.depth == 24 */ )
image->depth = 24;
/* If the visual of the window/pixmap into which we're going to draw is