diff options
Diffstat (limited to 'libX11/specs/libX11/CH03')
-rw-r--r-- | libX11/specs/libX11/CH03 | 3121 |
1 files changed, 3121 insertions, 0 deletions
diff --git a/libX11/specs/libX11/CH03 b/libX11/specs/libX11/CH03 new file mode 100644 index 000000000..f7eb2d4c0 --- /dev/null +++ b/libX11/specs/libX11/CH03 @@ -0,0 +1,3121 @@ +.\" 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 |