X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?p=xscreensaver;a=blobdiff_plain;f=utils%2Fvroot.h;h=ef41073a96aab0b797dbf32bb8c1d47b60e693a7;hp=ba3e5d29fa7f7581235904c0e7db493fd903ef13;hb=bbd0773f2adde4927a6196361d4061e70bf48cd9;hpb=6a1da724858673ac40aa13a9612340d8bed8c7b9 diff --git a/utils/vroot.h b/utils/vroot.h index ba3e5d29..ef41073a 100644 --- a/utils/vroot.h +++ b/utils/vroot.h @@ -1,3 +1,4 @@ +/* -*- Mode: C; tab-width: 2 -*- */ /*****************************************************************************/ /** Copyright 1991 by Andreas Stolcke **/ /** Copyright 1990 by Solbourne Computer Inc. **/ @@ -52,13 +53,23 @@ * - replaced all NULL's with properly cast 0's, 5/6/91 * - free children list (suggested by Mark Martin ), 5/16/91 * - include X11/Xlib.h and support RootWindowOfScreen, too 9/17/91 + * + * Jamie Zawinski , 28-Apr-1997 + * - use ANSI C + * + * Jamie Zawinski , 3-Sep-2003 + * - if the environment variable "XSCREENSAVER_WINDOW" is set, use that + * as the root window instead of searching for __SWM_VROOT. */ #ifndef _VROOT_H_ #define _VROOT_H_ +#define _XSCREENSAVER_VROOT_H_ #if !defined(lint) && !defined(SABER) -static const char vroot_rcsid[] = "#Id: vroot.h,v 1.4 1991/09/30 19:23:16 stolcke Exp stolcke #"; +static const char vroot_rcsid[] = + "#Id: vroot.h,v 1.5 2003/09/04 01:04:38 jwz Exp #" "\n" + "#Id: vroot.h,v 1.4 1991/09/30 19:23:16 stolcke Exp stolcke #"; #endif #include @@ -82,6 +93,19 @@ VirtualRootWindowOfScreen(screen) Screen *screen; Window rootReturn, parentReturn, *children; unsigned int numChildren; + /* first check for a hex or decimal window ID in the environment */ + const char *xss_id = getenv("XSCREENSAVER_WINDOW"); + if (xss_id && *xss_id) { + unsigned long id = 0; + char c; + if (1 == sscanf (xss_id, " 0x%lx %c", &id, &c) || + 1 == sscanf (xss_id, " %lu %c", &id, &c)) { + root = (Window) id; + save_screen = screen; + return root; + } + } + root = RootWindowOfScreen(screen); /* go look for a virtual root */