.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium
.\"
.\" Permission is hereby granted, free of charge, to any person obtaining
.\" a copy of this software and associated documentation files (the
.\" "Software"), to deal in the Software without restriction, including
.\" without limitation the rights to use, copy, modify, merge, publish,
.\" distribute, sublicense, and/or sell copies of the Software, and to
.\" permit persons to whom the Software is furnished to do so, subject to
.\" the following conditions:
.\"
.\" The above copyright notice and this permission notice shall be included
.\" in all copies or substantial portions of the Software.
.\"
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR
.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
.\" OTHER DEALINGS IN THE SOFTWARE.
.\"
.\" Except as contained in this notice, the name of the X Consortium shall
.\" not be used in advertising or otherwise to promote the sale, use or
.\" other dealings in this Software without prior written authorization
.\" from the X Consortium.
.\"
.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by
.\" Digital Equipment Corporation
.\"
.\" Portions Copyright \(co 1990, 1991 by
.\" Tektronix, Inc.
.\"
.\" Permission to use, copy, modify and distribute this documentation for
.\" any purpose and without fee is hereby granted, provided that the above
.\" copyright notice appears in all copies and that both that copyright notice
.\" and this permission notice appear in all copies, and that the names of
.\" Digital and Tektronix not be used in in advertising or publicity pertaining
.\" to this documentation without specific, written prior permission.
.\" Digital and Tektronix makes no representations about the suitability
.\" of this documentation for any purpose.
.\" It is provided ``as is'' without express or implied warranty.
.\" 
\&
.sp 1
.ce 3
\s+1\fBChapter 3\fP\s-1

