ferguson@cs.rochester.edu (George Ferguson) (09/12/90)
I hacked xloadimage to search for a virtual root window so that it
would work with tvtwm. I basically cut the code from ssetroot.c by
Tom LaStrange in the tvtwm distribution into root.c of the xloadimage
distribution. I figured others might be interested so here it is. It
has only been very briefly tested, but seems to work for the common case.
Unshar the file "changes" and apply it with "patch <changes". Enjoy.
George
George Ferguson ARPA: ferguson@cs.rochester.edu
University of Rochester UUCP: {decvax,rutgers}!rochester!ferguson
Rochester NY 14627 VOX: (716) 275-2527
#! /bin/sh
# This is a shell archive. Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file". To overwrite existing
# files, type "sh file -c". You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g.. If this archive is complete, you
# will see the following message at the end:
# "End of shell archive."
# Contents: changes
# Wrapped by ferguson@magenta.cs.rochester.edu on Tue Sep 11 17:24:36 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'changes' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'changes'\"
else
echo shar: Extracting \"'changes'\" \(2507 characters\)
sed "s/^X//" >'changes' <<'END_OF_FILE'
X*** root.c.old Tue Sep 11 17:09:30 1990
X--- root.c Tue Sep 11 17:16:35 1990
X***************
X*** 93,98 ****
X--- 93,109 ----
X }
X }
X
X+ /*
X+ * Modified to search for a virtual root window based on code from
X+ * Tom LaStrange (toml@solbourne.com) in the tvtwm distribution.
X+ * I doubt that I got all the other possible places changes are needed,
X+ * especially w.r.t. colormaps.
X+ *
X+ * George Ferguson, ferguson@cs.rochester.edu, 11 Sep 1990.
X+ */
X+
X+ static Window getRootWindow();
X+
X void imageOnRoot(disp, scrn, image, verbose)
X Display *disp;
X int scrn;
X***************
X*** 100,109 ****
X unsigned int verbose;
X { Pixmap pixmap;
X Colormap xcmap;
X
X
X! freePrevious(disp, RootWindow(disp, scrn));
X
X if (! sendImageToX(disp, scrn, DefaultVisual(disp, scrn), image,
X &pixmap, &xcmap, verbose))
X exit(1);
X--- 111,123 ----
X unsigned int verbose;
X { Pixmap pixmap;
X Colormap xcmap;
X+ Window root;
X
X
X! root = getRootWindow(disp,scrn);
X
X+ freePrevious(disp, root);
X+
X if (! sendImageToX(disp, scrn, DefaultVisual(disp, scrn), image,
X &pixmap, &xcmap, verbose))
X exit(1);
X***************
X*** 117,124 ****
X exit(1);
X }
X
X! XSetWindowBackgroundPixmap(disp, RootWindow(disp, scrn), pixmap);
X! XClearWindow(disp, RootWindow(disp, scrn));
X XFreePixmap(disp, pixmap);
X! preserveResource(disp, RootWindow(disp, scrn));
X }
X--- 131,167 ----
X exit(1);
X }
X
X! XSetWindowBackgroundPixmap(disp, root, pixmap);
X! XClearWindow(disp, root);
X XFreePixmap(disp, pixmap);
X! preserveResource(disp, root);
X! }
X!
X! /*
X! * This is more or less directly from ssetroot.c in the tvtwm distribution.
X! */
X! static Window
X! getRootWindow(disp,scrn)
X! Display *disp;
X! int scrn;
X! {
X! Atom __SWM_VROOT,actual_type;
X! Window root,rootReturn,parentReturn,*children,*newRoot;
X! int numChildren,i,actual_format;
X! long nitems, bytesafter;
X!
X!
X! root = RootWindow(disp,scrn);
X! __SWM_VROOT = XInternAtom(disp,"__SWM_VROOT",False);
X! XQueryTree(disp,root,&rootReturn,&parentReturn,&children,&numChildren);
X! for (i = 0; i < numChildren; i++) {
X! newRoot = NULL;
X! if (XGetWindowProperty (disp, children[i], __SWM_VROOT,0,1,
X! False,XA_WINDOW,&actual_type,&actual_format,&nitems,&bytesafter,
X! (unsigned char **)&newRoot) == Success && newRoot) {
X! root = *newRoot;
X! break;
X! }
X! }
X! return(root);
X }
END_OF_FILE
if test 2507 -ne `wc -c <'changes'`; then
echo shar: \"'changes'\" unpacked with wrong size!
fi
# end of 'changes'
fi
echo shar: End of shell archive.
exit 0
--
George Ferguson ARPA: ferguson@cs.rochester.edu
University of Rochester UUCP: {decvax,rutgers}!rochester!ferguson
Rochester NY 14627 VOX: (716) 275-2527