[alt.sources] xloadimage for tvtwm

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