\s+1\fBWindow Functions\fP\s-1
.sp 2
.nr H1 3
.nr H2 0
.nr H3 0
.nr H4 0
.nr H5 0
.na
.LP
.XS
Chapter 3: Window Functions
.XE
In the X Window System, 
a window is a rectangular area on the screen that lets you
view graphic output.
Client applications
can display overlapping and nested windows on one or more
screens that are driven by X servers on one or more machines.
Clients who want to create windows must first 
connect their program to the X server
by calling 
.PN XOpenDisplay .
This chapter begins with a discussion of 
visual types and window attributes.
The chapter continues with a discussion of the Xlib functions you can use to:
.IP \(bu 5
Create windows 
.IP \(bu 5
Destroy windows
.IP \(bu 5
Map windows
.IP \(bu 5
Unmap windows
.IP \(bu 5
Configure windows
.IP \(bu 5
Change window stacking order
.IP \(bu 5
Change window attributes
.LP
This chapter also identifies the window actions that may generate events.
.LP
Note that it is vital that your application conform to the
established conventions for communicating with window managers
for it to work well with the various window managers in use (see section 14.1).
Toolkits generally adhere to these conventions for you,
relieving you of the burden.
Toolkits also often supersede many functions in this chapter
with versions of their own.
For more information,
refer to the documentation for the toolkit that you are using.
.NH 2
Visual Types
.XS
\*(SN Visual Types
.XE
.LP
.IN "Visual Type" "" "@DEF@"
On some display hardware, 
it may be possible to deal with color resources in more than one way.
For example, you may be able to deal with a screen of either 12-bit depth
with arbitrary mapping of pixel to color (pseudo-color) or 24-bit depth
with 8 bits of the pixel dedicated to each of red, green, and blue.
These different ways of dealing with the visual aspects of the screen
are called visuals.
For each screen of the display, there may be a list of valid visual types
supported at different depths of the screen.
Because default windows and visual types are defined for each screen,
most simple applications need not deal with this complexity.
Xlib provides macros and functions that return the default root window, 
the default depth of the default root window, and the default visual type
(see sections 2.2.1 and 16.7).
.LP
Xlib uses an opaque 
.PN Visual 
.IN "Visual" "" "@DEF@"
structure that contains information about the possible color mapping.
The visual utility functions (see section 16.7) use an
.PN XVisualInfo
structure to return this information to an application.
The members of this structure pertinent to this discussion are class, red_mask,
green_mask, blue_mask, bits_per_rgb, and colormap_size.
The class member specifies one of the possible visual classes of the screen
and can be 
.IN "Visual Classes" "StaticGray"
.IN "Visual Classes" "StaticColor"
.IN "Visual Classes" "TrueColor"
.IN "Visual Classes" "StaticColor"
.IN "Visual Classes" "GrayScale"
.IN "Visual Classes" "PseudoColor"
.PN StaticGray ,
.PN StaticColor ,
.PN TrueColor ,
.PN GrayScale ,
.PN PseudoColor ,
or
.PN DirectColor .
.LP
The following concepts may serve to make the explanation of
visual types clearer. 
The screen can be color or grayscale,
can have a colormap that is writable or read-only,
and can also have a colormap whose indices are decomposed into separate 
RGB pieces, provided one is not on a grayscale screen.
This leads to the following diagram:
.LP
.DS
.TS
center;
  c   c   s   c   s
  c   c   c   c   c
| c | c | c | c | c |.
	Color	Gray-scale
	R/O	R/W	R/O	R/W
_
Undecomposed	Static	Pseudo	Static	Gray
Colormap	Color	Color	Gray	Scale
_
.T&
| c | c | c |.
Decomposed	True	Direct
Colormap	Color	Color
_	_	_
.TE
.DE
.LP
Conceptually, 
as each pixel is read out of video memory for display on the screen,
it goes through a look-up stage by indexing into a colormap.
Colormaps can be manipulated arbitrarily on some hardware, 
in limited ways on other hardware, and not at all on other hardware.  
The visual types affect the colormap and 
the RGB values in the following ways:
.LP
.IP \(bu 5
For 
.PN PseudoColor , 
a pixel value indexes a colormap to produce
independent RGB values, and the RGB values can be changed dynamically.
.IP \(bu 5
.PN GrayScale 
is treated the same way as 
.PN PseudoColor  
except that the primary that drives the screen is undefined. 
Thus, the client should always store the
same value for red, green, and blue in the colormaps.  
.IP \(bu 5
For 
.PN DirectColor ,
a pixel value is decomposed into separate RGB subfields, and each
subfield separately indexes the colormap for the corresponding value.
The RGB values can be changed dynamically.  
.IP \(bu 5
.PN TrueColor
is treated the same way as 
.PN DirectColor 
except that the colormap has predefined, read-only RGB values.
These RGB values are server dependent but provide linear or near-linear
ramps in each primary.  
.IP \(bu 5
.PN StaticColor
is treated the same way as 
.PN PseudoColor 
except that the colormap has predefined, 
read-only, server-dependent RGB values.
.IP \(bu 5
.PN StaticGray 
is treated the same way as 
.PN StaticColor 
except that the RGB values are equal for any single pixel
value, thus resulting in shades of gray.  
.PN StaticGray 
with a two-entry
colormap can be thought of as monochrome.
.LP
The red_mask, green_mask, and blue_mask members are only defined for
.PN DirectColor
and 
.PN TrueColor . 
Each has one contiguous set of bits with no
intersections.
The bits_per_rgb member specifies the log base 2 of the
number of distinct color values (individually) of red, green, and blue.
Actual RGB values are unsigned 16-bit numbers.
The colormap_size member defines the number of available colormap entries
in a newly created colormap.  
For 
.PN DirectColor 
and 
.PN TrueColor , 
this is the size of an individual pixel subfield.
.sp
.LP
To obtain the visual ID from a 
.PN Visual ,
use
.PN XVisualIDFromVisual .
.IN "XVisualIDFromVisual" "" "@DEF@"
.sM
.FD 0
VisualID XVisualIDFromVisual\^(\^\fIvisual\fP\^)
.br
       Visual *\^\fIvisual\fP\^;
.FN
.IP \fIvisual\fP 1i
Specifies the visual type.
.LP
.eM
The
.PN XVisualIDFromVisual
function returns the visual ID for the specified visual type.
.NH 2
Window Attributes
.XS
\*(SN Window Attributes
.XE
.LP
.IN "Window"
.IN "Window" "attributes"
All 
.PN InputOutput
windows have a border width of zero or more pixels, an optional background, 
an event suppression mask (which suppresses propagation of events from 
children), and a property list (see section 4.3).
The window border and background can be a solid color or a pattern, called
a tile.
All windows except the root have a parent and are clipped by their parent.
If a window is stacked on top of another window, it obscures that other
window for the purpose of input.
If a window has a background (almost all do), it obscures the other
window for purposes of output.
Attempts to output to the obscured area do nothing, 
and no input events (for example, pointer motion) are generated for the 
obscured area.
.LP
Windows also have associated property lists (see section 4.3).
.LP
Both
.PN InputOutput
and
.PN InputOnly
windows have the following common attributes,
which are the only attributes of an
.PN InputOnly
window:
.IP \(bu 5
win-gravity
.IP \(bu 5
event-mask
.IP \(bu 5
do-not-propagate-mask
.IP \(bu 5
override-redirect
.IP \(bu 5
cursor
.LP
If you specify any other attributes for an
.PN InputOnly
window,
a
.PN BadMatch
error results.
.LP
.PN InputOnly
windows are used for controlling input events in situations where
.PN InputOutput
windows are unnecessary.
.PN InputOnly
windows are invisible; can only be used to control such things as
cursors, input event generation, and grabbing;
and cannot be used in any graphics requests.
Note that
.PN InputOnly
windows cannot have
.PN InputOutput
windows as inferiors.
.LP
Windows have borders of a programmable width and pattern
as well as a background pattern or tile.
.IN "Tile" "pixmaps"
Pixel values can be used for solid colors.
.IN "Resource IDs" "freeing"
.IN "Freeing" "resources"
The background and border pixmaps can be destroyed immediately after
creating the window if no further explicit references to them
are to be made.
.IN "Tile" "mode" 
The pattern can either be relative to the parent 
or absolute.
If
.PN ParentRelative ,
the parent's background is used.
.LP
When windows are first created, 
they are not visible (not mapped) on the screen.
Any output to a window that is not visible on the screen 
and that does not have backing store will be discarded.
.IN "Window" "mapping"
An application may wish to create a window long before it is
mapped to the screen.
When a window is eventually mapped to the screen 
(using
.PN XMapWindow ),
.IN "XMapWindow"
the X server generates an 
.PN Expose 
event for the window if backing store has not been maintained.
.LP
A window manager can override your choice of size, 
border width, and position for a top-level window.
Your program must be prepared to use the actual size and position
of the top window.
It is not acceptable for a client application to resize itself
unless in direct response to a human command to do so.
Instead, either your program should use the space given to it,
or if the space is too small for any useful work, your program
might ask the user to resize the window.
The border of your top-level window is considered fair game 
for window managers.
.LP
To set an attribute of a window,
set the appropriate member of the
.PN XSetWindowAttributes
structure and OR in the corresponding value bitmask in your subsequent calls to
.PN XCreateWindow
and
.PN XChangeWindowAttributes ,
or use one of the other convenience functions that set the appropriate 
attribute.
The symbols for the value mask bits and the
.PN XSetWindowAttributes
structure are:
.sM
.LP
/* Window attribute value mask bits */
.TS
lw(.5i) lw(2.5i) lw(.8i).
T{
#define
T}	T{
.PN CWBackPixmap
T}	T{
(1L<<0)
T}
T{
#define
T}	T{
.PN CWBackPixel
T}	T{
(1L<<1)
T}
T{
#define
T}	T{
.PN CWBorderPixmap
T}	T{
(1L<<2)
T}
T{
#define
T}	T{
.PN CWBorderPixel
T}	T{
(1L<<3)
T}
T{
#define
T}	T{
.PN CWBitGravity
T}	T{
(1L<<4)
T}
T{
#define
T}	T{
.PN CWWinGravity
T}	T{
(1L<<5)
T}
T{
#define
T}	T{
.PN CWBackingStore
T}	T{
(1L<<6)
T}
T{
#define
T}	T{
.PN CWBackingPlanes
T}	T{
(1L<<7)
T}
T{
#define
T}	T{
.PN CWBackingPixel
T}	T{
(1L<<8)
T}
T{
#define
T}	T{
.PN CWOverrideRedirect
T}	T{
(1L<<9)
T}
T{
#define
T}	T{
.PN CWSaveUnder
T}	T{
(1L<<10)
T}
T{
#define
T}	T{
.PN CWEventMask
T}	T{
(1L<<11)
T}
T{
#define
T}	T{
.PN CWDontPropagate
T}	T{
(1L<<12)
T}
T{
#define
T}	T{
.PN CWColormap
T}	T{
(1L<<13)
T}
T{
#define
T}	T{
.PN CWCursor
T}	T{
(1L<<14)
T}
.TE
.IN "XSetWindowAttributes" "" "@DEF@"
.Ds 0
.TA .5i 3i
.ta .5i 3i
/* Values */

typedef struct {
	Pixmap background_pixmap;	/* background, None, or ParentRelative */
	unsigned long background_pixel;	/* background pixel */
	Pixmap border_pixmap;		/* border of the window or CopyFromParent */
	unsigned long border_pixel;	/* border pixel value */
	int bit_gravity;	/* one of bit gravity values */
	int win_gravity;	/* one of the window gravity values */
	int backing_store;	/* NotUseful, WhenMapped, Always */
	unsigned long backing_planes;	/* planes to be preserved if possible */
	unsigned long backing_pixel;	/* value to use in restoring planes */
	Bool save_under;	/* should bits under be saved? (popups) */
	long event_mask;	/* set of events that should be saved */
	long do_not_propagate_mask;	/* set of events that should not propagate */
	Bool override_redirect;	/* boolean value for override_redirect */
	Colormap colormap;	/* color map to be associated with window */
	Cursor cursor;		/* cursor to be displayed (or None) */
} XSetWindowAttributes;
.De
.LP
.eM
The following lists the defaults for each window attribute and indicates
whether the attribute is applicable to
.PN InputOutput
and
.PN InputOnly
windows:
.TS H
l l l l
lw(1.4i) lw(1.3i) cw(.9i) cw(.8i).
_
.sp 6p
T{
.B Attribute
T}	T{
.B Default 
T}	T{
.PN InputOutput
T}	T{
.PN InputOnly
T}
.sp 6p
_
.sp 6p
.TH
.R
T{
background-pixmap
T}	T{
.PN None
T}	T{
Yes
T}	T{
No
T}
background-pixel	Undefined	Yes	No
T{
border-pixmap
T}	T{
.PN CopyFromParent
T}	T{
Yes
T}	T{
No
T}
border-pixel	Undefined	Yes	No
T{
bit-gravity
T}	T{
.PN ForgetGravity
T}	T{
Yes
T}	T{
No
T}
T{
win-gravity
T}	T{
.PN NorthWestGravity
T}	T{
Yes
T}	T{
Yes
T}
T{
backing-store
T}	T{
.PN NotUseful
T}	T{
Yes
T}	T{
No
T}
backing-planes	All ones	Yes	No
backing-pixel	zero	Yes	No
T{
save-under
T}	T{
.PN False
T}	T{
Yes
T}	T{
No
T}
event-mask	empty set	Yes	Yes
do-not-propagate-mask	empty set	Yes	Yes
T{
override-redirect
T}	T{
.PN False
T}	T{
Yes
T}	T{
Yes
T}
T{
colormap
T}	T{
.PN CopyFromParent
T}	T{
Yes
T}	T{
No
T}
T{
cursor
T}	T{
.PN None
T}	T{
Yes
T}	T{
Yes
T}
_
.TE
.NH 3
Background Attribute
.XS
\*(SN Background Attribute
.XE
.LP
Only
.PN InputOutput
windows can have a background.
You can set the background of an
.PN InputOutput
window by using a pixel or a pixmap.
.LP
The background-pixmap attribute of a window specifies the pixmap to be used for 
a window's background.
This pixmap can be of any size, although some sizes may be faster than others.
The background-pixel attribute of a window specifies a pixel value used to paint
a window's background in a single color.
.LP
You can set the background-pixmap to a pixmap,  
.PN None 
(default), or 
.PN ParentRelative .
You can set the background-pixel of a window to any pixel value (no default).
If you specify a background-pixel, 
it overrides either the default background-pixmap
or any value you may have set in the background-pixmap.
A pixmap of an undefined size that is filled with the background-pixel is used 
for the background.
Range checking is not performed on the background pixel;
it simply is truncated to the appropriate number of bits.
.LP
If you set the background-pixmap,
it overrides the default.
The background-pixmap and the window must have the same depth,
or a
.PN BadMatch
error results.
If you set background-pixmap to
.PN None ,
the window has no defined background.  
If you set the background-pixmap to
.PN ParentRelative :
.IP \(bu 5
The parent window's background-pixmap is used. 
The child window, however, must have the same depth as 
its parent,
or a
.PN BadMatch
error results.
.IP \(bu 5
If the parent window has a background-pixmap of
.PN None ,
the window also has a background-pixmap of
.PN None . 
.IP \(bu 5
A copy of the parent window's background-pixmap is not made.
The parent's background-pixmap is examined each time the child window's 
background-pixmap is required.  
.IP \(bu 5
The background tile origin always aligns with the parent window's
background tile origin. 
If the background-pixmap is not
.PN ParentRelative ,
the background tile origin is the child window's origin.
.LP
Setting a new background, whether by setting background-pixmap or
background-pixel, overrides any previous background.
The background-pixmap can be freed immediately if no further explicit reference
is made to it (the X server will keep a copy to use when needed).
If you later draw into the pixmap used for the background,
what happens is undefined because the
X implementation is free to make a copy of the pixmap or
to use the same pixmap.
.LP
When no valid contents are available for regions of a window
and either the regions are visible or the server is maintaining backing store,
the server automatically tiles the regions with the window's background
unless the window has a background of
.PN None .
If the background is
.PN None ,
the previous screen contents from other windows of the same depth as the window
are simply left in place as long as the contents come from the parent of the
window or an inferior of the parent.
Otherwise, the initial contents of the exposed regions are undefined.
.PN Expose 
events are then generated for the regions, even if the background-pixmap
is
.PN None 
(see section 10.9).
.NH 3
Border Attribute
.XS
\*(SN Border Attribute
.XE
.LP
Only
.PN InputOutput
windows can have a border.
You can set the border of an
.PN InputOutput
window by using a pixel or a pixmap.
.LP
The border-pixmap attribute of a window specifies the pixmap to be used 
for a window's border.
The border-pixel attribute of a window specifies a pixmap of undefined size 
filled with that pixel be used for a window's border. 
Range checking is not performed on the background pixel;
it simply is truncated to the appropriate number of bits.
The border tile origin is always the same as the background tile origin.
.LP
You can also set the border-pixmap to a pixmap of any size (some may be faster
than others) or to
.PN CopyFromParent 
(default).
You can set the border-pixel to any pixel value (no default).
.LP
If you set a border-pixmap, 
it overrides the default.
The border-pixmap and the window must have the same depth,
or a
.PN BadMatch
error results.
If you set the border-pixmap to 
.PN CopyFromParent ,
the parent window's border-pixmap is copied.
Subsequent changes to the parent window's border attribute do not affect 
the child window.
However, the child window must have the same depth as the parent window,
or a
.PN BadMatch
error results.
.LP
The border-pixmap can be freed immediately if no further explicit reference
is made to it.
If you later draw into the pixmap used for the border,
what happens is undefined because the
X implementation is free either to make a copy of the pixmap or
to use the same pixmap.
If you specify a border-pixel, 
it overrides either the default border-pixmap
or any value you may have set in the border-pixmap.
All pixels in the window's border will be set to the border-pixel.
Setting a new border, whether by setting border-pixel or by setting
border-pixmap, overrides any previous border.
.LP
Output to a window is always clipped to the inside of the window. 
Therefore, graphics operations never affect the window border.
.NH 3
Gravity Attributes
.XS
\*(SN Gravity Attributes
.XE
.LP
The bit gravity of a window defines which region of the window should be 
retained when an
.PN InputOutput
window is resized. 
The default value for the bit-gravity attribute is 
.PN ForgetGravity .
The window gravity of a window allows you to define how the 
.PN InputOutput
or
.PN InputOnly
window should be repositioned if its parent is resized.  
The default value for the win-gravity attribute is 
.PN NorthWestGravity .
.LP
If the inside width or height of a window is not changed 
and if the window is moved or its border is changed, 
then the contents of the window are not lost but move with the window.
Changing the inside width or height of the window causes its contents to be
moved or lost (depending on the bit-gravity of the window) and causes
children to be reconfigured (depending on their win-gravity).
For a
change of width and height, the (x, y) pairs are defined:
.LP
.TS
l l
l l.
_
.sp 6p
.B
Gravity Direction	Coordinates
.sp 6p
_
.sp 6p
.R
T{
.PN NorthWestGravity
T}	T{
(0, 0)
T}
T{
.PN NorthGravity
T}	T{
(Width/2, 0)
T}
T{
.PN NorthEastGravity
T}	T{
(Width, 0)
T}
T{
.PN WestGravity
T}	T{
(0, Height/2)
T}
T{
.PN CenterGravity
T}	T{
(Width/2, Height/2)
T}
T{
.PN EastGravity
T}	T{
(Width, Height/2)
T}
T{
.PN SouthWestGravity
T}	T{
(0, Height)
T}
T{
.PN SouthGravity
T}	T{
(Width/2, Height)
T}
T{
.PN SouthEastGravity
T}	T{
(Width, Height)
T}
.sp 6p
_
.TE
.LP
When a window with one of these bit-gravity values is resized, 
the corresponding pair
defines the change in position of each pixel in the window.
When a window with one of these win-gravities has its parent window resized,
the corresponding pair defines the change in position of the window 
within the parent.
When a window is so repositioned, a
.PN GravityNotify
event is generated (see section 10.10.5).
.LP
A bit-gravity of
.PN StaticGravity 
indicates that the contents or origin should not move relative to the 
origin of the root window.
If the change in size of the window is coupled with a change in position (x, y),
then for bit-gravity the change in position of each pixel is (\-x, \-y), and for
win-gravity the change in position of a child when its parent is so resized is
(\-x, \-y).
Note that
.PN StaticGravity
still only takes effect when the width or height of the window is changed, 
not when the window is moved.
.LP
A bit-gravity of 
.PN ForgetGravity 
indicates that the window's contents are always discarded after a size change, 
even if a backing store or save under has been requested.
The window is tiled with its background
and zero or more 
.PN Expose 
events are generated. 
If no background is defined, the existing screen contents are not
altered.
Some X servers may also ignore the specified bit-gravity and 
always generate 
.PN Expose
events.
.LP
The contents and borders of inferiors are not affected by their parent's
bit-gravity.
A server is permitted to ignore the specified bit-gravity and use
.PN Forget
instead.
.LP
A win-gravity of 
.PN UnmapGravity 
is like 
.PN NorthWestGravity
(the window is not moved),
except the child is also
unmapped when the parent is resized,
and an 
.PN UnmapNotify 
event is
generated.
.NH 3
Backing Store Attribute
.XS
\*(SN Backing Store Attribute
.XE
.LP
Some implementations of the X server may choose to maintain the contents of 
.PN InputOutput
windows.
If the X server maintains the contents of a window, 
the off-screen saved pixels
are known as backing store.
The backing store advises the X server on what to do 
with the contents of a window.
The backing-store attribute can be set to
.PN NotUseful 
(default),
.PN WhenMapped ,
or
.PN Always .
.LP
A backing-store attribute of 
.PN NotUseful 
advises the X server that 
maintaining contents is unnecessary, 
although some X implementations may
still choose to maintain contents and, therefore, not generate 
.PN Expose
events.
A backing-store attribute of 
.PN WhenMapped 
advises the X server that maintaining contents of 
obscured regions when the window is mapped would be beneficial.
In this case,
the server may generate an 
.PN Expose 
event when the window is created.
A backing-store attribute of 
.PN Always 
advises the X server that maintaining contents even when 
the window is unmapped would be beneficial.  
Even if the window is larger than its parent, 
this is a request to the X server to maintain complete contents, 
not just the region within the parent window boundaries.  
While the X server maintains the window's contents, 
.PN Expose 
events normally are not generated, 
but the X server may stop maintaining 
contents at any time.  
.LP
When the contents of obscured regions of a window are being maintained,
regions obscured by noninferior windows are included in the destination
of graphics requests (and source, when the window is the source).
However, regions obscured by inferior windows are not included.
.NH 3
Save Under Flag
.XS
\*(SN Save Under Flag
.XE
.IN "Save Unders"
.LP
Some server implementations may preserve contents of 
.PN InputOutput
windows under other 
.PN InputOutput
windows.
This is not the same as preserving the contents of a window for you.
You may get better visual
appeal if transient windows (for example, pop-up menus) request that the system
preserve the screen contents under them, 
so the temporarily obscured applications do not have to repaint.
.LP
You can set the save-under flag to
.PN True
or
.PN False 
(default).
If save-under is 
.PN True , 
the X server is advised that, when this window is mapped, 
saving the contents of windows it obscures would be beneficial.
.NH 3
Backing Planes and Backing Pixel Attributes
.XS
\*(SN Backing Planes and Backing Pixel Attributes
.XE
.LP
You can set backing planes to indicate (with bits set to 1) 
which bit planes of an
.PN InputOutput
window hold dynamic data that must be preserved in backing store 
and during save unders.
The default value for the backing-planes attribute is all bits set to 1.
You can set backing pixel to specify what bits to use in planes not 
covered by backing planes.
The default value for the backing-pixel attribute is all bits set to 0.
The X server is free to save only the specified bit planes in the backing store
or the save under and is free to regenerate the remaining planes with 
the specified pixel value.
Any extraneous bits in these values (that is, those bits beyond 
the specified depth of the window) may be simply ignored.
If you request backing store or save unders,
you should use these members to minimize the amount of off-screen memory 
required to store your window.
.NH 3
Event Mask and Do Not Propagate Mask Attributes
.XS
\*(SN Event Mask and Do Not Propagate Mask Attributes
.XE
.LP
The event mask defines which events the client is interested in for this 
.PN InputOutput
or
.PN InputOnly
window (or, for some event types, inferiors of this window).
The event mask is the bitwise inclusive OR of zero or more of the 
valid event mask bits.
You can specify that no maskable events are reported by setting 
.PN NoEventMask 
(default).
.LP
The do-not-propagate-mask attribute
defines which events should not be propagated to 
ancestor windows when no client has the event type selected in this 
.PN InputOutput
or
.PN InputOnly
window.
The do-not-propagate-mask is the bitwise inclusive OR of zero or more
of the following masks:
.PN KeyPress , 
.PN KeyRelease ,
.PN ButtonPress , 
.PN ButtonRelease ,
.PN PointerMotion ,
.PN Button1Motion , 
.PN Button2Motion , 
.PN Button3Motion ,
.PN Button4Motion , 
.PN Button5Motion , 
and
.PN ButtonMotion .
You can specify that all events are propagated by setting 
.PN NoEventMask 
(default).
.NH 3
Override Redirect Flag
.XS
\*(SN Override Redirect Flag
.XE
.LP
To control window placement or to add decoration,
a window manager often needs to intercept (redirect) any map or configure
request.
Pop-up windows, however, often need to be mapped without a window manager
getting in the way.
To control whether an
.PN InputOutput
or
.PN InputOnly
window is to ignore these structure control facilities,
use the override-redirect flag.
.LP
The override-redirect flag specifies whether map and configure requests 
on this window should override a 
.PN SubstructureRedirectMask 
on the parent.
You can set the override-redirect flag to
.PN True
or
.PN False 
(default).
Window managers use this information to avoid tampering with pop-up windows
(see also chapter 14).
.NH 3
Colormap Attribute
.XS
\*(SN Colormap Attribute
.XE
.LP
The colormap attribute specifies which colormap best reflects the true
colors of the 
.PN InputOutput
window.  
The colormap must have the same visual type as the window,
or a 
.PN BadMatch 
error results.  
X servers capable of supporting multiple 
hardware colormaps can use this information, 
and window managers can use it for calls to
.PN XInstallColormap .
You can set the colormap attribute to a colormap or to
.PN CopyFromParent
(default).
.LP
If you set the colormap to
.PN CopyFromParent ,
the parent window's colormap is copied and used by its child.
However, the child window must have the same visual type as the parent, 
or a 
.PN BadMatch 
error results. 
The parent window must not have a colormap of 
.PN None ,
or a 
.PN BadMatch 
error results.
The colormap is copied by sharing the colormap object between the child 
and parent, not by making a complete copy of the colormap contents.
Subsequent changes to the parent window's colormap attribute do
not affect the child window.
.NH 3
Cursor Attribute
.XS
\*(SN Cursor Attribute
.XE
.LP
The cursor attribute specifies which cursor is to be used when the pointer is
in the 
.PN InputOutput
or
.PN InputOnly
window.
You can set the cursor to a cursor or
.PN None
(default).
.LP
If you set the cursor to
.PN None ,
the parent's cursor is used when the 
pointer is in the 
.PN InputOutput
or
.PN InputOnly
window, and any change in the parent's cursor will cause an
immediate change in the displayed cursor.
By calling
.PN XFreeCursor ,
the cursor can be freed immediately as long as no further explicit reference 
to it is made.
.NH 2
Creating Windows
.XS
\*(SN Creating Windows
.XE
.LP
Xlib provides basic ways for creating windows,
and toolkits often supply higher-level functions specifically for
creating and placing top-level windows,
which are discussed in the appropriate toolkit documentation.
If you do not use a toolkit, however,
you must provide some standard information or hints for the window
manager by using the Xlib inter-client communication functions
(see chapter 14).
.LP
If you use Xlib to create your own top-level windows
(direct children of the root window),
you must observe the following rules so that all applications interact
reasonably across the different styles of window management:
.IP \(bu 5
You must never fight with the window manager for the size or
placement of your top-level window.
.IP \(bu 5
You must be able to deal with whatever size window you get, 
even if this means that your application just prints a message 
like ``Please make me bigger'' in its window.
.IP \(bu 5
You should only attempt to resize or move top-level windows in
direct response to a user request.
If a request to change the size of a top-level window fails,
you must be prepared to live with what you get.
You are free to resize or move the children of top-level
windows as necessary.
(Toolkits often have facilities for automatic relayout.)
.IP \(bu 5
If you do not use a toolkit that automatically sets standard window properties,
you should set these properties for top-level windows before mapping them.
.LP
For further information,
see chapter 14 and the \fIInter-Client Communication Conventions Manual\fP.
.LP
.PN XCreateWindow
is the more general function that allows you to set specific window attributes 
when you create a window.
.PN XCreateSimpleWindow 
creates a window that inherits its attributes from its parent window.
.LP
.IN "Window" "InputOnly"
The X server acts as if 
.PN InputOnly 
windows do not exist for
the purposes of graphics requests, exposure processing, and
.PN VisibilityNotify 
events.
An 
.PN InputOnly 
window cannot be used as a
drawable (that is, as a source or destination for graphics requests).
.PN InputOnly
and 
.PN InputOutput 
windows act identically in other respects (properties,
grabs, input control, and so on).
Extension packages can define other classes of windows.
.LP
To create an unmapped window and set its window attributes, use
.PN XCreateWindow .
.IN "XCreateWindow" "" "@DEF@"
.sM
.FD 0
Window XCreateWindow\^(\^\fIdisplay\fP, \fIparent\fP\^, \fIx\fP\^, \fIy\fP\^, \fIwidth\fP\^, \fIheight\fP\^, \fIborder_width\fP\^, \fIdepth\fP\^, 
.br
                       \fIclass\fP\^, \fIvisual\fP\^, \fIvaluemask\fP\^, \fIattributes\fP\^)
.br
      Display *\fIdisplay\fP\^;
.br
      Window \fIparent\fP\^;
.br
      int \fIx\fP\^, \fIy\fP\^; 
.br
      unsigned int \fIwidth\fP\^, \fIheight\fP\^;
.br
      unsigned int \fIborder_width\fP\^;
.br
      int \fIdepth\fP\^;
.br
      unsigned int \fIclass\fP\^;
.br
      Visual *\fIvisual\fP\^;
.br
      unsigned long \fIvaluemask\fP\^;
.br
      XSetWindowAttributes *\fIattributes\fP\^;
.FN
.IP \fIdisplay\fP 1i
Specifies the connection to the X server.
.IP \fIparent\fP 1i
Specifies the parent window.
.ds Xy , which are the top-left outside corner of the created window's \
borders and are relative to the inside of the parent window's borders
.IP \fIx\fP 1i
.br
.ns
.IP \fIy\fP 1i
Specify the x and y coordinates\*(Xy.
.ds Wh , which are the created window's inside dimensions \
and do not include the created window's borders
.IP \fIwidth\fP 1i
.br
.ns
.IP \fIheight\fP 1i
Specify the width and height\*(Wh.
The dimensions must be nonzero,
or a
.PN BadValue
error results.
.IP \fIborder_width\fP 1i
Specifies the width of the created window's border in pixels.
.IP \fIdepth\fP 1i
Specifies the window's depth.
A depth of 
.PN CopyFromParent
means the depth is taken from the parent.
.IP \fIclass\fP 1i
Specifies the created window's class.
You can pass
.PN InputOutput , 
.PN InputOnly , 
or 
.PN CopyFromParent .
A class of 
.PN CopyFromParent
means the class
is taken from the parent.
.IP \fIvisual\fP 1i
Specifies the visual type.
A visual of 
.PN CopyFromParent 
means the visual type is taken from the 
parent.
.IP \fIvaluemask\fP 1i
Specifies which window attributes are defined in the attributes
argument.
This mask is the bitwise inclusive OR of the valid attribute mask bits.
If valuemask is zero,
the attributes are ignored and are not referenced.
.IP \fIattributes\fP 1i
Specifies the structure from which the values (as specified by the value mask)
are to be taken.
The value mask should have the appropriate bits
set to indicate which attributes have been set in the structure.
.LP
.eM
The
.PN XCreateWindow
function creates an unmapped subwindow for a specified parent window, 
returns the window ID of the created window, 
and causes the X server to generate a
.PN CreateNotify
event.
The created window is placed on top in the stacking order 
with respect to siblings.
.LP
The coordinate system has the X axis horizontal and the Y axis vertical
with the origin [0, 0] at the upper-left corner.
Coordinates are integral,
in terms of pixels,
and coincide with pixel centers.
Each window and pixmap has its own coordinate system.
For a window, 
the origin is inside the border at the inside, upper-left corner.
.LP
The border_width for an
.PN InputOnly
window must be zero, or a
.PN BadMatch
error results.
For class
.PN InputOutput ,
the visual type and depth must be a combination supported for the screen,
or a
.PN BadMatch
error results.
The depth need not be the same as the parent,
but the parent must not be a window of class 
.PN InputOnly ,
or a
.PN BadMatch
error results.
For an
.PN InputOnly
window,
the depth must be zero, and the visual must be one supported by the screen.
If either condition is not met,
a
.PN BadMatch
error results.
The parent window, however, may have any depth and class.
If you specify any invalid window attribute for a window, a
.PN BadMatch
error results.
.LP
The created window is not yet displayed (mapped) on the user's display.
To display the window, call
.PN XMapWindow .
The new window initially uses the same cursor as
its parent. 
A new cursor can be defined for the new window by calling
.PN XDefineCursor .
.IN "Cursor" "Initial State"
.IN "XDefineCursor" 
The window will not be visible on the screen unless it and all of its
ancestors are mapped and it is not obscured by any of its ancestors.
.LP
.PN XCreateWindow
can generate
.PN BadAlloc ,
.PN BadColor ,
.PN BadCursor ,
.PN BadMatch ,
.PN BadPixmap ,
.PN BadValue ,
and
.PN BadWindow 
errors.
.LP
.sp
To create an unmapped 
.PN InputOutput
subwindow of a given parent window, use
.PN XCreateSimpleWindow .
.IN "XCreateSimpleWindow" "" "@DEF@"
.sM
.FD 0
Window XCreateSimpleWindow\^(\^\fIdisplay\fP, \fIparent\fP\^, \fIx\fP\^, \fIy\fP\^, \fIwidth\fP\^, \fIheight\fP\^, \fIborder_width\fP\^, 
.br
                             \fIborder\fP\^, \fIbackground\fP\^)
.br
      Display *\fIdisplay\fP\^;
.br
      Window \fIparent\fP\^;
.br
      int \fIx\fP\^, \fIy\fP\^;
.br
      unsigned int \fIwidth\fP\^, \fIheight\fP\^;
.br
      unsigned int \fIborder_width\fP\^;
.br
      unsigned long \fIborder\fP\^;
.br
      unsigned long \fIbackground\fP\^;
.FN
.IP \fIdisplay\fP 1i
Specifies the connection to the X server.
.IP \fIparent\fP 1i
Specifies the parent window.
.ds Xy , which are the top-left outside corner of the new window's borders \
and are relative to the inside of the parent window's borders
.IP \fIx\fP 1i
.br
.ns
.IP \fIy\fP 1i
Specify the x and y coordinates\*(Xy.
.ds Wh , which are the created window's inside dimensions \
and do not include the created window's borders
.IP \fIwidth\fP 1i
.br
.ns
.IP \fIheight\fP 1i
Specify the width and height\*(Wh.
The dimensions must be nonzero,
or a
.PN BadValue
error results.
.IP \fIborder_width\fP 1i
Specifies the width of the created window's border in pixels.
.IP \fIborder\fP 1i
Specifies the border pixel value of the window.
.IP \fIbackground\fP 1i
Specifies the background pixel value of the window.

.LP
.eM
The
.PN XCreateSimpleWindow
function creates an unmapped
.PN InputOutput
subwindow for a specified parent window, returns the
window ID of the created window, and causes the X server to generate a
.PN CreateNotify
event.
The created window is placed on top in the stacking order with respect to 
siblings.
Any part of the window that extends outside its parent window is clipped.
The border_width for an
.PN InputOnly
window must be zero, or a
.PN BadMatch
error results.
.PN XCreateSimpleWindow
inherits its depth, class, and visual from its parent.
All other window attributes, except background and border, 
have their default values.
.LP
.PN XCreateSimpleWindow
can generate
.PN BadAlloc ,
.PN BadMatch ,
.PN BadValue ,
and
.PN BadWindow 
errors.
.NH 2
Destroying Windows
.XS
\*(SN Destroying Windows 
.XE
.LP
Xlib provides functions that you can use to destroy a window or destroy all
subwindows of a window.
.LP
.sp
To destroy a window and all of its subwindows, use
.PN XDestroyWindow .
.IN "XDestroyWindow" "" "@DEF@"
.sM
.FD 0
XDestroyWindow\^(\^\fIdisplay\fP, \fIw\fP\^)
.br
      Display *\fIdisplay\fP\^;
.br
      Window \fIw\fP\^;
.FN
.IP \fIdisplay\fP 1i
Specifies the connection to the X server.
.IP \fIw\fP 1i
Specifies the window.
.LP
.eM
The
.PN XDestroyWindow
function destroys the specified window as well as all of its subwindows and causes
the X server to generate a
.PN DestroyNotify
event for each window.
The window should never be referenced again.
If the window specified by the w argument is mapped,
it is unmapped automatically.
The ordering of the
.PN DestroyNotify
events is such that for any given window being destroyed,
.PN DestroyNotify
is generated on any inferiors of the window before being generated on
the window itself.
The ordering among siblings and across subhierarchies is not otherwise
constrained.
If the window you specified is a root window, no windows are destroyed.
Destroying a mapped window will generate 
.PN Expose 
events on other windows that were obscured by the window being destroyed.
.LP
.PN XDestroyWindow
can generate a
.PN BadWindow 
error.
.LP
.sp
To destroy all subwindows of a specified window, use 
.PN XDestroySubwindows .
.IN "XDestroySubwindows" "" "@DEF@"
.sM
.FD 0
XDestroySubwindows\^(\^\fIdisplay\fP, \fIw\fP\^)
.br
      Display *\fIdisplay\fP\^;
.br
      Window \fIw\fP\^;
.FN
.IP \fIdisplay\fP 1i
Specifies the connection to the X server.
.IP \fIw\fP 1i
Specifies the window.
.LP
.eM
The
.PN XDestroySubwindows
function destroys all inferior windows of the specified window, 
in bottom-to-top stacking order.
It causes the X server to generate a
.PN DestroyNotify
event for each window.
If any mapped
subwindows were actually destroyed,
.PN XDestroySubwindows
causes the X server to generate 
.PN Expose 
events on the specified window.
This is much more efficient than deleting many windows
one at a time because much of the work need be performed only once for all
of the windows, rather than for each window.
The subwindows should never be referenced again.  
.LP
.PN XDestroySubwindows
can generate a
.PN BadWindow 
error.
.NH 2
Mapping Windows 
.XS
\*(SN Mapping Windows 
.XE
.LP
A window is considered mapped if an 
.PN XMapWindow
call has been made on it.
It may not be visible on the screen for one of the following reasons:
.IP \(bu 5
It is obscured by another opaque window.
.IP \(bu 5
One of its ancestors is not mapped.
.IP \(bu 5
It is entirely clipped by an ancestor.
.LP
.PN Expose 
events are generated for the window when part or all of
it becomes visible on the screen. 
A client receives the
.PN Expose 
events only if it has asked for them.
Windows retain their position in the stacking order when they are unmapped.
.LP
A window manager may want to control the placement of subwindows.
If 
.PN SubstructureRedirectMask 
has been selected by a window manager
on a parent window (usually a root window),
a map request initiated by other clients on a child window is not performed,
and the window manager is sent a 
.PN MapRequest 
event.
However, if the override-redirect flag on the child had been set to
.PN True
(usually only on pop-up menus),
the map request is performed.
.LP
A tiling window manager might decide to reposition and resize other clients' 
windows and then decide to map the window to its final location.
A window manager that wants to provide decoration might
reparent the child into a frame first.
For further information,
see sections 3.2.8 and 10.10.
Only a single client at a time can select for 
.PN SubstructureRedirectMask .
.LP
Similarly, a single client can select for 
.PN ResizeRedirectMask 
on a parent window.
Then, any attempt to resize the window by another client is suppressed, and
the client receives a 
.PN ResizeRequest 
event.
.LP
.sp
To map a given window, use 
.PN XMapWindow .
.IN "XMapWindow" "" "@DEF@"
.sM
.FD 0
XMapWindow\^(\^\fIdisplay\fP, \fIw\fP\^)
.br
      Display *\fIdisplay\fP\^;
.br
      Window \fIw\fP\^;
.FN
.IP \fIdisplay\fP 1i
Specifies the connection to the X server.
.IP \fIw\fP 1i
Specifies the window.
.LP
.eM
The
.PN XMapWindow
function
maps the window and all of its
subwindows that have had map requests.
Mapping a window that has an unmapped ancestor does not display the
window but marks it as eligible for display when the ancestor becomes
mapped.
Such a window is called unviewable.
When all its ancestors are mapped,
the window becomes viewable
and will be visible on the screen if it is not obscured by another window.
This function has no effect if the window is already mapped.
.LP
If the override-redirect of the window is
.PN False 
and if some other client has selected
.PN SubstructureRedirectMask
on the parent window, then the X server generates a
.PN MapRequest
event, and the
.PN XMapWindow
function does not map the window.
Otherwise, the window is mapped, and the X server generates a
.PN MapNotify
event.
.LP
If the window becomes viewable and no earlier contents for it are remembered,
the X server tiles the window with its background.
If the window's background is undefined,
the existing screen contents are not
altered, and the X server generates zero or more 
.PN Expose
events.
If backing-store was maintained while the window was unmapped, no 
.PN Expose
events
are generated.
If backing-store will now be maintained, 
a full-window exposure is always generated.
Otherwise, only visible regions may be reported.
Similar tiling and exposure take place for any newly viewable inferiors.
.LP
.IN "XMapWindow"
If the window is an
.PN InputOutput 
window,
.PN XMapWindow
generates 
.PN Expose 
events on each 
.PN InputOutput
window that it causes to be displayed.
If the client maps and paints the window 
and if the client begins processing events, 
the window is painted twice.
To avoid this,
first ask for 
.PN Expose 
events and then map the window,
so the client processes input events as usual.
The event list will include 
.PN Expose 
for each
window that has appeared on the screen. 
The client's normal response to
an 
.PN Expose 
event should be to repaint the window.
This method usually leads to simpler programs and to proper interaction
with window managers.
.LP
.PN XMapWindow
can generate a
.PN BadWindow 
error.
.LP
.sp
To map and raise a window, use
.PN XMapRaised .
.IN "XMapRaised" "" "@DEF@"
.sM
.FD 0
XMapRaised\^(\^\fIdisplay\fP, \fIw\fP\^)
.br
      Display *\fIdisplay\fP\^;
.br
      Window \fIw\fP\^;
.FN
.IP \fIdisplay\fP 1i
Specifies the connection to the X server.
.IP \fIw\fP 1i
Specifies the window.
.LP
.eM
The
.PN XMapRaised
function
essentially is similar to
.PN XMapWindow
in that it maps the window and all of its
subwindows that have had map requests.
However, it also raises the specified window to the top of the stack.
For additional information,
see 
.PN XMapWindow .
.LP
.PN XMapRaised
can generate multiple
.PN BadWindow 
errors.
.LP
.sp
To map all subwindows for a specified window, use 
.PN XMapSubwindows .
.IN "XMapSubwindows" "" "@DEF@"
.sM
.FD 0
XMapSubwindows\^(\^\fIdisplay\fP, \fIw\fP\^)
.br
      Display *\fIdisplay\fP\^;
.br
      Window \fIw\fP\^;
.FN
.IP \fIdisplay\fP 1i
Specifies the connection to the X server.
.IP \fIw\fP 1i
Specifies the window.
.LP
.eM
The
.PN XMapSubwindows
.IN "XMapSubwindows"
function maps all subwindows for a specified window in top-to-bottom stacking 
order.
The X server generates
.PN Expose
events on each newly displayed window.
This may be much more efficient than mapping many windows
one at a time because the server needs to perform much of the work
only once, for all of the windows, rather than for each window.
.LP
.PN XMapSubwindows
can generate a
.PN BadWindow 
error.
.NH 2
Unmapping Windows
.XS
\*(SN Unmapping Windows 
.XE
.LP
Xlib provides functions that you can use to unmap a window or all subwindows.
.LP
.sp
To unmap a window, use 
.PN XUnmapWindow .
.IN "XUnmapWindow" "" "@DEF@"
.sM
.FD 0
XUnmapWindow\^(\^\fIdisplay\fP, \fIw\fP\^)
.br
      Display *\fIdisplay\fP\^;
.br
      Window \fIw\fP\^;
.FN
.IP \fIdisplay\fP 1i
Specifies the connection to the X server.
.IP \fIw\fP 1i
Specifies the window.
.LP
.eM
The
.PN XUnmapWindow
function unmaps the specified window and causes the X server to generate an
.PN UnmapNotify
.IN "UnmapNotify Event"
.IN "XUnmapWindow"
event.
If the specified window is already unmapped, 
.PN XUnmapWindow 
has no effect.
Normal exposure processing on formerly obscured windows is performed.
Any child window will no longer be visible until another map call is
made on the parent.
In other words, the subwindows are still mapped but are not visible
until the parent is mapped.
Unmapping a window will generate 
.PN Expose 
events on windows that were formerly obscured by it.
.LP
.PN XUnmapWindow
can generate a
.PN BadWindow 
error.
.LP
.sp
To unmap all subwindows for a specified window, use 
.PN XUnmapSubwindows .
.IN "XUnmapSubwindows" "" "@DEF@"
.sM
.FD 0
XUnmapSubwindows\^(\^\fIdisplay\fP, \fIw\fP\^)
.br
      Display *\fIdisplay\fP\^;
.br
      Window \fIw\fP\^;
.FN
.IP \fIdisplay\fP 1i
Specifies the connection to the X server.
.IP \fIw\fP 1i
Specifies the window.
.LP
.eM
The
.PN XUnmapSubwindows
function unmaps all subwindows for the specified window in bottom-to-top
stacking order.
It causes the X server to generate an
.PN UnmapNotify
event on each subwindow and 
.PN Expose 
events on formerly obscured windows.
.IN "UnmapNotify Event"
Using this function is much more efficient than unmapping multiple windows
one at a time because the server needs to perform much of the work
only once, for all of the windows, rather than for each window.
.LP
.PN XUnmapSubwindows
can generate a
.PN BadWindow 
error.
.NH 2
Configuring Windows
.XS
\*(SN Configuring Windows 
.XE
.LP
.LP
Xlib provides functions that you can use to
move a window, resize a window, move and resize a window, or
change a window's border width.
To change one of these parameters,
set the appropriate member of the
.PN XWindowChanges
structure and OR in the corresponding value mask in subsequent calls to
.PN XConfigureWindow .
The symbols for the value mask bits and the
.PN XWindowChanges
structure are:
.sM
.LP
/* Configure window value mask bits */
.TS
lw(.5i) lw(2.5i) lw(.8i).
T{
#define
T}	T{
.PN CWX
T}	T{
(1<<0)
T}
T{
#define
T}	T{
.PN CWY
T}	T{
(1<<1)
T}
T{
#define
T}	T{
.PN CWWidth
T}	T{
(1<<2)
T}
T{
#define
T}	T{
.PN CWHeight
T}	T{
(1<<3)
T}
T{
#define
T}	T{
.PN CWBorderWidth
T}	T{
(1<<4)
T}
T{
#define
T}	T{
.PN CWSibling
T}	T{
(1<<5)
T}
T{
#define
T}	T{
.PN CWStackMode
T}	T{
(1<<6)
T}
.TE
.IN "XWindowChanges" "" "@DEF@"
.Ds 0
.TA .5i 3i
.ta .5i 3i
/* Values */

typedef struct {
	int x, y;
	int width, height;
	int border_width;
	Window sibling;
	int stack_mode;
} XWindowChanges;
.De
.LP
.eM
The x and y members are used to set the window's x and y coordinates,
which are relative to the parent's origin
and indicate the position of the upper-left outer corner of the window.
The width and height members are used to set the inside size of the window,
not including the border, and must be nonzero, or a
.PN BadValue
error results.
Attempts to configure a root window have no effect.
.LP
The border_width member is used to set the width of the border in pixels.
Note that setting just the border width leaves the outer-left corner of the window
in a fixed position but moves the absolute position of the window's origin.
If you attempt to set the border-width attribute of an
.PN InputOnly
window nonzero, a
.PN BadMatch
error results. 
.LP
The sibling member is used to set the sibling window for stacking operations.
The stack_mode member is used to set how the window is to be restacked 
and can be set to
.PN Above , 
.PN Below , 
.PN TopIf , 
.PN BottomIf ,
or 
.PN Opposite .
.LP
If the override-redirect flag of the window is
.PN False 
and if some other client has selected
.PN SubstructureRedirectMask
on the parent, the X server generates a
.PN ConfigureRequest
event, and no further processing is performed.
Otherwise, 
if some other client has selected 
.PN ResizeRedirectMask 
on the window and the inside
width or height of the window is being changed,
a 
.PN ResizeRequest
event is generated, and the current inside width and height are
used instead.
Note that the override-redirect flag of the window has no effect
on
.PN ResizeRedirectMask 
and that
.PN SubstructureRedirectMask
on the parent has precedence over
.PN ResizeRedirectMask 
on the window.
.LP
When the geometry of the window is changed as specified, 
the window is restacked among siblings, and a
.PN ConfigureNotify 
event is generated if the state of the window actually changes.
.PN GravityNotify
events are generated after 
.PN ConfigureNotify 
events.
If the inside width or height of the window has actually changed, 
children of the window are affected as specified.
.LP
If a window's size actually changes,
the window's subwindows move according to their window gravity.
Depending on the window's bit gravity,
the contents of the window also may be moved (see section 3.2.3).
.LP
If regions of the window were obscured but now are not,
exposure processing is performed on these formerly obscured windows, 
including the window itself and its inferiors. 
As a result of increasing the width or height,
exposure processing is also performed on any new regions of the window 
and any regions where window contents are lost.
.LP
The restack check (specifically, the computation for 
.PN BottomIf ,
.PN TopIf ,
and 
.PN Opposite )
is performed with respect to the window's final size and position (as
controlled by the other arguments of the request), not its initial position.
If a sibling is specified without a stack_mode,
a
.PN BadMatch
error results.
.LP
If a sibling and a stack_mode are specified, 
the window is restacked as follows:
.TS
lw(1i) lw(5i).
T{
.PN Above
T}	T{
The window is placed just above the sibling.
T}
.sp 6p
T{
.PN Below
T}	T{
The window is placed just below the sibling.
T}
.sp 6p
T{
.PN TopIf
T}	T{
If the sibling occludes the window, the window is placed
at the top of the stack.
T}
.sp 6p
T{
.PN BottomIf
T}	T{
If the window occludes the sibling, the window is
placed at the bottom of the stack.
T}
.sp 6p
T{
.PN Opposite
T}	T{
If the sibling occludes the window, the window 
is placed at the top of the stack.
If the window occludes the sibling, 
the window is placed at the bottom of the stack.
T}
.TE
.LP
If a stack_mode is specified but no sibling is specified,
the window is restacked as follows:
.TS
lw(1i) lw(5i).
T{
.PN Above
T}	T{
The window is placed at the top of the stack.
T}
.sp 6p
T{
.PN Below
T}	T{
The window is placed at the bottom of the stack.
T}
.sp 6p
T{
.PN TopIf
T}	T{
If any sibling occludes the window, the window is placed at
the top of the stack.
T}
.sp 6p
T{
.PN BottomIf
T}	T{
If the window occludes any sibling, the window is placed at
the bottom of the stack.
T}
.sp 6p
T{
.PN Opposite
T}	T{
If any sibling occludes the window, the window 
is placed at the top of the stack. 
If the window occludes any sibling, 
the window is placed at the bottom of the stack.
T}
.TE
.LP
Attempts to configure a root window have no effect.
.LP
.sp
To configure a window's size, location, stacking, or border, use
.PN XConfigureWindow .
.IN "XConfigureWindow" "" "@DEF@"
.sM
.FD 0
XConfigureWindow\^(\^\fIdisplay\fP, \fIw\fP\^, \fIvalue_mask\fP\^, \fIvalues\fP\^)
.br
      Display *\fIdisplay\fP\^;
.br
      Window \fIw\fP\^;
.br
      unsigned int \fIvalue_mask\fP\^;
.br
      XWindowChanges *\fIvalues\fP\^;
.FN
.IP \fIdisplay\fP 1i
Specifies the connection to the X server.
.ds Wi to be reconfigured
.IP \fIw\fP 1i
Specifies the window \*(Wi.
.IP \fIvalue_mask\fP 1i
Specifies which values are to be set using information in
the values structure.
This mask is the bitwise inclusive OR of the valid configure window values bits.
.IP \fIvalues\fP 1i
Specifies the 
.PN XWindowChanges 
structure.
.LP
.eM
The
.PN XConfigureWindow
function uses the values specified in the
.PN XWindowChanges
structure to reconfigure a window's size, position, border, and stacking order.
Values not specified are taken from the existing geometry of the window.
.LP
If a sibling is specified without a stack_mode or if the window
is not actually a sibling,
a
.PN BadMatch
error results. 
Note that the computations for
.PN BottomIf ,
.PN TopIf ,
and
.PN Opposite
are performed with respect to the window's final geometry (as controlled by the
other arguments passed to
.PN XConfigureWindow ),
not its initial geometry.
Any backing store contents of the window, its
inferiors, and other newly visible windows are either discarded or
changed to reflect the current screen contents 
(depending on the implementation).
.LP
.PN XConfigureWindow
can generate
.PN BadMatch ,
.PN BadValue ,
and
.PN BadWindow 
errors.
.LP
.sp
To move a window without changing its size, use 
.PN XMoveWindow .
.IN "XMoveWindow" "" "@DEF@"
.sM
.FD 0 
XMoveWindow\^(\^\fIdisplay\fP, \fIw\fP\^, \fIx\fP\^, \fIy\fP\^)
.br
      Display *\fIdisplay\fP\^;
.br
      Window \fIw\fP\^;
.br
      int \fIx\fP\^, \fIy\fP\^;
.FN	
.IP \fIdisplay\fP 1i
Specifies the connection to the X server.
.ds Wi to be moved
.IP \fIw\fP 1i
Specifies the window \*(Wi.
.ds Xy , which define the new location of the top-left pixel \
of the window's border or the window itself if it has no border
.IP \fIx\fP 1i
.br
.ns
.IP \fIy\fP 1i
Specify the x and y coordinates\*(Xy.
.LP
.eM
The
.PN XMoveWindow
function moves the specified window to the specified x and y coordinates,
but it does not change the window's size, raise the window, or
change the mapping state of the window.
Moving a mapped window may or may not lose the window's contents 
depending on if the window is obscured by nonchildren 
and if no backing store exists.
If the contents of the window are lost, 
the X server generates
.PN Expose 
events.
Moving a mapped window generates
.PN Expose 
events on any formerly obscured windows. 
.LP
If the override-redirect flag of the window is 
.PN False 
and some
other client has selected 
.PN SubstructureRedirectMask 
on the parent, the X server generates a
.PN ConfigureRequest 
event, and no further processing is
performed.  
Otherwise, the window is moved.
.LP
.PN XMoveWindow
can generate a
.PN BadWindow 
error.
.LP
.sp
To change a window's size without changing the upper-left coordinate, use 
.PN XResizeWindow .
.IN "XResizeWindow" "" "@DEF@"
.sM
.FD 0
XResizeWindow\^(\^\fIdisplay\fP, \fIw\fP\^, \fIwidth\fP\^, \fIheight\fP\^)
.br
      Display *\fIdisplay\fP\^;
.br
      Window \fIw\fP\^;
.br
      unsigned int \fIwidth\fP\^, \fIheight\fP\^;
.FN
.IP \fIdisplay\fP 1i
Specifies the connection to the X server.
.IP \fIw\fP 1i
Specifies the window.
.ds Wh , which are the interior dimensions of the window \
after the call completes
.IP \fIwidth\fP 1i
.br
.ns
.IP \fIheight\fP 1i
Specify the width and height\*(Wh.
.LP
.eM
The
.PN XResizeWindow
function changes the inside dimensions of the specified window, not including
its borders.
This function does not change the window's upper-left coordinate or
the origin and does not restack the window.
Changing the size of a mapped window may lose its contents and generate
.PN Expose 
events.
If a mapped window is made smaller, 
changing its size generates
.PN Expose 
events on windows that the mapped window formerly obscured.
.LP
If the override-redirect flag of the window is 
.PN False 
and some
other client has selected 
.PN SubstructureRedirectMask 
on the parent, the X server generates a
.PN ConfigureRequest 
event, and no further processing is performed.  
If either width or height is zero,
a
.PN BadValue
error results.
.LP
.PN XResizeWindow
can generate
.PN BadValue
and
.PN BadWindow 
errors.
.LP
.sp
To change the size and location of a window, use 
.PN XMoveResizeWindow .
.IN "XMoveResizeWindow" "" "@DEF@"
.sM
.FD 0
XMoveResizeWindow\^(\^\fIdisplay\fP, \fIw\fP\^, \fIx\fP\^, \fIy\fP\^, \fIwidth\fP\^, \fIheight\fP\^)
.br
      Display *\fIdisplay\fP\^;
.br
      Window \fIw\fP\^;
.br
      int \fIx\fP\^, \fIy\fP\^;
.br
      unsigned int \fIwidth\fP\^, \fIheight\fP\^;
.FN
.IP \fIdisplay\fP 1i
Specifies the connection to the X server.
.ds Wi to be reconfigured
.IP \fIw\fP 1i
Specifies the window \*(Wi.
.ds Xy , which define the new position of the window relative to its parent
.IP \fIx\fP 1i
.br
.ns
.IP \fIy\fP 1i
Specify the x and y coordinates\*(Xy.
.ds Wh , which define the interior size of the window
.IP \fIwidth\fP 1i
.br
.ns
.IP \fIheight\fP 1i
Specify the width and height\*(Wh.
.LP
.eM
The
.PN XMoveResizeWindow
function changes the size and location of the specified window 
without raising it.
Moving and resizing a mapped window may generate an
.PN Expose 
event on the window.
Depending on the new size and location parameters,
moving and resizing a window may generate 
.PN Expose 
events on windows that the window formerly obscured. 
.LP
If the override-redirect flag of the window is 
.PN False 
and some
other client has selected 
.PN SubstructureRedirectMask 
on the parent, the X server generates a
.PN ConfigureRequest 
event, and no further processing is performed.  
Otherwise, the window size and location are changed.
.LP
.PN XMoveResizeWindow
can generate
.PN BadValue 
and
.PN BadWindow 
errors.
.LP
.sp
To change the border width of a given window, use
.PN XSetWindowBorderWidth .
.IN "XSetWindowBorderWidth" "" "@DEF@"
.sM
.FD 0
XSetWindowBorderWidth\^(\^\fIdisplay\fP, \fIw\fP, \fIwidth\fP\^)
.br
      Display *\fIdisplay\fP\^;
.br
      Window \fIw\fP\^;
.br
      unsigned int \fIwidth\fP\^;
.FN
.IP \fIdisplay\fP 1i
Specifies the connection to the X server.
.IP \fIw\fP 1i
Specifies the window.
.IP \fIwidth\fP 1i
Specifies the width of the window border.
.LP
.eM
The
.PN XSetWindowBorderWidth
function sets the specified window's border width to the specified width.
.LP
.PN XSetWindowBorderWidth
can generate a
.PN BadWindow 
error.
.NH 2
Changing Window Stacking Order
.XS
\*(SN Changing Window Stacking Order 
.XE
.LP
.LP
Xlib provides functions that you can use to raise, lower, circulate,
or restack windows.
.LP
.sp
To raise a window so that no sibling window obscures it, use 
.PN XRaiseWindow .
.IN "XRaiseWindow" "" "@DEF@"
.sM
.FD 0
XRaiseWindow\^(\^\fIdisplay\fP, \fIw\fP\^)
.br
      Display *\fIdisplay\fP\^;
.br
      Window \fIw\fP\^;
.FN
.IP \fIdisplay\fP 1i
Specifies the connection to the X server.
.IP \fIw\fP 1i
Specifies the window.
.LP
.eM
The
.PN XRaiseWindow
function
raises the specified window to the top of the stack so that no sibling window
obscures it.
If the windows are regarded as overlapping sheets of paper stacked 
on a desk,
then raising a window is analogous to moving the sheet to the top of
the stack but leaving its x and y location on the desk constant.
Raising a mapped window may generate 
.PN Expose
events for the window and any mapped subwindows that were formerly obscured.  
.LP
If the override-redirect attribute of the window is 
.PN False 
and some
other client has selected 
.PN SubstructureRedirectMask 
on the parent, the X server generates a
.PN ConfigureRequest 
event, and no processing is performed.
Otherwise, the window is raised.
.LP
.PN XRaiseWindow
can generate a
.PN BadWindow 
error.
.LP
.sp
To lower a window so that it does not obscure any sibling windows, use 
.PN XLowerWindow .
.IN "XLowerWindow" "" "@DEF@"
.sM
.FD 0
XLowerWindow\^(\^\fIdisplay\fP, \fIw\fP\^)
.br
      Display *\fIdisplay\fP\^;
.br
      Window \fIw\fP\^;
.FN
.IP \fIdisplay\fP 1i
Specifies the connection to the X server.
.IP \fIw\fP 1i
Specifies the window.
.LP
.eM
The
.PN XLowerWindow
function lowers the specified window to the bottom of the stack
so that it does not obscure any sibling
windows.
If the windows are regarded as overlapping sheets of paper
stacked on a desk, then lowering a window is analogous to moving the
sheet to the bottom of the stack but leaving its x and y location on
the desk constant.
Lowering a mapped window will generate 
.PN Expose 
events on any windows it formerly obscured.
.LP
If the override-redirect attribute of the window is 
.PN False 
and some
other client has selected 
.PN SubstructureRedirectMask 
on the parent, the X server generates a
.PN ConfigureRequest 
event, and no processing is performed.  
Otherwise, the window is lowered to the bottom of the
stack.
.LP
.PN XLowerWindow
can generate a
.PN BadWindow 
error.
.LP
.sp
To circulate a subwindow up or down, use
.PN XCirculateSubwindows .
.IN "XCirculateSubwindows" "" "@DEF@"
.sM
.FD 0
XCirculateSubwindows\^(\^\fIdisplay\fP, \fIw\fP\^, \fIdirection\fP\^)
.br
      Display *\fIdisplay\fP\^;
.br
      Window \fIw\fP\^;
.br
      int \fIdirection\fP\^;
.FN
.IP \fIdisplay\fP 1i
Specifies the connection to the X server.
.IP \fIw\fP 1i
Specifies the window.
.IP \fIdirection\fP 1i
Specifies the direction (up or down) that you want to circulate
the window. 
You can pass 
.PN RaiseLowest
or
.PN LowerHighest .
.LP
.eM
The
.PN XCirculateSubwindows
function circulates children of the specified window in the specified 
direction.
If you specify
.PN RaiseLowest ,
.PN XCirculateSubwindows
raises the lowest mapped child (if any) that is occluded 
by another child to the top of the stack.
If you specify
.PN LowerHighest ,
.PN XCirculateSubwindows
lowers the highest mapped child (if any) that occludes another child
to the bottom of the stack.
Exposure processing is then performed on formerly obscured windows.
If some other client has selected 
.PN SubstructureRedirectMask 
on the window, the X server generates a 
.PN CirculateRequest 
event, and no further processing is performed.
If a child is actually restacked,
the X server generates a
.PN CirculateNotify
event. 
.LP
.PN XCirculateSubwindows
can generate
.PN BadValue
and
.PN BadWindow 
errors.
.LP
.sp
To raise the lowest mapped child of a window that is partially or completely
occluded by another child, use
.PN XCirculateSubwindowsUp .
.IN "XCirculateSubwindowsUp" "" "@DEF@"
.sM
.FD 0
XCirculateSubwindowsUp\^(\^\fIdisplay\fP, \fIw\fP\^)
.br
      Display *\fIdisplay\fP\^;
.br
      Window \fIw\fP\^;
.FN
.IP \fIdisplay\fP 1i
Specifies the connection to the X server.
.IP \fIw\fP 1i
Specifies the window.
.LP
.eM
The
.PN XCirculateSubwindowsUp
function raises the lowest mapped child of the specified window that
is partially
or completely
occluded by another child.
Completely unobscured children are not affected.
This is a convenience function equivalent to
.PN XCirculateSubwindows
with
.PN RaiseLowest
specified.
.LP
.PN XCirculateSubwindowsUp
can generate a
.PN BadWindow 
error.
.LP
.sp
To lower the highest mapped child of a window that partially or 
completely occludes another child, use 
.PN XCirculateSubwindowsDown .
.IN "XCirculateSubwindowsDown" "" "@DEF@"
.sM
.FD 0
XCirculateSubwindowsDown\^(\^\fIdisplay\fP, \fIw\fP\^)
.br
      Display *\fIdisplay\fP\^;
.br
      Window \fIw\fP\^;
.FN
.IP \fIdisplay\fP 1i
Specifies the connection to the X server.
.IP \fIw\fP 1i
Specifies the window.
.LP
.eM
The
.PN XCirculateSubwindowsDown
function lowers the highest mapped child of the specified window that partially
or completely occludes another child.
Completely unobscured children are not affected.
This is a convenience function equivalent to
.PN XCirculateSubwindows
with
.PN LowerHighest
specified.
.LP
.PN XCirculateSubwindowsDown
can generate a
.PN BadWindow 
error.
.LP
.sp
To restack a set of windows from top to bottom, use 
.PN XRestackWindows .
.IN "XRestackWindows" "" "@DEF@"
.sM
.FD 0
XRestackWindows\^(\^\fIdisplay\fP, \fIwindows\fP\^, \^\fInwindows\fP\^);
.br
      Display *\fIdisplay\fP\^;
.br
      Window \fIwindows\fP\^[];
.br
      int \fInwindows\fP\^;
.FN
.IP \fIdisplay\fP 1i
Specifies the connection to the X server.
.IP \fIwindows\fP 1i
Specifies an array containing the windows to be restacked.
.IP \fInwindows\fP 1i
Specifies the number of windows to be restacked.
.LP
.eM
The
.PN XRestackWindows
function restacks the windows in the order specified,
from top to bottom.
The stacking order of the first window in the windows array is unaffected,
but the other windows in the array are stacked underneath the first window,
in the order of the array.
The stacking order of the other windows is not affected.
For each window in the window array that is not a child of the specified window,
a
.PN BadMatch
error results.
.LP
If the override-redirect attribute of a window is 
.PN False 
and some
other client has selected 
.PN SubstructureRedirectMask 
on the parent, the X server generates 
.PN ConfigureRequest 
events for each window whose override-redirect flag is not set, 
and no further processing is performed.
Otherwise, the windows will be restacked in top-to-bottom order.
.LP
.PN XRestackWindows
can generate a
.PN BadWindow 
error.
.NH 2
Changing Window Attributes
.XS
\*(SN Changing Window Attributes 
.XE
.LP
.LP
Xlib provides functions that you can use to set window attributes.
.PN XChangeWindowAttributes
is the more general function that allows you to set one or more window
attributes provided by the
.PN XSetWindowAttributes
structure.
The other functions described in this section allow you to set one specific
window attribute, such as a window's background.
.LP
.sp
To change one or more attributes for a given window, use
.PN XChangeWindowAttributes .
.IN "XChangeWindowAttributes" "" "@DEF@"
.sM
.FD 0
XChangeWindowAttributes\^(\^\fIdisplay\fP, \fIw\fP\^, \fIvaluemask\fP\^, \fIattributes\fP\^)
.br
      Display *\fIdisplay\fP\^;
.br
      Window \fIw\fP\^;
.br
      unsigned long \fIvaluemask\fP\^;
.br
      XSetWindowAttributes *\fIattributes\fP\^;
.FN
.IP \fIdisplay\fP 1i
Specifies the connection to the X server.
.IP \fIw\fP 1i
Specifies the window.
.IP \fIvaluemask\fP 1i
Specifies which window attributes are defined in the attributes
argument.
This mask is the bitwise inclusive OR of the valid attribute mask bits.
If valuemask is zero,
the attributes are ignored and are not referenced.
The values and restrictions are
the same as for
.PN XCreateWindow .
.IP
.IP \fIattributes\fP 1i
Specifies the structure from which the values (as specified by the value mask)
are to be taken.
The value mask should have the appropriate bits
set to indicate which attributes have been set in the structure 
(see section 3.2).
.LP
.eM
Depending on the valuemask,
the
.PN XChangeWindowAttributes
function uses the window attributes in the
.PN XSetWindowAttributes
structure to change the specified window attributes.
Changing the background does not cause the window contents to be
changed.
To repaint the window and its background, use 
.PN XClearWindow .
Setting the border or changing the background such that the
border tile origin changes causes the border to be repainted.
Changing the background of a root window to 
.PN None 
or 
.PN ParentRelative
restores the default background pixmap.
Changing the border of a root window to
.PN CopyFromParent
restores the default border pixmap.
Changing the win-gravity does not affect the current position of the
window.
Changing the backing-store of an obscured window to 
.PN WhenMapped 
or
.PN Always , 
or changing the backing-planes, backing-pixel, or
save-under of a mapped window may have no immediate effect.
Changing the colormap of a window (that is, defining a new map, not
changing the contents of the existing map) generates a 
.PN ColormapNotify
event.
Changing the colormap of a visible window may have no
immediate effect on the screen because the map may not be installed
(see
.PN XInstallColormap ).
Changing the cursor of a root window to 
.PN None 
restores the default
cursor.
Whenever possible, you are encouraged to share colormaps.
.LP
Multiple clients can select input on the same window. 
Their event masks are maintained separately.
When an event is generated, 
it is reported to all interested clients. 
However, only one client at a time can select for 
.PN SubstructureRedirectMask , 
.PN ResizeRedirectMask , 
and
.PN ButtonPressMask .
If a client attempts to select any of these event masks 
and some other client has already selected one, 
a
.PN BadAccess
error results.
There is only one do-not-propagate-mask for a window, 
not one per client.
.LP
.PN XChangeWindowAttributes
can generate
.PN BadAccess ,
.PN BadColor ,
.PN BadCursor ,
.PN BadMatch ,
.PN BadPixmap ,
.PN BadValue ,
and
.PN BadWindow 
errors.
.LP
.sp
To set the background of a window to a given pixel, use 
.PN XSetWindowBackground .
.IN "XSetWindowBackground" "" "@DEF@"
.sM
.FD 0
XSetWindowBackground\^(\^\fIdisplay\fP, \fIw\fP\^, \fIbackground_pixel\fP\^)
.br
      Display *\fIdisplay\fP\^;
.br
      Window \fIw\fP\^;
.br
      unsigned long \fIbackground_pixel\fP\^;
.FN
.IP \fIdisplay\fP 1i
Specifies the connection to the X server.
.IP \fIw\fP 1i
Specifies the window.
.IP \fIbackground_pixel\fP 1i
Specifies the pixel that is to be used for the background.
.LP
.eM
The
.PN XSetWindowBackground
function sets the background of the window to the specified pixel value.
Changing the background does not cause the window contents to be changed.
.PN XSetWindowBackground
uses a pixmap of undefined size filled with the pixel value you passed.
If you try to change the background of an 
.PN InputOnly
window, a
.PN BadMatch
error results.
.LP
.PN XSetWindowBackground
can generate
.PN BadMatch
and
.PN BadWindow 
errors.
.LP
.sp
.LP
To set the background of a window to a given pixmap, use 
.PN XSetWindowBackgroundPixmap .
.IN "Window" "background"
.IN "XSetWindowBackgroundPixmap" "" "@DEF@"
.sM
.FD 0
XSetWindowBackgroundPixmap\^(\^\fIdisplay\fP, \fIw\fP\^, \fIbackground_pixmap\fP\^)
.br
      Display *\fIdisplay\fP\^;
.br
      Window \fIw\fP\^;
.br
      Pixmap \fIbackground_pixmap\fP\^;
.FN
.IP \fIdisplay\fP 1i
Specifies the connection to the X server.
.IP \fIw\fP 1i
Specifies the window.
.IP \fIbackground_pixmap\fP 1i
Specifies the background pixmap,
.PN ParentRelative ,
or
.PN None .
.LP
.eM
.IN "Resource IDs" "freeing"
.IN "Freeing" "resources"
The
.PN XSetWindowBackgroundPixmap
function sets the background pixmap of the window to the specified pixmap.
The background pixmap can immediately be freed if no further explicit
references to it are to be made.
If 
.PN ParentRelative
is specified, 
the background pixmap of the window's parent is used,
or on the root window, the default background is restored.
If you try to change the background of an 
.PN InputOnly
window, a
.PN BadMatch
error results.
If the background is set to
.PN None ,
the window has no defined background.
.LP
.PN XSetWindowBackgroundPixmap
can generate
.PN BadMatch ,
.PN BadPixmap ,
and 
.PN BadWindow 
errors.
.NT Note
.PN XSetWindowBackground
and
.PN XSetWindowBackgroundPixmap
do not change the current contents of the window.
.NE
.LP
.sp
To change and repaint a window's border to a given pixel, use 
.PN XSetWindowBorder .
.IN "XSetWindowBorder" "" "@DEF@"
.sM
.FD 0
XSetWindowBorder\^(\^\fIdisplay\fP, \fIw\fP\^, \fIborder_pixel\fP\^)
.br
      Display *\fIdisplay\fP\^;
.br
      Window \fIw\fP\^;
.br
      unsigned long \fIborder_pixel\fP\^;
.FN
.IP \fIdisplay\fP 1i
Specifies the connection to the X server.
.IP \fIw\fP 1i
Specifies the window.
.IP \fIborder_pixel\fP 1i
Specifies the entry in the colormap. 
.LP
.eM
The
.PN XSetWindowBorder
function sets the border of the window to the pixel value you specify.
If you attempt to perform this on an
.PN InputOnly
window, a
.PN BadMatch
error results.
.LP
.PN XSetWindowBorder
can generate
.PN BadMatch 
and
.PN BadWindow 
errors.
.LP
.sp
To change and repaint the border tile of a given window, use 
.PN XSetWindowBorderPixmap .
.IN "XSetWindowBorderPixmap" "" "@DEF@"
.sM
.FD 0
XSetWindowBorderPixmap\^(\^\fIdisplay\fP, \fIw\fP\^, \fIborder_pixmap\fP\^)
.br
      Display *\fIdisplay\fP\^;
.br
      Window \fIw\fP\^;
.br
      Pixmap \fIborder_pixmap\fP\^;
.FN
.IP \fIdisplay\fP 1i
Specifies the connection to the X server.
.IP \fIw\fP 1i
Specifies the window.
.IP \fIborder_pixmap\fP 1i
Specifies the border pixmap or
.PN CopyFromParent .
.LP
.eM
The
.PN XSetWindowBorderPixmap
function sets the border pixmap of the window to the pixmap you specify.
The border pixmap can be freed immediately if no further explicit
references to it are to be made.
If you specify
.PN CopyFromParent ,
a copy of the parent window's border pixmap is used.
If you attempt to perform this on an
.PN InputOnly
window, a
.PN BadMatch
error results.
.IN "Resource IDs" "freeing"
.IN "Freeing" "resources"
.LP
.PN XSetWindowBorderPixmap
can generate
.PN BadMatch ,
.PN BadPixmap ,
and
.PN BadWindow 
errors.
.LP
.sp
To set the colormap of a given window, use
.PN XSetWindowColormap .
.IN "XSetWindowColormap" "" "@DEF@"
.sM
.FD 0
XSetWindowColormap\^(\^\fIdisplay\fP, \fIw\fP\^, \fIcolormap\fP\^)
.br
      Display *\fIdisplay\fP\^;
.br
      Window \fIw\fP\^;
.br
      Colormap \fIcolormap\fP\^;
.FN
.IP \fIdisplay\fP 1i
Specifies the connection to the X server.
.IP \fIw\fP 1i
Specifies the window.
.IP \fIcolormap\fP 1i
Specifies the colormap.
.LP
.eM
The
.PN XSetWindowColormap
function sets the specified colormap of the specified window.
The colormap must have the same visual type as the window,
or a
.PN BadMatch
error results.
.LP
.PN XSetWindowColormap
can generate
.PN BadColor ,
.PN BadMatch ,
and
.PN BadWindow 
errors.
.LP
.sp
To define which cursor will be used in a window, use
.PN XDefineCursor .
.IN "Window" "defining the cursor"
.IN "XDefineCursor" "" "@DEF@"
.sM
.FD 0
XDefineCursor\^(\^\fIdisplay\fP, \fIw\fP\^, \fIcursor\fP\^)
.br
      Display *\fIdisplay\fP\^;
.br
      Window \fIw\fP\^;
.br
      Cursor \fIcursor\fP\^;
.FN
.IP \fIdisplay\fP 1i
Specifies the connection to the X server.
.IP \fIw\fP 1i
Specifies the window.
.IP \fIcursor\fP 1i
Specifies the cursor that is to be displayed or
.PN None .
.LP
.eM
If a cursor is set, it will be used when the pointer is in the window.
If the cursor is
.PN None ,
it is equivalent to
.PN XUndefineCursor .
.LP
.PN XDefineCursor
can generate
.PN BadCursor
and
.PN BadWindow 
errors.
.LP
.sp
To undefine the cursor in a given window, use
.PN XUndefineCursor .
.IN "Window" "undefining the cursor"
.IN "XUndefineCursor" "" "@DEF@"
.sM
.FD 0
XUndefineCursor\^(\^\fIdisplay\fP, \fIw\fP\^)
.br
      Display *\fIdisplay\fP\^;
.br
      Window \fIw\fP\^;
.FN
.IP \fIdisplay\fP 1i
Specifies the connection to the X server.
.IP \fIw\fP 1i
Specifies the window.
.LP
.eM
The
.PN XUndefineCursor
function undoes the effect of a previous
.PN XDefineCursor
for this window.
When the pointer is in the window,
the parent's cursor will now be used.
On the root window,
the default cursor is restored.
.LP
.PN XUndefineCursor
can generate a
.PN BadWindow 
error.
.bp
