aboutsummaryrefslogtreecommitdiff
path: root/libX11/specs/libX11/CH14
diff options
context:
space:
mode:
Diffstat (limited to 'libX11/specs/libX11/CH14')
-rw-r--r--libX11/specs/libX11/CH143590
1 files changed, 3590 insertions, 0 deletions
diff --git a/libX11/specs/libX11/CH14 b/libX11/specs/libX11/CH14
new file mode 100644
index 000000000..34c09da8b
--- /dev/null
+++ b/libX11/specs/libX11/CH14
@@ -0,0 +1,3590 @@
+.\" 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 14\fP\s-1
+
+\s+1\fBInter-Client Communication Functions\fP\s-1
+.sp 2
+.nr H1 14
+.nr H2 0
+.nr H3 0
+.nr H4 0
+.nr H5 0
+.na
+.LP
+.XS
+Chapter 14: Inter-Client Communication Functions
+.XE
+The \fIInter-Client Communication Conventions Manual\fP,
+hereafter referred to as the ICCCM, details the
+X Consortium approved conventions that govern inter-client communications.
+These conventions ensure peer-to-peer client cooperation in the use
+of selections, cut buffers, and shared resources as well as client cooperation
+with window and session managers.
+For further information,
+see the \fIInter-Client Communication Conventions Manual\fP.
+.LP
+Xlib provides a number of standard properties and programming interfaces
+that are ICCCM compliant.
+The predefined atoms for some of these properties are defined in the
+.hN X11/Xatom.h
+header file, where
+to avoid name conflicts with user symbols their
+.PN #define
+name has an XA_ prefix.
+For further information about atoms and properties,
+see section 4.3.
+.LP
+Xlib's selection and cut buffer mechanisms provide the primary programming
+interfaces by which peer client applications communicate with each other
+(see sections 4.5 and 16.6).
+The functions discussed in this chapter provide
+the primary programming interfaces by which client applications communicate
+with their window and session managers as well as share standard colormaps.
+.LP
+The standard properties that are of special interest for communicating
+with window and session managers are:
+.IN "Atom" "predefined"
+.TS H
+lw(2i) lw(1.1i) lw(.4i) lw(2.25i)
+lw(2i) lw(1.1i) cw(.4i) lw(2.25i).
+_
+.sp 6p
+.B
+Name Type Format Description
+.sp 6p
+_
+.TH
+.R
+T{
+\s-1WM_CLASS\s+1
+T} T{
+\s-1STRING\s+1
+T} T{
+8
+T} T{
+Set by application programs to allow window and session
+managers to obtain the application's resources from the resource database.
+T}
+.sp 6p
+T{
+\s-1WM_CLIENT_MACHINE\s+1
+T} T{
+\s-1TEXT\s+1
+T} T{
+T} T{
+The string name of the machine on which the client application is running.
+T}
+.sp 6p
+T{
+\s-1WM_COLORMAP_WINDOWS\s+1
+T} T{
+\s-1WINDOW\s+1
+T} T{
+32
+T} T{
+The list of window IDs that may need a different colormap
+from that of their top-level window.
+T}
+.sp 6p
+T{
+\s-1WM_COMMAND\s+1
+T} T{
+\s-1TEXT\s+1
+T} T{
+T} T{
+The command and arguments, null-separated, used to invoke the
+application.
+T}
+.sp 6p
+T{
+\s-1WM_HINTS\s+1
+T} T{
+\s-1WM_HINTS\s+1
+T} T{
+32
+T} T{
+Additional hints set by the client for use by the window manager.
+The C type of this property is
+.PN XWMHints .
+T}
+.sp 6p
+T{
+\s-1WM_ICON_NAME\s+1
+T} T{
+\s-1TEXT\s+1
+T} T{
+T} T{
+The name to be used in an icon.
+T}
+.sp 6p
+T{
+\s-1WM_ICON_SIZE\s+1
+T} T{
+\s-1WM_ICON_SIZE\s+1
+T} T{
+32
+T} T{
+The window manager may set this property on the root window to
+specify the icon sizes it supports.
+The C type of this property is
+.PN XIconSize .
+T}
+.sp 6p
+T{
+\s-1WM_NAME\s+1
+T} T{
+\s-1TEXT\s+1
+T} T{
+T} T{
+The name of the application.
+T}
+.sp 6p
+T{
+\s-1WM_NORMAL_HINTS\s+1
+T} T{
+\s-1WM_SIZE_HINTS\s+1
+T} T{
+32
+T} T{
+Size hints for a window in its normal state.
+The C type of this property is
+.PN XSizeHints .
+T}
+.sp 6p
+T{
+\s-1WM_PROTOCOLS\s+1
+T} T{
+\s-1ATOM\s+1
+T} T{
+32
+T} T{
+List of atoms that identify the communications protocols between the
+client and window manager in which the client is willing to participate.
+T}
+.sp 6p
+T{
+\s-1WM_STATE\s+1
+T} T{
+\s-1WM_STATE\s+1
+T} T{
+32
+T} T{
+Intended for communication between window and session managers only.
+T}
+.sp 6p
+T{
+\s-1WM_TRANSIENT_FOR\s+1
+T} T{
+\s-1WINDOW\s+1
+T} T{
+32
+T} T{
+Set by application programs to indicate to the window manager that a transient
+top-level window, such as a dialog box.
+T}
+.sp 6p
+_
+.TE
+.LP
+The remainder of this chapter discusses:
+.IP \(bu 5
+Client to window manager communication
+.IP \(bu 5
+Client to session manager communication
+.IP \(bu 5
+Standard colormaps
+.NH 2
+Client to Window Manager Communication
+.XS
+\*(SN Client to Window Manager Communication
+.XE
+.LP
+This section discusses how to:
+.IP \(bu 5
+Manipulate top-level windows
+.IP \(bu 5
+Convert string lists
+.IP \(bu 5
+Set and read text properties
+.IP \(bu 5
+Set and read the WM_NAME property
+.IP \(bu 5
+Set and read the WM_ICON_NAME property
+.IP \(bu 5
+Set and read the WM_HINTS property
+.IP \(bu 5
+Set and read the WM_NORMAL_HINTS property
+.IP \(bu 5
+Set and read the WM_CLASS property
+.IP \(bu 5
+Set and read the WM_TRANSIENT_FOR property
+.IP \(bu 5
+Set and read the WM_PROTOCOLS property
+.IP \(bu 5
+Set and read the WM_COLORMAP_WINDOWS property
+.IP \(bu 5
+Set and read the WM_ICON_SIZE property
+.IP \(bu 5
+Use window manager convenience functions
+.NH 3
+Manipulating Top-Level Windows
+.XS
+\*(SN Manipulating Top-Level Windows
+.XE
+.LP
+Xlib provides functions that you can use to change the visibility or size
+of top-level windows (that is, those that were created as children
+of the root window).
+Note that the subwindows that you create are ignored by window managers.
+Therefore,
+you should use the basic window functions described in chapter 3
+to manipulate your application's subwindows.
+.LP
+To request that a top-level window be iconified, use
+.PN XIconifyWindow .
+.IN "XIconifyWindow" "" "@DEF@"
+.sM
+.FD 0
+Status XIconifyWindow\^(\^\fIdisplay\fP, \fIw\fP, \fIscreen_number\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIw\fP;
+.br
+ int \fIscreen_number\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIw\fP 1i
+Specifies the window.
+.IP \fIscreen_number\fP 1i
+Specifies the appropriate screen number on the host server.
+.LP
+.eM
+The
+.PN XIconifyWindow
+function sends a WM_CHANGE_STATE
+.PN ClientMessage
+event with a format of 32 and a first data element of
+.PN IconicState
+(as described in section 4.1.4 of the
+\fIInter-Client Communication Conventions Manual\fP)
+and a window of w
+to the root window of the specified screen
+with an event mask set to
+.PN SubstructureNotifyMask |
+.PN SubstructureRedirectMask .
+Window managers may elect to receive this message and
+if the window is in its normal state,
+may treat it as a request to change the window's state from normal to iconic.
+If the WM_CHANGE_STATE property cannot be interned,
+.PN XIconifyWindow
+does not send a message and returns a zero status.
+It returns a nonzero status if the client message is sent successfully;
+otherwise, it returns a zero status.
+.sp
+.LP
+To request that a top-level window be withdrawn, use
+.PN XWithdrawWindow .
+.IN "XWithdrawWindow" "" "@DEF@"
+.sM
+.FD 0
+Status XWithdrawWindow\^(\^\fIdisplay\fP, \fIw\fP, \fIscreen_number\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIw\fP\^;
+.br
+ int \fIscreen_number\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIw\fP 1i
+Specifies the window.
+.IP \fIscreen_number\fP 1i
+Specifies the appropriate screen number on the host server.
+.LP
+.eM
+The
+.PN XWithdrawWindow
+function unmaps the specified window
+and sends a synthetic
+.PN UnmapNotify
+event to the root window of the specified screen.
+Window managers may elect to receive this message
+and may treat it as a request to change the window's state to withdrawn.
+When a window is in the withdrawn state,
+neither its normal nor its iconic representations is visible.
+It returns a nonzero status if the
+.PN UnmapNotify
+event is successfully sent;
+otherwise, it returns a zero status.
+.LP
+.PN XWithdrawWindow
+can generate a
+.PN BadWindow
+error.
+.sp
+.LP
+To request that a top-level window be reconfigured, use
+.PN XReconfigureWMWindow .
+.IN "XReconfigureWMWindow" "" "@DEF@"
+.sM
+.FD 0
+Status XReconfigureWMWindow\^(\^\fIdisplay\fP, \fIw\fP, \fIscreen_number\fP, \
+\fIvalue_mask\fP, \fIvalues\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIw\fP\^;
+.br
+ int \fIscreen_number\fP\^;
+.br
+ unsigned int \fIvalue_mask\fP\^;
+.br
+ XWindowChanges *\fIvalues\fP;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIw\fP 1i
+Specifies the window.
+.IP \fIscreen_number\fP 1i
+Specifies the appropriate screen number on the host server.
+.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 XReconfigureWMWindow
+function issues a
+.PN ConfigureWindow
+request on the specified top-level window.
+If the stacking mode is changed and the request fails with a
+.PN BadMatch
+error,
+the error is trapped by Xlib and a synthetic
+.PN ConfigureRequestEvent
+containing the same configuration parameters is sent to the root
+of the specified window.
+Window managers may elect to receive this event
+and treat it as a request to reconfigure the indicated window.
+It returns a nonzero status if the request or event is successfully sent;
+otherwise, it returns a zero status.
+.LP
+.PN XReconfigureWMWindow
+can generate
+.PN BadValue
+and
+.PN BadWindow
+errors.
+.NH 3
+Converting String Lists
+.XS
+\*(SN Converting String Lists
+.XE
+.LP
+Many of the text properties allow a variety of types and formats.
+Because the data stored in these properties are not
+simple null-terminated strings, an
+.PN XTextProperty
+structure is used to describe the encoding, type, and length of the text
+as well as its value.
+The
+.PN XTextProperty
+structure contains:
+.IN "XTextProperty" "" "@DEF@"
+.sM
+.Ds 0
+.TA .5i 2.5i
+.ta .5i 2.5i
+typedef struct {
+ unsigned char *value; /* property data */
+ Atom encoding; /* type of property */
+ int format; /* 8, 16, or 32 */
+ unsigned long nitems; /* number of items in value */
+} XTextProperty;
+.De
+.LP
+.eM
+Xlib provides functions to convert localized text to or from encodings
+that support the inter-client communication conventions for text.
+In addition, functions are provided for converting between lists of pointers
+to character strings and text properties in the STRING encoding.
+.LP
+The functions for localized text return a signed integer error status
+that encodes
+.PN Success
+as zero, specific error conditions as negative numbers, and partial conversion
+as a count of unconvertible characters.
+.LP
+.IN "XICCEncodingStyle" "" "@DEF@"
+.sM
+.TS
+lw(.5i) lw(2i) lw(2.5i).
+T{
+#define
+T} T{
+.PN XNoMemory
+T} T{
+\-1
+T}
+T{
+#define
+T} T{
+.PN XLocaleNotSupported
+T} T{
+\-2
+T}
+T{
+#define
+T} T{
+.PN XConverterNotFound
+T} T{
+\-3
+T}
+.TE
+.Ds 0
+.TA .5i 2.5i
+.ta .5i 2.5i
+typedef enum {
+ XStringStyle, /* STRING */
+ XCompoundTextStyle, /* COMPOUND_TEXT */
+ XTextStyle, /* text in owner's encoding (current locale) */
+ XStdICCTextStyle /* STRING, else COMPOUND_TEXT */
+} XICCEncodingStyle;
+.De
+.LP
+.eM
+.sp
+.LP
+To convert a list of text strings to an
+.PN XTextProperty
+structure, use
+.PN XmbTextListToTextProperty
+or
+.PN XwcTextListToTextProperty .
+.IN "XmbTextListToTextProperty" "" "@DEF@"
+.IN "XwcTextListToTextProperty" "" "@DEF@"
+.sM
+.FD 0
+int XmbTextListToTextProperty\^(\^\fIdisplay\fP\^, \fIlist\fP\^, \fIcount\fP\^, \fIstyle\fP\^, \fItext_prop_return\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ char **\fIlist\fP\^;
+.br
+ int \fIcount\fP\^;
+.br
+ XICCEncodingStyle \fIstyle\fP\^;
+.br
+ XTextProperty *\fItext_prop_return\fP\^;
+.FN
+.FD 0
+int XwcTextListToTextProperty\^(\^\fIdisplay\fP\^, \fIlist\fP\^, \fIcount\fP\^, \fIstyle\fP\^, \fItext_prop_return\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ wchar_t **\fIlist\fP\^;
+.br
+ int \fIcount\fP\^;
+.br
+ XICCEncodingStyle \fIstyle\fP\^;
+.br
+ XTextProperty *\fItext_prop_return\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIlist\fP 1i
+Specifies a list of null-terminated character strings.
+.IP \fIcount\fP 1i
+Specifies the number of strings specified.
+.IP \fIstyle\fP 1i
+Specifies the manner in which the property is encoded.
+.IP \fItext_prop_return\fP 1i
+Returns the
+.PN XTextProperty
+structure.
+.LP
+.eM
+The
+.PN XmbTextListToTextProperty
+and
+.PN XwcTextListToTextProperty
+functions set the specified
+.PN XTextProperty
+value to a set of null-separated elements representing the concatenation
+of the specified list of null-terminated text strings.
+A final terminating null is stored at the end of the value field
+of text_prop_return but is not included in the nitems member.
+.LP
+The functions set the encoding field of text_prop_return to an
+.PN Atom
+for the specified display
+naming the encoding determined by the specified style
+and convert the specified text list to this encoding for storage in
+the text_prop_return value field.
+If the style
+.PN XStringStyle
+or
+.PN XCompoundTextStyle
+is specified,
+this encoding is ``STRING'' or ``COMPOUND_TEXT'', respectively.
+If the style
+.PN XTextStyle
+is specified,
+this encoding is the encoding of the current locale.
+If the style
+.PN XStdICCTextStyle
+is specified,
+this encoding is ``STRING'' if the text is fully convertible to STRING,
+else ``COMPOUND_TEXT''.
+.LP
+If insufficient memory is available for the new value string,
+the functions return
+.PN XNoMemory .
+If the current locale is not supported,
+the functions return
+.PN XLocaleNotSupported .
+In both of these error cases,
+the functions do not set text_prop_return.
+.LP
+To determine if the functions are guaranteed not to return
+.PN XLocaleNotSupported ,
+use
+.PN XSupportsLocale .
+.LP
+If the supplied text is not fully convertible to the specified encoding,
+the functions return the number of unconvertible characters.
+Each unconvertible character is converted to an implementation-defined and
+encoding-specific default string.
+Otherwise, the functions return
+.PN Success .
+Note that full convertibility to all styles except
+.PN XStringStyle
+is guaranteed.
+.LP
+To free the storage for the value field, use
+.PN XFree .
+.sp
+.LP
+To obtain a list of text strings from an
+.PN XTextProperty
+structure, use
+.PN XmbTextPropertyToTextList
+or
+.PN XwcTextPropertyToTextList .
+.IN "XmbTextPropertyToTextList" "" "@DEF@"
+.IN "XwcTextPropertyToTextList" "" "@DEF@"
+.sM
+.FD 0
+int XmbTextPropertyToTextList\^(\^\fIdisplay\fP\^, \fItext_prop\fP\^, \fIlist_return\fP\^, \fIcount_return\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ XTextProperty *\fItext_prop\fP\^;
+.br
+ char ***\fIlist_return\fP\^;
+.br
+ int *\fIcount_return\fP\^;
+.FN
+.FD 0
+int XwcTextPropertyToTextList\^(\^\fIdisplay\fP\^, \fItext_prop\fP\^, \fIlist_return\fP\^, \fIcount_return\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ XTextProperty *\fItext_prop\fP\^;
+.br
+ wchar_t ***\fIlist_return\fP\^;
+.br
+ int *\fIcount_return\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fItext_prop\fP 1i
+Specifies the
+.PN XTextProperty
+structure to be used.
+.IP \fIlist_return\fP 1i
+Returns a list of null-terminated character strings.
+.ds Cn strings
+.IP \fIcount_return\fP 1i
+Returns the number of \*(Cn.
+.LP
+.eM
+The
+.PN XmbTextPropertyToTextList
+and
+.PN XwcTextPropertyToTextList
+functions return a list of text strings in the current locale representing the
+null-separated elements of the specified
+.PN XTextProperty
+structure.
+The data in text_prop must be format 8.
+.LP
+Multiple elements of the property (for example, the strings in a disjoint
+text selection) are separated by a null byte.
+The contents of the property are not required to be null-terminated;
+any terminating null should not be included in text_prop.nitems.
+.LP
+If insufficient memory is available for the list and its elements,
+.PN XmbTextPropertyToTextList
+and
+.PN XwcTextPropertyToTextList
+return
+.PN XNoMemory .
+If the current locale is not supported,
+the functions return
+.PN XLocaleNotSupported .
+Otherwise, if the encoding field of text_prop is not convertible
+to the encoding of the current locale,
+the functions return
+.PN XConverterNotFound .
+For supported locales,
+existence of a converter from COMPOUND_TEXT, STRING
+or the encoding of the current locale is guaranteed if
+.PN XSupportsLocale
+returns
+.PN True
+for the current locale (but the actual text
+may contain unconvertible characters).
+Conversion of other encodings is implementation-dependent.
+In all of these error cases,
+the functions do not set any return values.
+.LP
+Otherwise,
+.PN XmbTextPropertyToTextList
+and
+.PN XwcTextPropertyToTextList
+return the list of null-terminated text strings to list_return
+and the number of text strings to count_return.
+.LP
+If the value field of text_prop is not fully convertible to the encoding of
+the current locale,
+the functions return the number of unconvertible characters.
+Each unconvertible character is converted to a string in the
+current locale that is specific to the current locale.
+To obtain the value of this string,
+use
+.PN XDefaultString .
+Otherwise,
+.PN XmbTextPropertyToTextList
+and
+.PN XwcTextPropertyToTextList
+return
+.PN Success .
+.LP
+To free the storage for the list and its contents returned by
+.PN XmbTextPropertyToTextList ,
+use
+.PN XFreeStringList .
+To free the storage for the list and its contents returned by
+.PN XwcTextPropertyToTextList ,
+use
+.PN XwcFreeStringList .
+.sp
+.LP
+To free the in-memory data associated with the specified
+wide character string list, use
+.PN XwcFreeStringList .
+.IN "XwcFreeStringList" "" "@DEF@"
+.sM
+.FD 0
+void XwcFreeStringList\^(\^\fIlist\fP\^)
+.br
+ wchar_t **\fIlist\fP\^;
+.FN
+.IP \fIlist\fP 1i
+Specifies the list of strings to be freed.
+.LP
+.eM
+The
+.PN XwcFreeStringList
+function frees memory allocated by
+.PN XwcTextPropertyToTextList .
+.sp
+.LP
+To obtain the default string for text conversion in the current locale,
+use
+.PN XDefaultString .
+.IN "XDefaultString" "" "@DEF@"
+.sM
+.FD 0
+char *XDefaultString\^(\|)
+.FN
+.LP
+.eM
+The
+.PN XDefaultString
+function returns the default string used by Xlib for text conversion
+(for example, in
+.PN XmbTextPropertyToTextList ).
+The default string is the string in the current locale that is output
+when an unconvertible character is found during text conversion.
+If the string returned by
+.PN XDefaultString
+is the empty string ("\^"),
+no character is output in the converted text.
+.PN XDefaultString
+does not return NULL.
+.LP
+The string returned by
+.PN XDefaultString
+is independent of the default string for text drawing;
+see
+.PN XCreateFontSet
+to obtain the default string for an
+.PN XFontSet .
+.LP
+The behavior when an invalid codepoint is supplied to any Xlib function is
+undefined.
+.LP
+The returned string is null-terminated.
+It is owned by Xlib and should not be modified or freed by the client.
+It may be freed after the current locale is changed.
+Until freed, it will not be modified by Xlib.
+.sp
+.LP
+To set the specified list of strings in the STRING encoding to a
+.PN XTextProperty
+structure, use
+.PN XStringListToTextProperty .
+.IN "XStringListToTextProperty" "" "@DEF@"
+.sM
+.FD 0
+Status XStringListToTextProperty\^(\^\fIlist\fP, \fIcount\fP, \
+\fItext_prop_return\fP\^)
+.br
+ char **\fIlist\fP\^;
+.br
+ int \fIcount\fP\^;
+.br
+ XTextProperty *\fItext_prop_return\fP\^;
+.FN
+.IP \fIlist\fP 1i
+Specifies a list of null-terminated character strings.
+.ds Cn strings
+.IP \fIcount\fP 1i
+Specifies the number of \*(Cn.
+.IP \fItext_prop_return\fP 1i
+Returns the
+.PN XTextProperty
+structure.
+.LP
+.eM
+The
+.PN XStringListToTextProperty
+function sets the specified
+.PN XTextProperty
+to be of type STRING (format 8) with a value representing the
+concatenation of the specified list of null-separated character strings.
+An extra null byte (which is not included in the nitems member)
+is stored at the end of the value field of text_prop_return.
+The strings are assumed (without verification) to be in the STRING encoding.
+If insufficient memory is available for the new value string,
+.PN XStringListToTextProperty
+does not set any fields in the
+.PN XTextProperty
+structure and returns a zero status.
+Otherwise, it returns a nonzero status.
+To free the storage for the value field, use
+.PN XFree .
+.sp
+.LP
+To obtain a list of strings from a specified
+.PN XTextProperty
+structure in the STRING encoding, use
+.PN XTextPropertyToStringList .
+.IN "XTextPropertyToStringList" "" "@DEF@"
+.sM
+.FD 0
+Status XTextPropertyToStringList\^(\^\fItext_prop\fP, \fIlist_return\fP, \
+\fIcount_return\fP\^)
+.br
+ XTextProperty *\fItext_prop\fP\^;
+.br
+ char ***\fIlist_return\fP\^;
+.br
+ int *\fIcount_return\fP\^;
+.FN
+.IP \fItext_prop\fP 1i
+Specifies the
+.PN XTextProperty
+structure to be used.
+.IP \fIlist_return\fP 1i
+Returns a list of null-terminated character strings.
+.ds Cn strings
+.IP \fIcount_return\fP 1i
+Returns the number of \*(Cn.
+.LP
+.eM
+The
+.PN XTextPropertyToStringList
+function returns a list of strings representing the null-separated elements
+of the specified
+.PN XTextProperty
+structure.
+The data in text_prop must be of type STRING and format 8.
+Multiple elements of the property
+(for example, the strings in a disjoint text selection)
+are separated by NULL (encoding 0).
+The contents of the property are not null-terminated.
+If insufficient memory is available for the list and its elements,
+.PN XTextPropertyToStringList
+sets no return values and returns a zero status.
+Otherwise, it returns a nonzero status.
+To free the storage for the list and its contents, use
+.PN XFreeStringList .
+.sp
+.LP
+To free the in-memory data associated with the specified string list, use
+.PN XFreeStringList .
+.IN "XFreeStringList" "" "@DEF@"
+.sM
+.FD 0
+void XFreeStringList\^(\^\fIlist\fP\^)
+.br
+ char **\fIlist\fP\^;
+.FN
+.IP \fIlist\fP 1i
+Specifies the list of strings to be freed.
+.LP
+.eM
+The
+.PN XFreeStringList
+function releases memory allocated by
+.PN XmbTextPropertyToTextList
+and
+.PN XTextPropertyToStringList
+and the missing charset list allocated by
+.PN XCreateFontSet .
+.NH 3
+Setting and Reading Text Properties
+.XS
+\*(SN Setting and Reading Text Properties
+.XE
+.LP
+Xlib provides two functions that you can use to set and read
+the text properties for a given window.
+You can use these functions to set and read those properties of type TEXT
+(WM_NAME, WM_ICON_NAME, WM_COMMAND, and WM_CLIENT_MACHINE).
+In addition,
+Xlib provides separate convenience functions that you can use to set each
+of these properties.
+For further information about these convenience functions,
+see sections 14.1.4, 14.1.5, 14.2.1, and 14.2.2, respectively.
+.sp
+.LP
+To set one of a window's text properties, use
+.PN XSetTextProperty .
+.IN "XSetTextProperty" "" "@DEF@"
+.sM
+.FD 0
+void XSetTextProperty\^(\^\fIdisplay\fP, \fIw\fP, \fItext_prop\fP, \
+\fIproperty\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIw\fP\^;
+.br
+ XTextProperty *\fItext_prop\fP\^;
+.br
+ Atom \fIproperty\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIw\fP 1i
+Specifies the window.
+.IP \fItext_prop\fP 1i
+Specifies the
+.PN XTextProperty
+structure to be used.
+.IP \fIproperty\fP 1i
+Specifies the property name.
+.LP
+.eM
+The
+.PN XSetTextProperty
+function replaces the existing specified property for the named window
+with the data, type, format, and number of items determined
+by the value field, the encoding field, the format field,
+and the nitems field, respectively, of the specified
+.PN XTextProperty
+structure.
+If the property does not already exist,
+.PN XSetTextProperty
+sets it for the specified window.
+.LP
+.PN XSetTextProperty
+can generate
+.PN BadAlloc ,
+.PN BadAtom ,
+.PN BadValue ,
+and
+.PN BadWindow
+errors.
+.sp
+.LP
+To read one of a window's text properties, use
+.PN XGetTextProperty .
+.IN "XGetTextProperty" "" "@DEF@"
+.sM
+.FD 0
+Status XGetTextProperty\^(\^\fIdisplay\fP, \fIw\fP, \fItext_prop_return\fP, \
+\fIproperty\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIw\fP\^;
+.br
+ XTextProperty *\fItext_prop_return\fP\^;
+.br
+ Atom \fIproperty\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIw\fP 1i
+Specifies the window.
+.IP \fItext_prop_return\fP 1i
+Returns the
+.PN XTextProperty
+structure.
+.IP \fIproperty\fP 1i
+Specifies the property name.
+.LP
+.eM
+The
+.PN XGetTextProperty
+function reads the specified property from the window
+and stores the data in the returned
+.PN XTextProperty
+structure.
+It stores the data in the value field,
+the type of the data in the encoding field,
+the format of the data in the format field,
+and the number of items of data in the nitems field.
+An extra byte containing null (which is not included in the nitems member)
+is stored at the end of the value field of text_prop_return.
+The particular interpretation of the property's encoding
+and data as text is left to the calling application.
+If the specified property does not exist on the window,
+.PN XGetTextProperty
+sets the value field to NULL,
+the encoding field to
+.PN None ,
+the format field to zero,
+and the nitems field to zero.
+.LP
+If it was able to read and store the data in the
+.PN XTextProperty
+structure,
+.PN XGetTextProperty
+returns a nonzero status;
+otherwise, it returns a zero status.
+.LP
+.PN XGetTextProperty
+can generate
+.PN BadAtom
+and
+.PN BadWindow
+errors.
+.NH 3
+Setting and Reading the WM_NAME Property
+.XS
+\*(SN Setting and Reading the WM_NAME Property
+.XE
+.LP
+Xlib provides convenience functions that you can use to set and read
+the WM_NAME property for a given window.
+.sp
+.LP
+To set a window's WM_NAME property with the supplied convenience function, use
+.PN XSetWMName .
+.IN "XSetWMName" "" "@DEF@"
+.sM
+.FD 0
+void XSetWMName\^(\^\fIdisplay\fP, \fIw\fP, \fItext_prop\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIw\fP\^;
+.br
+ XTextProperty *\fItext_prop\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIw\fP 1i
+Specifies the window.
+.IP \fItext_prop\fP 1i
+Specifies the
+.PN XTextProperty
+structure to be used.
+.LP
+.eM
+The
+.PN XSetWMName
+convenience function calls
+.PN XSetTextProperty
+to set the WM_NAME property.
+.sp
+.LP
+To read a window's WM_NAME property with the supplied convenience function, use
+.PN XGetWMName .
+.IN "XGetWMName" "" "@DEF@"
+.sM
+.FD 0
+Status XGetWMName\^(\^\fIdisplay\fP, \fIw\fP, \fItext_prop_return\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIw\fP\^;
+.br
+ XTextProperty *\fItext_prop_return\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIw\fP 1i
+Specifies the window.
+.IP \fItext_prop_return\fP 1i
+Returns the
+.PN XTextProperty
+structure.
+.LP
+.eM
+The
+.PN XGetWMName
+convenience function calls
+.PN XGetTextProperty
+to obtain the WM_NAME property.
+It returns a nonzero status on success;
+otherwise, it returns a zero status.
+.LP
+The following two functions have been superseded by
+.PN XSetWMName
+and
+.PN XGetWMName ,
+respectively.
+You can use these additional convenience functions
+for window names that are encoded as STRING properties.
+.sp
+.LP
+To assign a name to a window, use
+.PN XStoreName .
+.IN "Window" "name"
+.IN "XStoreName" "" "@DEF@"
+.sM
+.FD 0
+XStoreName\^(\^\fIdisplay\fP, \fIw\fP\^, \fIwindow_name\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIw\fP\^;
+.br
+ char *\fIwindow_name\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIw\fP 1i
+Specifies the window.
+.IP \fIwindow_name\fP 1i
+Specifies the window name,
+which should be a null-terminated string.
+.LP
+.eM
+The
+.PN XStoreName
+function assigns the name passed to window_name to the specified window.
+A window manager can display the window name in some prominent
+place, such as the title bar, to allow users to identify windows easily.
+Some window managers may display a window's name in the window's icon,
+although they are encouraged to use the window's icon name
+if one is provided by the application.
+If the string is not in the Host Portable Character Encoding,
+the result is implementation-dependent.
+.LP
+.PN XStoreName
+can generate
+.PN BadAlloc
+and
+.PN BadWindow
+errors.
+.LP
+.sp
+To get the name of a window, use
+.PN XFetchName .
+.IN "XFetchName" "" "@DEF@"
+.sM
+.FD 0
+Status XFetchName\^(\^\fIdisplay\fP, \fIw\fP\^, \fIwindow_name_return\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIw\fP\^;
+.br
+ char **\fIwindow_name_return\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIw\fP 1i
+Specifies the window.
+.IP \fIwindow_name_return\fP 1i
+Returns the window name, which is a null-terminated string.
+.LP
+.eM
+The
+.PN XFetchName
+function returns the name of the specified window.
+If it succeeds,
+it returns a nonzero status;
+otherwise, no name has been set for the window,
+and it returns zero.
+If the WM_NAME property has not been set for this window,
+.PN XFetchName
+sets window_name_return to NULL.
+If the data returned by the server is in the Latin Portable Character Encoding,
+then the returned string is in the Host Portable Character Encoding.
+Otherwise, the result is implementation-dependent.
+When finished with it, a client must free
+the window name string using
+.PN XFree .
+.LP
+.PN XFetchName
+can generate a
+.PN BadWindow
+error.
+.NH 3
+Setting and Reading the WM_ICON_NAME Property
+.XS
+\*(SN Setting and Reading the WM_ICON_NAME Property
+.XE
+.LP
+Xlib provides convenience functions that you can use to set and read
+the WM_ICON_NAME property for a given window.
+.LP
+.sp
+To set a window's WM_ICON_NAME property,
+use
+.PN XSetWMIconName .
+.IN "XSetWMIconName" "" "@DEF@"
+.sM
+.FD 0
+void XSetWMIconName\^(\^\fIdisplay\fP, \fIw\fP, \fItext_prop\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIw\fP\^;
+.br
+ XTextProperty *\fItext_prop\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIw\fP 1i
+Specifies the window.
+.IP \fItext_prop\fP 1i
+Specifies the
+.PN XTextProperty
+structure to be used.
+.LP
+.eM
+The
+.PN XSetWMIconName
+convenience function calls
+.PN XSetTextProperty
+to set the WM_ICON_NAME property.
+.sp
+.LP
+To read a window's WM_ICON_NAME property,
+use
+.PN XGetWMIconName .
+.IN "XGetWMIconName" "" "@DEF@"
+.sM
+.FD 0
+Status XGetWMIconName\^(\^\fIdisplay\fP, \fIw\fP, \fItext_prop_return\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIw\fP\^;
+.br
+ XTextProperty *\fItext_prop_return\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIw\fP 1i
+Specifies the window.
+.IP \fItext_prop_return\fP 1i
+Returns the
+.PN XTextProperty
+structure.
+.LP
+.eM
+The
+.PN XGetWMIconName
+convenience function calls
+.PN XGetTextProperty
+to obtain the WM_ICON_NAME property.
+It returns a nonzero status on success;
+otherwise, it returns a zero status.
+.LP
+The next two functions have been superseded by
+.PN XSetWMIconName
+and
+.PN XGetWMIconName ,
+respectively.
+You can use these additional convenience functions
+for window names that are encoded as STRING properties.
+.sp
+.LP
+.sp
+To set the name to be displayed in a window's icon, use
+.PN XSetIconName .
+.IN "Window" "icon name"
+.IN "XSetIconName" "" "@DEF@"
+.sM
+.FD 0
+XSetIconName\^(\^\fIdisplay\fP, \fIw\fP\^, \fIicon_name\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIw\fP\^;
+.br
+ char *\fIicon_name\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIw\fP 1i
+Specifies the window.
+.IP \fIicon_name\fP 1i
+Specifies the icon name,
+which should be a null-terminated string.
+.LP
+.eM
+If the string is not in the Host Portable Character Encoding,
+the result is implementation-dependent.
+.PN XSetIconName
+can generate
+.PN BadAlloc
+and
+.PN BadWindow
+errors.
+.LP
+.sp
+To get the name a window wants displayed in its icon, use
+.PN XGetIconName .
+.IN "XGetIconName" "" "@DEF@"
+.sM
+.FD 0
+Status XGetIconName\^(\^\fIdisplay\fP, \fIw\fP\^, \fIicon_name_return\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIw\fP\^;
+.br
+ char **\fIicon_name_return\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIw\fP 1i
+Specifies the window.
+.IP \fIicon_name_return\fP 1i
+Returns the window's icon name,
+which is a null-terminated string.
+.LP
+.eM
+The
+.PN XGetIconName
+function returns the name to be displayed in the specified window's icon.
+If it succeeds, it returns a nonzero status; otherwise,
+if no icon name has been set for the window,
+it returns zero.
+If you never assigned a name to the window,
+.PN XGetIconName
+sets icon_name_return to NULL.
+If the data returned by the server is in the Latin Portable Character Encoding,
+then the returned string is in the Host Portable Character Encoding.
+Otherwise, the result is implementation-dependent.
+When finished with it, a client must free
+the icon name string using
+.PN XFree .
+.LP
+.PN XGetIconName
+can generate a
+.PN BadWindow
+error.
+.NH 3
+Setting and Reading the WM_HINTS Property
+.XS
+\*(SN Setting and Reading the WM_HINTS Property
+.XE
+.LP
+Xlib provides functions that you can use to set and read
+the WM_HINTS property for a given window.
+These functions use the flags and the
+.PN XWMHints
+structure, as defined in the
+.hN X11/Xutil.h
+header file.
+.sp
+.LP
+To allocate an
+.PN XWMHints
+structure, use
+.PN XAllocWMHints .
+.IN "XAllocWMHints" "" "@DEF@"
+.sM
+.FD 0
+XWMHints *XAllocWMHints\^(\|)
+.FN
+.LP
+.eM
+The
+.PN XAllocWMHints
+function allocates and returns a pointer to an
+.PN XWMHints
+structure.
+Note that all fields in the
+.PN XWMHints
+structure are initially set to zero.
+If insufficient memory is available,
+.PN XAllocWMHints
+returns NULL.
+To free the memory allocated to this structure,
+use
+.PN XFree .
+.LP
+The
+.PN XWMHints
+structure contains:
+.LP
+.sM
+/* Window manager hints mask bits */
+.TS
+lw(.5i) lw(2.5i) lw(2.5i).
+T{
+#define
+T} T{
+.PN InputHint
+T} T{
+(1L << 0)
+T}
+T{
+#define
+T} T{
+.PN StateHint
+T} T{
+(1L << 1)
+T}
+T{
+#define
+T} T{
+.PN IconPixmapHint
+T} T{
+(1L << 2)
+T}
+T{
+#define
+T} T{
+.PN IconWindowHint
+T} T{
+(1L << 3)
+T}
+T{
+#define
+T} T{
+.PN IconPositionHint
+T} T{
+(1L << 4)
+T}
+T{
+#define
+T} T{
+.PN IconMaskHint
+T} T{
+(1L << 5)
+T}
+T{
+#define
+T} T{
+.PN WindowGroupHint
+T} T{
+(1L << 6)
+T}
+T{
+#define
+T} T{
+.PN UrgencyHint
+T} T{
+(1L << 8)
+T}
+T{
+#define
+T} T{
+.PN AllHints
+T} T{
+(InputHint|StateHint|IconPixmapHint|
+.br
+IconWindowHint|IconPositionHint|
+.br
+IconMaskHint|WindowGroupHint)
+T}
+.TE
+.IN "XWMHints" "" "@DEF@"
+.Ds 0
+.TA .5i 2.5i
+.ta .5i 2.5i
+/* Values */
+
+typedef struct {
+ long flags; /* marks which fields in this structure are defined */
+ Bool input; /* does this application rely on the window manager to
+ get keyboard input? */
+ int initial_state; /* see below */
+ Pixmap icon_pixmap; /* pixmap to be used as icon */
+ Window icon_window; /* window to be used as icon */
+ int icon_x, icon_y; /* initial position of icon */
+ Pixmap icon_mask; /* pixmap to be used as mask for icon_pixmap */
+ XID window_group; /* id of related window group */
+ /* this structure may be extended in the future */
+} XWMHints;
+.De
+.LP
+.eM
+The input member is used to communicate to the window manager the input focus
+model used by the application.
+Applications that expect input but never explicitly set focus to any
+of their subwindows (that is, use the push model of focus management),
+such as X Version 10 style applications that use real-estate
+driven focus, should set this member to
+.PN True .
+Similarly, applications
+that set input focus to their subwindows only when it is given to their
+top-level window by a window manager should also set this member to
+.PN True .
+Applications that manage their own input focus by explicitly setting
+focus to one of their subwindows whenever they want keyboard input
+(that is, use the pull model of focus management) should set this member to
+.PN False .
+Applications that never expect any keyboard input also should set this member
+to
+.PN False .
+.LP
+Pull model window managers should make it possible for push model
+applications to get input by setting input focus to the top-level windows of
+applications whose input member is
+.PN True .
+Push model window managers should
+make sure that pull model applications do not break them
+by resetting input focus to
+.PN PointerRoot
+when it is appropriate (for example, whenever an application whose
+input member is
+.PN False
+sets input focus to one of its subwindows).
+.LP
+The definitions for the initial_state flag are:
+.TS
+lw(.5i) lw(2i) lw(.2i) lw(2.8i).
+T{
+#define
+T} T{
+.PN WithdrawnState
+T} T{
+0
+T} T{
+T}
+T{
+#define
+T} T{
+.PN NormalState
+T} T{
+1
+T} T{
+/* most applications start this way */
+T}
+T{
+#define
+T} T{
+.PN IconicState
+T} T{
+3
+T} T{
+/* application wants to start as an icon */
+T}
+.TE
+The icon_mask specifies which pixels of the icon_pixmap should be used as the
+icon.
+This allows for nonrectangular icons.
+Both icon_pixmap and icon_mask must be bitmaps.
+The icon_window lets an application provide a window for use as an icon
+for window managers that support such use.
+The window_group lets you specify that this window belongs to a group
+of other windows.
+For example, if a single application manipulates multiple
+top-level windows, this allows you to provide enough
+information that a window manager can iconify all of the windows
+rather than just the one window.
+.LP
+The
+.PN UrgencyHint
+flag, if set in the flags field, indicates that the client deems the window
+contents to be urgent, requiring the timely response of the user. The
+window manager will make some effort to draw the user's attention to this
+window while this flag is set. The client must provide some means by which the
+user can cause the urgency flag to be cleared (either mitigating
+the condition that made the window urgent or merely shutting off the alarm)
+or the window to be withdrawn.
+.LP
+.sp
+To set a window's WM_HINTS property, use
+.PN XSetWMHints .
+.IN "XSetWMHints" "" "@DEF@"
+.sM
+.FD 0
+XSetWMHints\^(\^\fIdisplay\fP, \fIw\fP, \fIwmhints\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIw\fP\^;
+.br
+ XWMHints *\fIwmhints\fP\^;
+
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIw\fP 1i
+Specifies the window.
+.IP \fIwmhints\fP 1i
+Specifies the
+.PN XWMHints
+structure to be used.
+.LP
+.eM
+The
+.PN XSetWMHints
+function sets the window manager hints that include icon information and location,
+the initial state of the window, and whether the application relies on the
+window manager to get keyboard input.
+.LP
+.PN XSetWMHints
+can generate
+.PN BadAlloc
+and
+.PN BadWindow
+errors.
+.LP
+.sp
+To read a window's WM_HINTS property, use
+.PN XGetWMHints .
+.IN "XGetWMHints" "" "@DEF@"
+.sM
+.FD 0
+XWMHints *XGetWMHints\^(\^\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 XGetWMHints
+function reads the window manager hints and
+returns NULL if no WM_HINTS property was set on the window
+or returns a pointer to an
+.PN XWMHints
+structure if it succeeds.
+When finished with the data,
+free the space used for it by calling
+.PN XFree .
+.LP
+.PN XGetWMHints
+can generate a
+.PN BadWindow
+error.
+.NH 3
+Setting and Reading the WM_NORMAL_HINTS Property
+.XS
+\*(SN Setting and Reading the WM_NORMAL_HINTS Property
+.XE
+.LP
+Xlib provides functions that you can use to set or read
+the WM_NORMAL_HINTS property for a given window.
+The functions use the flags and the
+.PN XSizeHints
+structure, as defined in the
+.hN X11/Xutil.h
+header file.
+.LP
+The size of the
+.PN XSizeHints
+structure may grow in future releases, as new components are
+added to support new ICCCM features.
+Passing statically allocated instances of this structure into
+Xlib may result in memory corruption when running against a
+future release of the library.
+As such, it is recommended that only dynamically allocated
+instances of the structure be used.
+.sp
+.LP
+To allocate an
+.PN XSizeHints
+structure, use
+.PN XAllocSizeHints .
+.IN "XAllocSizeHints" "" "@DEF@"
+.sM
+.FD 0
+XSizeHints *XAllocSizeHints\^(\|)
+.FN
+.LP
+.eM
+The
+.PN XAllocSizeHints
+function allocates and returns a pointer to an
+.PN XSizeHints
+structure.
+Note that all fields in the
+.PN XSizeHints
+structure are initially set to zero.
+If insufficient memory is available,
+.PN XAllocSizeHints
+returns NULL.
+To free the memory allocated to this structure,
+use
+.PN XFree .
+.LP
+The
+.PN XSizeHints
+structure contains:
+.LP
+.sM
+/* Size hints mask bits */
+.TS
+lw(.5i) lw(1.1i) lw(1.5i) lw(3.1i).
+T{
+#define
+T} T{
+.PN USPosition
+T} T{
+(1L << 0)
+T} T{
+/* user specified x, y */
+T}
+T{
+#define
+T} T{
+.PN USSize
+T} T{
+(1L << 1)
+T} T{
+/* user specified width, height */
+T}
+T{
+#define
+T} T{
+.PN PPosition
+T} T{
+(1L << 2)
+T} T{
+/* program specified position */
+T}
+T{
+#define
+T} T{
+.PN PSize
+T} T{
+(1L << 3)
+T} T{
+/* program specified size */
+T}
+T{
+#define
+T} T{
+.PN PMinSize
+T} T{
+(1L << 4)
+T} T{
+/* program specified minimum size */
+T}
+T{
+#define
+T} T{
+.PN PMaxSize
+T} T{
+(1L << 5)
+T} T{
+/* program specified maximum size */
+T}
+T{
+#define
+T} T{
+.PN PResizeInc
+T} T{
+(1L << 6)
+T} T{
+/* program specified resize increments */
+T}
+T{
+#define
+T} T{
+.PN PAspect
+T} T{
+(1L << 7)
+T} T{
+/* program specified min and max aspect ratios */
+T}
+T{
+#define
+T} T{
+.PN PBaseSize
+T} T{
+(1L << 8)
+T}
+T{
+#define
+T} T{
+.PN PWinGravity
+T} T{
+(1L << 9)
+T}
+T{
+#define
+T} T{
+.PN PAllHints
+T} T{
+(PPosition|PSize|
+.br
+PMinSize|PMaxSize|
+.br
+PResizeInc|PAspect)
+T} T{
+T}
+.TE
+.IN "XSizeHints" "" "@DEF@"
+.Ds 0
+.TA .5i 2.5i
+.ta .5i 2.5i
+/* Values */
+
+typedef struct {
+ long flags; /* marks which fields in this structure are defined */
+ int x, y; /* Obsolete */
+ int width, height; /* Obsolete */
+ int min_width, min_height;
+ int max_width, max_height;
+ int width_inc, height_inc;
+ struct {
+ int x; /* numerator */
+ int y; /* denominator */
+ } min_aspect, max_aspect;
+ int base_width, base_height;
+ int win_gravity;
+ /* this structure may be extended in the future */
+} XSizeHints;
+.De
+.LP
+.eM
+The x, y, width, and height members are now obsolete
+and are left solely for compatibility reasons.
+The min_width and min_height members specify the
+minimum window size that still allows the application to be useful.
+The max_width and max_height members specify the maximum window size.
+The width_inc and height_inc members define an arithmetic progression of
+sizes (minimum to maximum) into which the window prefers to be resized.
+The min_aspect and max_aspect members are expressed
+as ratios of x and y,
+and they allow an application to specify the range of aspect
+ratios it prefers.
+The base_width and base_height members define the desired size of the window.
+The window manager will interpret the position of the window
+and its border width to position the point of the outer rectangle
+of the overall window specified by the win_gravity member.
+The outer rectangle of the window includes any borders or decorations
+supplied by the window manager.
+In other words,
+if the window manager decides to place the window where the client asked,
+the position on the parent window's border named by the win_gravity
+will be placed where the client window would have been placed
+in the absence of a window manager.
+.LP
+Note that use of the
+.PN PAllHints
+macro is highly discouraged.
+.sp
+.LP
+To set a window's WM_NORMAL_HINTS property, use
+.PN XSetWMNormalHints .
+.IN "XSetWMNormalHints" "" "@DEF@"
+.sM
+.FD 0
+void XSetWMNormalHints\^(\^\fIdisplay\fP, \fIw\fP, \fIhints\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIw\fP\^;
+.br
+ XSizeHints *\fIhints\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIw\fP 1i
+Specifies the window.
+.IP \fIhints\fP 1i
+Specifies the size hints for the window in its normal state.
+.LP
+.eM
+The
+.PN XSetWMNormalHints
+function replaces the size hints for the WM_NORMAL_HINTS property
+on the specified window.
+If the property does not already exist,
+.PN XSetWMNormalHints
+sets the size hints for the WM_NORMAL_HINTS property on the specified window.
+The property is stored with a type of WM_SIZE_HINTS and a format of 32.
+.LP
+.PN XSetWMNormalHints
+can generate
+.PN BadAlloc
+and
+.PN BadWindow
+errors.
+.sp
+.LP
+To read a window's WM_NORMAL_HINTS property, use
+.PN XGetWMNormalHints .
+.IN "XGetWMNormalHints" "" "@DEF@"
+.sM
+.FD 0
+Status XGetWMNormalHints\^(\^\fIdisplay\fP, \fIw\fP, \fIhints_return\fP, \
+\fIsupplied_return\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIw\fP\^;
+.br
+ XSizeHints *\fIhints_return\fP\^;
+.br
+ long *\fIsupplied_return\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIw\fP 1i
+Specifies the window.
+.IP \fIhints_return\fP 1i
+Returns the size hints for the window in its normal state.
+.IP \fIsupplied_return\fP 1i
+Returns the hints that were supplied by the user.
+.LP
+.eM
+The
+.PN XGetWMNormalHints
+function returns the size hints stored in the WM_NORMAL_HINTS property
+on the specified window.
+If the property is of type WM_SIZE_HINTS, is of format 32,
+and is long enough to contain either an old (pre-ICCCM)
+or new size hints structure,
+.PN XGetWMNormalHints
+sets the various fields of the
+.PN XSizeHints
+structure, sets the supplied_return argument to the list of fields
+that were supplied by the user (whether or not they contained defined values),
+and returns a nonzero status.
+Otherwise, it returns a zero status.
+.LP
+If
+.PN XGetWMNormalHints
+returns successfully and a pre-ICCCM size hints property is read,
+the supplied_return argument will contain the following bits:
+.LP
+.Ds
+(USPosition|USSize|PPosition|PSize|PMinSize|
+ PMaxSize|PResizeInc|PAspect)
+.De
+.LP
+If the property is large enough to contain the base size
+and window gravity fields as well,
+the supplied_return argument will also contain the following bits:
+.LP
+.Ds
+PBaseSize|PWinGravity
+.De
+.LP
+.PN XGetWMNormalHints
+can generate a
+.PN BadWindow
+error.
+.sp
+.LP
+To set a window's WM_SIZE_HINTS property, use
+.PN XSetWMSizeHints .
+.IN "XSetWMSizeHints" "" "@DEF@"
+.sM
+.FD 0
+void XSetWMSizeHints\^(\^\fIdisplay\fP, \fIw\fP, \fIhints\fP, \fIproperty\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIw\fP\^;
+.br
+ XSizeHints *\fIhints\fP\^;
+.br
+ Atom \fIproperty\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIw\fP 1i
+Specifies the window.
+.IP \fIhints\fP 1i
+Specifies the
+.PN XSizeHints
+structure to be used.
+.IP \fIproperty\fP 1i
+Specifies the property name.
+.LP
+.eM
+The
+.PN XSetWMSizeHints
+function replaces the size hints for the specified property
+on the named window.
+If the specified property does not already exist,
+.PN XSetWMSizeHints
+sets the size hints for the specified property
+on the named window.
+The property is stored with a type of WM_SIZE_HINTS and a format of 32.
+To set a window's normal size hints,
+you can use the
+.PN XSetWMNormalHints
+function.
+.LP
+.PN XSetWMSizeHints
+can generate
+.PN BadAlloc ,
+.PN BadAtom ,
+and
+.PN BadWindow
+errors.
+.sp
+.LP
+To read a window's WM_SIZE_HINTS property, use
+.PN XGetWMSizeHints .
+.IN "XGetWMSizeHints" "" "@DEF@"
+.sM
+.FD 0
+Status XGetWMSizeHints\^(\^\fIdisplay\fP, \fIw\fP, \fIhints_return\fP, \
+\fIsupplied_return\fP, \fIproperty\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIw\fP\^;
+.br
+ XSizeHints *\fIhints_return\fP\^;
+.br
+ long *\fIsupplied_return\fP\^;
+.br
+ Atom \fIproperty\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIw\fP 1i
+Specifies the window.
+.IP \fIhints_return\fP 1i
+Returns the
+.PN XSizeHints
+structure.
+.IP \fIsupplied_return\fP 1i
+Returns the hints that were supplied by the user.
+.IP \fIproperty\fP 1i
+Specifies the property name.
+.LP
+.eM
+The
+.PN XGetWMSizeHints
+function returns the size hints stored in the specified property
+on the named window.
+If the property is of type WM_SIZE_HINTS, is of format 32,
+and is long enough to contain either an old (pre-ICCCM)
+or new size hints structure,
+.PN XGetWMSizeHints
+sets the various fields of the
+.PN XSizeHints
+structure, sets the supplied_return argument to the
+list of fields that were supplied by the user
+(whether or not they contained defined values),
+and returns a nonzero status.
+Otherwise, it returns a zero status.
+To get a window's normal size hints,
+you can use the
+.PN XGetWMNormalHints
+function.
+.LP
+If
+.PN XGetWMSizeHints
+returns successfully and a pre-ICCCM size hints property is read,
+the supplied_return argument will contain the following bits:
+.LP
+.Ds
+(USPosition|USSize|PPosition|PSize|PMinSize|
+ PMaxSize|PResizeInc|PAspect)
+.De
+.LP
+If the property is large enough to contain the base size
+and window gravity fields as well,
+the supplied_return argument will also contain the following bits:
+.LP
+.Ds
+PBaseSize|PWinGravity
+.De
+.LP
+.PN XGetWMSizeHints
+can generate
+.PN BadAtom
+and
+.PN BadWindow
+errors.
+.NH 3
+Setting and Reading the WM_CLASS Property
+.XS
+\*(SN Setting and Reading the WM_CLASS Property
+.XE
+.LP
+Xlib provides functions that you can use to set and get
+the WM_CLASS property for a given window.
+These functions use the
+.PN XClassHint
+structure, which is defined in the
+.hN X11/Xutil.h
+header file.
+.sp
+.LP
+To allocate an
+.PN XClassHint
+structure, use
+.PN XAllocClassHint .
+.IN "XAllocClassHint" "" "@DEF@"
+.sM
+.FD 0
+XClassHint *XAllocClassHint\^(\|)
+.FN
+.LP
+.eM
+The
+.PN XAllocClassHint
+function allocates and returns a pointer to an
+.PN XClassHint
+structure.
+Note that the pointer fields in the
+.PN XClassHint
+structure are initially set to NULL.
+If insufficient memory is available,
+.PN XAllocClassHint
+returns NULL.
+To free the memory allocated to this structure,
+use
+.PN XFree .
+.LP
+The
+.PN XClassHint
+contains:
+.LP
+.sM
+.IN "XClassHint" "" "@DEF@"
+.Ds 0
+.TA .5i
+.ta .5i
+typedef struct {
+ char *res_name;
+ char *res_class;
+} XClassHint;
+.De
+.LP
+.eM
+The res_name member contains the application name,
+and the res_class member contains the application class.
+Note that the name set in this property may differ from the name set as WM_NAME.
+That is, WM_NAME specifies what should be displayed in the title bar and,
+therefore, can contain temporal information (for example, the name of
+a file currently in an editor's buffer).
+On the other hand,
+the name specified as part of WM_CLASS is the formal name of the application
+that should be used when retrieving the application's resources from the
+resource database.
+.LP
+.sp
+To set a window's WM_CLASS property, use
+.PN XSetClassHint .
+.IN "XSetClassHint" "" "@DEF@"
+.sM
+.FD 0
+XSetClassHint\^(\^\fIdisplay\fP, \fIw\fP, \fIclass_hints\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIw\fP\^;
+.br
+ XClassHint *\fIclass_hints\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIw\fP 1i
+Specifies the window.
+.IP \fIclass_hints\fP 1i
+Specifies the
+.PN XClassHint
+structure that is to be used.
+.LP
+.eM
+The
+.PN XSetClassHint
+function sets the class hint for the specified window.
+If the strings are not in the Host Portable Character Encoding,
+the result is implementation-dependent.
+.LP
+.PN XSetClassHint
+can generate
+.PN BadAlloc
+and
+.PN BadWindow
+errors.
+.LP
+.sp
+To read a window's WM_CLASS property, use
+.PN XGetClassHint .
+.IN "XGetClassHint" "" "@DEF@"
+.sM
+.FD 0
+Status XGetClassHint\^(\^\fIdisplay\fP, \fIw\fP, \fIclass_hints_return\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIw\fP;
+.br
+ XClassHint *\fIclass_hints_return\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIw\fP 1i
+Specifies the window.
+.IP \fIclass_hints_return\fP 1i
+Returns the
+.PN XClassHint
+structure.
+.LP
+.eM
+The
+.PN XGetClassHint
+function returns the class hint of the specified window to the members
+of the supplied structure.
+If the data returned by the server is in the Latin Portable Character Encoding,
+then the returned strings are in the Host Portable Character Encoding.
+Otherwise, the result is implementation-dependent.
+It returns a nonzero status on success;
+otherwise, it returns a zero status.
+To free res_name and res_class when finished with the strings,
+use
+.PN XFree
+on each individually.
+.LP
+.PN XGetClassHint
+can generate a
+.PN BadWindow
+error.
+.NH 3
+Setting and Reading the WM_TRANSIENT_FOR Property
+.XS
+\*(SN Setting and Reading the WM_TRANSIENT_FOR Property
+.XE
+.LP
+Xlib provides functions that you can use to set and read
+the WM_TRANSIENT_FOR property for a given window.
+.LP
+.sp
+To set a window's WM_TRANSIENT_FOR property, use
+.PN XSetTransientForHint .
+.IN "XSetTransientForHint" "" "@DEF@"
+.sM
+.FD 0
+XSetTransientForHint\^(\^\fIdisplay\fP, \fIw\fP, \fIprop_window\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIw\fP\^;
+.br
+ Window \fIprop_window\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIw\fP 1i
+Specifies the window.
+.IP \fIprop_window\fP 1i
+Specifies the window that the WM_TRANSIENT_FOR property is to be set to.
+.LP
+.eM
+The
+.PN XSetTransientForHint
+function sets the WM_TRANSIENT_FOR property of the specified window to the
+specified prop_window.
+.LP
+.PN XSetTransientForHint
+can generate
+.PN BadAlloc
+and
+.PN BadWindow
+errors.
+.LP
+.sp
+To read a window's WM_TRANSIENT_FOR property, use
+.PN XGetTransientForHint .
+.IN "XGetTransientForHint" "" "@DEF@"
+.sM
+.FD 0
+Status XGetTransientForHint\^(\^\fIdisplay\fP, \fIw\fP, \fIprop_window_return\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIw\fP\^;
+.br
+ Window *\fIprop_window_return\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIw\fP 1i
+Specifies the window.
+.IP \fIprop_window_return\fP 1i
+Returns the WM_TRANSIENT_FOR property of the specified window.
+.LP
+.eM
+The
+.PN XGetTransientForHint
+function returns the WM_TRANSIENT_FOR property for the specified window.
+It returns a nonzero status on success;
+otherwise, it returns a zero status.
+.LP
+.PN XGetTransientForHint
+can generate a
+.PN BadWindow
+error.
+.NH 3
+Setting and Reading the WM_PROTOCOLS Property
+.XS
+\*(SN Setting and Reading the WM_PROTOCOLS Property
+.XE
+.LP
+Xlib provides functions that you can use to set and read
+the WM_PROTOCOLS property for a given window.
+.LP
+.sp
+To set a window's WM_PROTOCOLS property, use
+.PN XSetWMProtocols .
+.IN "XSetWMProtocols" "" "@DEF@"
+.sM
+.FD 0
+Status XSetWMProtocols\^(\^\fIdisplay\fP, \fIw\fP, \fIprotocols\fP, \
+\fIcount\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIw\fP\^;
+.br
+ Atom *\fIprotocols\fP\^;
+.br
+ int \fIcount\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIw\fP 1i
+Specifies the window.
+.IP \fIprotocols\fP 1i
+Specifies the list of protocols.
+.ds Cn protocols in the list
+.IP \fIcount\fP 1i
+Specifies the number of \*(Cn.
+.LP
+.eM
+The
+.PN XSetWMProtocols
+function replaces the WM_PROTOCOLS property on the specified window
+with the list of atoms specified by the protocols argument.
+If the property does not already exist,
+.PN XSetWMProtocols
+sets the WM_PROTOCOLS property on the specified window
+to the list of atoms specified by the protocols argument.
+The property is stored with a type of ATOM and a format of 32.
+If it cannot intern the WM_PROTOCOLS atom,
+.PN XSetWMProtocols
+returns a zero status.
+Otherwise, it returns a nonzero status.
+.LP
+.PN XSetWMProtocols
+can generate
+.PN BadAlloc
+and
+.PN BadWindow
+errors.
+.sp
+.LP
+To read a window's WM_PROTOCOLS property, use
+.PN XGetWMProtocols .
+.IN "XGetWMProtocols" "" "@DEF@"
+.sM
+.FD 0
+Status XGetWMProtocols\^(\^\fIdisplay\fP, \fIw\fP, \fIprotocols_return\fP, \
+\fIcount_return\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIw\fP\^;
+.br
+ Atom **\fIprotocols_return\fP\^;
+.br
+ int *\fIcount_return\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIw\fP 1i
+Specifies the window.
+.IP \fIprotocols_return\fP 1i
+Returns the list of protocols.
+.ds Cn protocols in the list
+.IP \fIcount_return\fP 1i
+Returns the number of \*(Cn.
+.LP
+.eM
+The
+.PN XGetWMProtocols
+function returns the list of atoms stored in the WM_PROTOCOLS property
+on the specified window.
+These atoms describe window manager protocols in which the owner
+of this window is willing to participate.
+If the property exists, is of type ATOM, is of format 32,
+and the atom WM_PROTOCOLS can be interned,
+.PN XGetWMProtocols
+sets the protocols_return argument to a list of atoms,
+sets the count_return argument to the number of elements in the list,
+and returns a nonzero status.
+Otherwise, it sets neither of the return arguments
+and returns a zero status.
+To release the list of atoms, use
+.PN XFree .
+.LP
+.PN XGetWMProtocols
+can generate a
+.PN BadWindow
+error.
+.NH 3
+Setting and Reading the WM_COLORMAP_WINDOWS Property
+.XS
+\*(SN Setting and Reading the WM_COLORMAP_WINDOWS Property
+.XE
+.LP
+Xlib provides functions that you can use to set and read
+the WM_COLORMAP_WINDOWS property for a given window.
+.sp
+.LP
+To set a window's WM_COLORMAP_WINDOWS property, use
+.PN XSetWMColormapWindows .
+.IN "XSetWMColormapWindows" "" "@DEF@"
+.sM
+.FD 0
+Status XSetWMColormapWindows\^(\^\fIdisplay\fP, \fIw\fP, \
+\fIcolormap_windows\fP, \fIcount\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIw\fP\^;
+.br
+ Window *\fIcolormap_windows\fP\^;
+.br
+ int \fIcount\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIw\fP 1i
+Specifies the window.
+.IP \fIcolormap_windows\fP 1i
+Specifies the list of windows.
+.ds Cn windows in the list
+.IP \fIcount\fP 1i
+Specifies the number of \*(Cn.
+.LP
+.eM
+The
+.PN XSetWMColormapWindows
+function replaces the WM_COLORMAP_WINDOWS property on the specified
+window with the list of windows specified by the colormap_windows argument.
+If the property does not already exist,
+.PN XSetWMColormapWindows
+sets the WM_COLORMAP_WINDOWS property on the specified
+window to the list of windows specified by the colormap_windows argument.
+The property is stored with a type of WINDOW and a format of 32.
+If it cannot intern the WM_COLORMAP_WINDOWS atom,
+.PN XSetWMColormapWindows
+returns a zero status.
+Otherwise, it returns a nonzero status.
+.LP
+.PN XSetWMColormapWindows
+can generate
+.PN BadAlloc
+and
+.PN BadWindow
+errors.
+.sp
+.LP
+To read a window's WM_COLORMAP_WINDOWS property, use
+.PN XGetWMColormapWindows .
+.IN "XGetWMColormapWindows" "" "@DEF@"
+.sM
+.FD 0
+Status XGetWMColormapWindows\^(\^\fIdisplay\fP, \fIw\fP, \
+\fIcolormap_windows_return\fP, \fIcount_return\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIw\fP\^;
+.br
+ Window **\fIcolormap_windows_return\fP\^;
+.br
+ int *\fIcount_return\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIw\fP 1i
+Specifies the window.
+.IP \fIcolormap_windows_return\fP 1i
+Returns the list of windows.
+.ds Cn windows in the list
+.IP \fIcount_return\fP 1i
+Returns the number of \*(Cn.
+.LP
+.eM
+The
+.PN XGetWMColormapWindows
+function returns the list of window identifiers stored
+in the WM_COLORMAP_WINDOWS property on the specified window.
+These identifiers indicate the colormaps that the window manager
+may need to install for this window.
+If the property exists, is of type WINDOW, is of format 32,
+and the atom WM_COLORMAP_WINDOWS can be interned,
+.PN XGetWMColormapWindows
+sets the windows_return argument to a list of window identifiers,
+sets the count_return argument to the number of elements in the list,
+and returns a nonzero status.
+Otherwise, it sets neither of the return arguments
+and returns a zero status.
+To release the list of window identifiers, use
+.PN XFree .
+.LP
+.PN XGetWMColormapWindows
+can generate a
+.PN BadWindow
+error.
+.NH 3
+Setting and Reading the WM_ICON_SIZE Property
+.XS
+\*(SN Setting and Reading the WM_ICON_SIZE Property
+.XE
+.LP
+Xlib provides functions that you can use to set and read
+the WM_ICON_SIZE property for a given window.
+These functions use the
+.PN XIconSize
+.IN "XIconSize"
+structure, which is defined in the
+.hN X11/Xutil.h
+header file.
+.sp
+.LP
+To allocate an
+.PN XIconSize
+structure, use
+.PN XAllocIconSize .
+.IN "XAllocIconSize" "" "@DEF@"
+.sM
+.FD 0
+XIconSize *XAllocIconSize\^(\|)
+.FN
+.LP
+.eM
+The
+.PN XAllocIconSize
+function allocates and returns a pointer to an
+.PN XIconSize
+structure.
+Note that all fields in the
+.PN XIconSize
+structure are initially set to zero.
+If insufficient memory is available,
+.PN XAllocIconSize
+returns NULL.
+To free the memory allocated to this structure,
+use
+.PN XFree .
+.LP
+The
+.PN XIconSize
+structure contains:
+.LP
+.sM
+.IN "XIconSize" "" "@DEF@"
+.Ds 0
+.TA .5i 2.5i
+.ta .5i 2.5i
+typedef struct {
+ int min_width, min_height;
+ int max_width, max_height;
+ int width_inc, height_inc;
+} XIconSize;
+.De
+.LP
+.eM
+The width_inc and height_inc members define an arithmetic progression of
+sizes (minimum to maximum) that represent the supported icon sizes.
+.LP
+.sp
+To set a window's WM_ICON_SIZE property, use
+.PN XSetIconSizes .
+.IN "XSetIconSizes" "" "@DEF@"
+.sM
+.FD 0
+XSetIconSizes\^(\^\fIdisplay\fP, \fIw\fP, \fIsize_list\fP, \fIcount\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIw\fP\^;
+.br
+ XIconSize *\fIsize_list\fP\^;
+.br
+ int \fIcount\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIw\fP 1i
+Specifies the window.
+.IP \fIsize_list\fP 1i
+Specifies the size list.
+.IP \fIcount\fP 1i
+Specifies the number of items in the size list.
+.LP
+.eM
+The
+.PN XSetIconSizes
+function is used only by window managers to set the supported icon sizes.
+.LP
+.PN XSetIconSizes
+can generate
+.PN BadAlloc
+and
+.PN BadWindow
+errors.
+.LP
+.sp
+To read a window's WM_ICON_SIZE property, use
+.PN XGetIconSizes .
+.IN "XGetIconSizes" "" "@DEF@"
+.sM
+.FD 0
+Status XGetIconSizes\^(\^\fIdisplay\fP, \fIw\fP, \fIsize_list_return\fP, \fIcount_return\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIw\fP\^;
+.br
+ XIconSize **\fIsize_list_return\fP\^;
+.br
+ int *\fIcount_return\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIw\fP 1i
+Specifies the window.
+.IP \fIsize_list_return\fP 1i
+Returns the size list.
+.IP \fIcount_return\fP 1i
+Returns the number of items in the size list.
+.LP
+.eM
+The
+.PN XGetIconSizes
+function returns zero if a window manager has not set icon sizes;
+otherwise, it returns nonzero.
+.PN XGetIconSizes
+should be called by an application that
+wants to find out what icon sizes would be most appreciated by the
+window manager under which the application is running.
+The application
+should then use
+.PN XSetWMHints
+to supply the window manager with an icon pixmap or window in one of the
+supported sizes.
+To free the data allocated in size_list_return, use
+.PN XFree .
+.LP
+.PN XGetIconSizes
+can generate a
+.PN BadWindow
+error.
+.NH 3
+Using Window Manager Convenience Functions
+.XS
+\*(SN Using Window Manager Convenience Functions
+.XE
+.LP
+The
+.PN XmbSetWMProperties
+function stores the standard set of window manager properties,
+with text properties in standard encodings
+for internationalized text communication.
+The standard window manager properties for a given window are
+WM_NAME, WM_ICON_NAME, WM_HINTS, WM_NORMAL_HINTS, WM_CLASS,
+WM_COMMAND, WM_CLIENT_MACHINE, and WM_LOCALE_NAME.
+.IN "XmbSetWMProperties" "" "@DEF@"
+.sM
+.FD 0
+void XmbSetWMProperties\^(\^\fIdisplay\fP\^, \fIw\fP\^, \fIwindow_name\fP\^, \fIicon_name\fP\^, \fIargv\fP\^, \fIargc\fP\^,
+.br
+ \fInormal_hints\fP\^, \fIwm_hints\fP\^, \fIclass_hints\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIw\fP\^;
+.br
+ char *\fIwindow_name\fP\^;
+.br
+ char *\fIicon_name\fP\^;
+.br
+ char *\fIargv\fP\^[];
+.br
+ int \fIargc\fP\^;
+.br
+ XSizeHints *\fInormal_hints\fP\^;
+.br
+ XWMHints *\fIwm_hints\fP\^;
+.br
+ XClassHint *\fIclass_hints\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIw\fP 1i
+Specifies the window.
+.IP \fIwindow_name\fP 1i
+Specifies the window name,
+which should be a null-terminated string.
+.IP \fIicon_name\fP 1i
+Specifies the icon name,
+which should be a null-terminated string.
+.IP \fIargv\fP 1i
+Specifies the application's argument list.
+.IP \fIargc\fP 1i
+Specifies the number of arguments.
+.IP \fIhints\fP 1i
+Specifies the size hints for the window in its normal state.
+.IP \fIwm_hints\fP 1i
+Specifies the
+.PN XWMHints
+structure to be used.
+.IP \fIclass_hints\fP 1i
+Specifies the
+.PN XClassHint
+structure to be used.
+.LP
+.eM
+The
+.PN XmbSetWMProperties
+convenience function provides a simple programming interface
+for setting those essential window properties that are used
+for communicating with other clients
+(particularly window and session managers).
+.LP
+If the window_name argument is non-NULL,
+.PN XmbSetWMProperties
+sets the WM_NAME property.
+If the icon_name argument is non-NULL,
+.PN XmbSetWMProperties
+sets the WM_ICON_NAME property.
+The window_name and icon_name arguments are null-terminated strings
+in the encoding of the current locale.
+If the arguments can be fully converted to the STRING encoding,
+the properties are created with type ``STRING'';
+otherwise, the arguments are converted to Compound Text,
+and the properties are created with type ``COMPOUND_TEXT''.
+.LP
+If the normal_hints argument is non-NULL,
+.PN XmbSetWMProperties
+calls
+.PN XSetWMNormalHints ,
+which sets the WM_NORMAL_HINTS property (see section 14.1.7).
+If the wm_hints argument is non-NULL,
+.PN XmbSetWMProperties
+calls
+.PN XSetWMHints ,
+which sets the WM_HINTS property (see section 14.1.6).
+.LP
+If the argv argument is non-NULL,
+.PN XmbSetWMProperties
+sets the WM_COMMAND property from argv and argc.
+An argc of zero indicates a zero-length command.
+.LP
+The hostname of the machine is stored using
+.PN XSetWMClientMachine
+(see section 14.2.2).
+.LP
+If the class_hints argument is non-NULL,
+.PN XmbSetWMProperties
+sets the WM_CLASS property.
+If the res_name member in the
+.PN XClassHint
+structure is set to the NULL pointer and the RESOURCE_NAME
+environment variable is set,
+the value of the environment variable is substituted for res_name.
+If the res_name member is NULL,
+the environment variable is not set, and argv and argv[0] are set,
+then the value of argv[0], stripped of any directory prefixes,
+is substituted for res_name.
+.LP
+It is assumed that the supplied class_hints.res_name and argv,
+the RESOURCE_NAME environment variable, and the hostname of the machine
+are in the encoding of the locale announced for the LC_CTYPE category
+(on POSIX-compliant systems, the LC_CTYPE, else LANG environment variable).
+The corresponding WM_CLASS, WM_COMMAND, and WM_CLIENT_MACHINE properties
+are typed according to the local host locale announcer.
+No encoding conversion is performed prior to storage in the properties.
+.LP
+For clients that need to process the property text in a locale,
+.PN XmbSetWMProperties
+sets the WM_LOCALE_NAME property to be the name of the current locale.
+The name is assumed to be in the Host Portable Character Encoding
+and is converted to STRING for storage in the property.
+.LP
+.PN XmbSetWMProperties
+can generate
+.PN BadAlloc
+and
+.PN BadWindow
+errors.
+.sp
+.LP
+To set a window's standard window manager properties
+with strings in client-specified encodings, use
+.PN XSetWMProperties .
+The standard window manager properties for a given window are
+WM_NAME, WM_ICON_NAME, WM_HINTS, WM_NORMAL_HINTS, WM_CLASS,
+WM_COMMAND, and WM_CLIENT_MACHINE.
+.IN "XSetWMProperties" "" "@DEF@"
+.sM
+.FD 0
+void XSetWMProperties\^(\^\fIdisplay\fP, \fIw\fP, \fIwindow_name\fP, \
+\fIicon_name\fP, \fIargv\fP, \fIargc\fP, \fInormal_hints\fP, \fIwm_hints\fP, \
+\fIclass_hints\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIw\fP\^;
+.br
+ XTextProperty *\fIwindow_name\fP\^;
+.br
+ XTextProperty *\fIicon_name\fP\^;
+.br
+ char **\fIargv\fP\^;
+.br
+ int \fIargc\fP\^;
+.br
+ XSizeHints *\fInormal_hints\fP\^;
+.br
+ XWMHints *\fIwm_hints\fP\^;
+.br
+ XClassHint *\fIclass_hints\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIw\fP 1i
+Specifies the window.
+.IP \fIwindow_name\fP 1i
+Specifies the window name,
+which should be a null-terminated string.
+.IP \fIicon_name\fP 1i
+Specifies the icon name,
+which should be a null-terminated string.
+.IP \fIargv\fP 1i
+Specifies the application's argument list.
+.IP \fIargc\fP 1i
+Specifies the number of arguments.
+.IP \fInormal_hints\fP 1i
+Specifies the size hints for the window in its normal state.
+.IP \fIwm_hints\fP 1i
+Specifies the
+.PN XWMHints
+structure to be used.
+.IP \fIclass_hints\fP 1i
+Specifies the
+.PN XClassHint
+structure to be used.
+.LP
+.eM
+The
+.PN XSetWMProperties
+convenience function provides a single programming interface
+for setting those essential window properties that are used
+for communicating with other clients (particularly window and session
+managers).
+.LP
+If the window_name argument is non-NULL,
+.PN XSetWMProperties
+calls
+.PN XSetWMName ,
+which, in turn, sets the WM_NAME property (see section 14.1.4).
+If the icon_name argument is non-NULL,
+.PN XSetWMProperties
+calls
+.PN XSetWMIconName ,
+which sets the WM_ICON_NAME property (see section 14.1.5).
+If the argv argument is non-NULL,
+.PN XSetWMProperties
+calls
+.PN XSetCommand ,
+which sets the WM_COMMAND property (see section 14.2.1).
+Note that an argc of zero is allowed to indicate a zero-length command.
+Note also that the hostname of this machine is stored using
+.PN XSetWMClientMachine
+(see section 14.2.2).
+.LP
+If the normal_hints argument is non-NULL,
+.PN XSetWMProperties
+calls
+.PN XSetWMNormalHints ,
+which sets the WM_NORMAL_HINTS property (see section 14.1.7).
+If the wm_hints argument is non-NULL,
+.PN XSetWMProperties
+calls
+.PN XSetWMHints ,
+which sets the WM_HINTS property (see section 14.1.6).
+.LP
+If the class_hints argument is non-NULL,
+.PN XSetWMProperties
+calls
+.PN XSetClassHint ,
+which sets the WM_CLASS property (see section 14.1.8).
+If the res_name member in the
+.PN XClassHint
+structure is set to the NULL pointer and the RESOURCE_NAME environment
+variable is set,
+then the value of the environment variable is substituted for res_name.
+If the res_name member is NULL,
+the environment variable is not set,
+and argv and argv[0] are set,
+then the value of argv[0], stripped of
+any directory prefixes, is substituted for res_name.
+.LP
+.PN XSetWMProperties
+can generate
+.PN BadAlloc
+and
+.PN BadWindow
+errors.
+.NH 2
+Client to Session Manager Communication
+.XS
+\*(SN Client to Session Manager Communication
+.XE
+.LP
+This section discusses how to:
+.IP \(bu 5
+Set and read the WM_COMMAND property
+.IP \(bu 5
+Set and read the WM_CLIENT_MACHINE property
+.NH 3
+Setting and Reading the WM_COMMAND Property
+.XS
+\*(SN Setting and Reading the WM_COMMAND Property
+.XE
+.LP
+Xlib provides functions that you can use to set and read
+the WM_COMMAND property for a given window.
+.sp
+.LP
+To set a window's WM_COMMAND property, use
+.PN XSetCommand .
+.IN "XSetCommand" "" "@DEF@"
+.sM
+.FD 0
+XSetCommand\^(\^\fIdisplay\fP, \fIw\fP, \fIargv\fP, \fIargc\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIw\fP\^;
+.br
+ char **\fIargv\fP\^;
+.br
+ int \fIargc\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIw\fP 1i
+Specifies the window.
+.IP \fIargv\fP 1i
+Specifies the application's argument list.
+.IP \fIargc\fP 1i
+Specifies the number of arguments.
+.LP
+.eM
+The
+.PN XSetCommand
+function sets the command and arguments used to invoke the
+application.
+(Typically, argv is the argv array of your main program.)
+If the strings are not in the Host Portable Character Encoding,
+the result is implementation-dependent.
+.LP
+.PN XSetCommand
+can generate
+.PN BadAlloc
+and
+.PN BadWindow
+errors.
+.sp
+.LP
+To read a window's WM_COMMAND property, use
+.PN XGetCommand .
+.IN "XGetCommand" "" "@DEF@"
+.sM
+.FD 0
+Status XGetCommand\^(\^\fIdisplay\fP, \fIw\fP, \fIargv_return\fP, \
+\fIargc_return\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIw\fP\^;
+.br
+ char ***\fIargv_return\fP\^;
+.br
+ int *\fIargc_return\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIw\fP 1i
+Specifies the window.
+.IP \fIargv_return\fP 1i
+Returns the application's argument list.
+.IP \fIargc_return\fP 1i
+Returns the number of arguments returned.
+.LP
+.eM
+The
+.PN XGetCommand
+function reads the WM_COMMAND property from the specified window
+and returns a string list.
+If the WM_COMMAND property exists,
+it is of type STRING and format 8.
+If sufficient memory can be allocated to contain the string list,
+.PN XGetCommand
+fills in the argv_return and argc_return arguments
+and returns a nonzero status.
+Otherwise, it returns a zero status.
+If the data returned by the server is in the Latin Portable Character Encoding,
+then the returned strings are in the Host Portable Character Encoding.
+Otherwise, the result is implementation-dependent.
+To free the memory allocated to the string list, use
+.PN XFreeStringList .
+.NH 3
+Setting and Reading the WM_CLIENT_MACHINE Property
+.XS
+\*(SN Setting and Reading the WM_CLIENT_MACHINE Property
+.XE
+.LP
+Xlib provides functions that you can use to set and read
+the WM_CLIENT_MACHINE property for a given window.
+.sp
+.LP
+To set a window's WM_CLIENT_MACHINE property, use
+.PN XSetWMClientMachine .
+.IN "XSetWMClientMachine" "" "@DEF@"
+.sM
+.FD 0
+void XSetWMClientMachine\^(\^\fIdisplay\fP, \fIw\fP, \fItext_prop\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIw\fP\^;
+.br
+ XTextProperty *\fItext_prop\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIw\fP 1i
+Specifies the window.
+.IP \fItext_prop\fP 1i
+Specifies the
+.PN XTextProperty
+structure to be used.
+.LP
+.eM
+The
+.PN XSetWMClientMachine
+convenience function calls
+.PN XSetTextProperty
+to set the WM_CLIENT_MACHINE property.
+.sp
+.LP
+To read a window's WM_CLIENT_MACHINE property, use
+.PN XGetWMClientMachine .
+.IN "XGetWMClientMachine" "" "@DEF@"
+.sM
+.FD 0
+Status XGetWMClientMachine\^(\^\fIdisplay\fP, \fIw\fP, \fItext_prop_return\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIw\fP\^;
+.br
+ XTextProperty *\fItext_prop_return\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIw\fP 1i
+Specifies the window.
+.IP \fItext_prop_return\fP 1i
+Returns the
+.PN XTextProperty
+structure.
+.LP
+.eM
+The
+.PN XGetWMClientMachine
+convenience function performs an
+.PN XGetTextProperty
+on the WM_CLIENT_MACHINE property.
+It returns a nonzero status on success;
+otherwise, it returns a zero status.
+.NH 2
+Standard Colormaps
+.XS
+\*(SN Standard Colormaps
+.XE
+.LP
+Applications with color palettes, smooth-shaded drawings, or digitized
+images demand large numbers of colors.
+In addition, these applications often require an efficient mapping
+from color triples to pixel values that display the appropriate colors.
+.LP
+As an example, consider a three-dimensional display program that wants
+to draw a smoothly shaded sphere.
+At each pixel in the image of the sphere,
+the program computes the intensity and color of light
+reflected back to the viewer.
+The result of each computation is a triple of red, green, and blue (RGB)
+coefficients in the range 0.0 to 1.0.
+To draw the sphere, the program needs a colormap that provides a
+large range of uniformly distributed colors.
+The colormap should be arranged so that the program can
+convert its RGB triples into pixel values very quickly,
+because drawing the entire sphere requires many such
+conversions.
+.LP
+On many current workstations,
+the display is limited to 256 or fewer colors.
+Applications must allocate colors carefully,
+not only to make sure they cover the entire range they need
+but also to make use of as many of the available colors as possible.
+On a typical X display,
+many applications are active at once.
+Most workstations have only one hardware look-up table for colors,
+so only one application colormap can be installed at a given time.
+The application using the installed colormap is displayed correctly,
+and the other applications go technicolor and are
+displayed with false colors.
+.LP
+As another example, consider a user who is running an
+image processing program to display earth-resources data.
+The image processing program needs a colormap set up with 8 reds,
+8 greens, and 4 blues, for a total of 256 colors.
+Because some colors are already in use in the default colormap,
+the image processing program allocates and installs a new colormap.
+.LP
+The user decides to alter some of the colors in the image
+by invoking a color palette program to mix and choose colors.
+The color palette program also needs a
+colormap with eight reds, eight greens, and four blues, so just like
+the image processing program, it must allocate and
+install a new colormap.
+.LP
+Because only one colormap can be installed at a time,
+the color palette may be displayed incorrectly
+whenever the image processing program is active.
+Conversely, whenever the palette program is active,
+the image may be displayed incorrectly.
+The user can never match or compare colors in the palette and image.
+Contention for colormap resources can be reduced if applications
+with similar color needs share colormaps.
+.LP
+The image processing program and the color palette program
+could share the same colormap if there existed a convention that described
+how the colormap was set up.
+Whenever either program was active,
+both would be displayed correctly.
+.LP
+The standard colormap properties define a set of commonly used
+colormaps.
+Applications that share these colormaps and conventions display
+true colors more often and provide a better interface to the user.
+.LP
+Standard colormaps allow applications to share commonly used color
+resources.
+This allows many applications to be displayed in true colors
+simultaneously, even when each application needs an entirely filled
+colormap.
+.LP
+Several standard colormaps are described in this section.
+Usually, a window manager creates these colormaps.
+Applications should use the standard colormaps if they already exist.
+.sp
+.LP
+To allocate an
+.PN XStandardColormap
+structure, use
+.PN XAllocStandardColormap .
+.IN "XAllocStandardColormap" "" "@DEF@"
+.sM
+.FD 0
+XStandardColormap *XAllocStandardColormap\^(\|)
+.FN
+.LP
+.eM
+The
+.PN XAllocStandardColormap
+function allocates and returns a pointer to an
+.PN XStandardColormap
+structure.
+Note that all fields in the
+.PN XStandardColormap
+structure are initially set to zero.
+If insufficient memory is available,
+.PN XAllocStandardColormap
+returns NULL.
+To free the memory allocated to this structure,
+use
+.PN XFree .
+.LP
+The
+.PN XStandardColormap
+structure contains:
+.LP
+.sM
+/* Hints */
+.TS
+lw(.5i) lw(2i) lw(1i).
+T{
+#define
+T} T{
+.PN ReleaseByFreeingColormap
+T} T{
+( (XID) 1L)
+T}
+.TE
+/* Values */
+.IN "XStandardColormap" "" "@DEF@"
+.Ds 0
+.TA .5i 2.5i
+.ta .5i 2.5i
+typedef struct {
+ Colormap colormap;
+ unsigned long red_max;
+ unsigned long red_mult;
+ unsigned long green_max;
+ unsigned long green_mult;
+ unsigned long blue_max;
+ unsigned long blue_mult;
+ unsigned long base_pixel;
+ VisualID visualid;
+ XID killid;
+} XStandardColormap;
+.De
+.LP
+.eM
+The colormap member is the colormap created by the
+.PN XCreateColormap
+function.
+The red_max, green_max, and blue_max members give the maximum
+red, green, and blue values, respectively.
+Each color coefficient ranges from zero to its max, inclusive.
+For example,
+a common colormap allocation is 3/3/2 (3 planes for red, 3
+planes for green, and 2 planes for blue).
+This colormap would have red_max = 7, green_max = 7,
+and blue_max = 3.
+An alternate allocation that uses only 216 colors is red_max = 5,
+green_max = 5, and blue_max = 5.
+.LP
+The red_mult, green_mult, and blue_mult members give the
+scale factors used to compose a full pixel value.
+(See the discussion of the base_pixel members for further information.)
+For a 3/3/2 allocation, red_mult might be 32,
+green_mult might be 4, and blue_mult might be 1.
+For a 6-colors-each allocation, red_mult might be 36,
+green_mult might be 6, and blue_mult might be 1.
+.LP
+The base_pixel member gives the base pixel value used to
+compose a full pixel value.
+Usually, the base_pixel is obtained from a call to the
+.PN XAllocColorPlanes
+function.
+Given integer red, green, and blue coefficients in their appropriate
+ranges, one then can compute a corresponding pixel value by
+using the following expression:
+.LP
+.Ds
+.TA .5i 1.5i
+.ta .5i 1.5i
+(r * red_mult + g * green_mult + b * blue_mult + base_pixel) & 0xFFFFFFFF
+.De
+.LP
+For
+.PN GrayScale
+colormaps,
+only the colormap, red_max, red_mult,
+and base_pixel members are defined.
+The other members are ignored.
+To compute a
+.PN GrayScale
+pixel value, use the following expression:
+.LP
+.Ds
+.TA .5i 1.5i
+.ta .5i 1.5i
+(gray * red_mult + base_pixel) & 0xFFFFFFFF
+.De
+.LP
+Negative multipliers can be represented by converting the 2's
+complement representation of the multiplier into an unsigned long and
+storing the result in the appropriate _mult field.
+The step of masking by 0xFFFFFFFF effectively converts the resulting
+positive multiplier into a negative one.
+The masking step will take place automatically on many machine architectures,
+depending on the size of the integer type used to do the computation.
+.LP
+The visualid member gives the ID number of the visual from which the
+colormap was created.
+The killid member gives a resource ID that indicates whether
+the cells held by this standard colormap are to be released
+by freeing the colormap ID or by calling the
+.PN XKillClient
+function on the indicated resource.
+(Note that this method is necessary for allocating out of an existing colormap.)
+.LP
+The properties containing the
+.PN XStandardColormap
+information have
+the type RGB_COLOR_MAP.
+.LP
+The remainder of this section discusses standard colormap properties and atoms
+as well as how to manipulate standard colormaps.
+.NH 3
+Standard Colormap Properties and Atoms
+.XS
+\*(SN Standard Colormap Properties and Atoms
+.XE
+.LP
+.IN "Standard Colormaps"
+.IN "Colormaps" "standard"
+Several standard colormaps are available.
+Each standard colormap is defined by a property,
+and each such property is identified by an atom.
+The following list names the atoms and describes the colormap
+associated with each one.
+The
+.hN X11/Xatom.h
+header file contains the definitions for each of the following atoms,
+which are prefixed with XA_.
+.IP RGB_DEFAULT_MAP 5
+This atom names a property.
+The value of the property is an array of
+.PN XStandardColormap
+structures.
+Each entry in the array describes an RGB subset of the default color
+map for the Visual specified by visual_id.
+.IP
+Some applications only need a few RGB colors and
+may be able to allocate them from the system default colormap.
+This is the ideal situation because the fewer colormaps that are
+active in the system the more applications are displayed
+with correct colors at all times.
+.IP
+A typical allocation for the RGB_DEFAULT_MAP on 8-plane displays
+is 6 reds, 6 greens, and 6 blues.
+This gives 216 uniformly distributed colors
+(6 intensities of 36 different hues) and still leaves 40 elements
+of a 256-element colormap available for special-purpose colors
+for text, borders, and so on.
+.IP RGB_BEST_MAP 5
+.br
+This atom names a property.
+The value of the property is an
+.PN XStandardColormap .
+.IP
+The property defines the best RGB colormap available on
+the screen.
+(Of course, this is a subjective evaluation.)
+Many image processing and three-dimensional applications need to
+use all available colormap cells and to distribute as many
+perceptually distinct colors as possible over those cells.
+This implies that there may be more green values available than
+red, as well as more green or red than blue.
+.IP
+For an 8-plane
+.PN PseudoColor
+visual,
+RGB_BEST_MAP is likely to be a 3/3/2 allocation.
+For a 24-plane
+.PN DirectColor
+visual,
+RGB_BEST_MAP is normally an 8/8/8 allocation.
+.IP RGB_RED_MAP 5
+.br
+.ns
+.IP RGB_GREEN_MAP 5
+.br
+.ns
+.IP RGB_BLUE_MAP 5
+These atoms name properties.
+The value of each property is an
+.PN XStandardColormap .
+.IP
+The properties define all-red, all-green, and all-blue
+colormaps, respectively.
+These maps are used by applications that want to make color-separated
+images.
+For example, a user might generate a full-color image
+on an 8-plane display both by rendering an image three times
+(once with high color resolution in red, once with green,
+and once with blue) and by multiply exposing a single frame in a camera.
+.IP RGB_GRAY_MAP 5
+This atom names a property.
+The value of the property is an
+.PN XStandardColormap .
+.IP
+The property describes the best
+.PN GrayScale
+colormap available on the screen.
+As previously mentioned,
+only the colormap, red_max, red_mult, and base_pixel members of the
+.PN XStandardColormap
+structure are used for
+.PN GrayScale
+colormaps.
+.NH 3
+Setting and Obtaining Standard Colormaps
+.XS
+\*(SN Setting and Obtaining Standard Colormaps
+.XE
+.LP
+Xlib provides functions that you can use to set and obtain an
+.PN XStandardColormap
+structure.
+.sp
+.LP
+To set an
+.PN XStandardColormap
+structure, use
+.PN XSetRGBColormaps .
+.IN "XSetRGBColormaps" "" "@DEF@"
+.sM
+.FD 0
+void XSetRGBColormaps\^(\^\fIdisplay\fP, \fIw\fP, \fIstd_colormap\fP, \
+\fIcount\fP, \fIproperty\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIw\fP\^;
+.br
+ XStandardColormap *\fIstd_colormap\fP\^;
+.br
+ int \fIcount\fP\^;
+.br
+ Atom \fIproperty\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIw\fP 1i
+Specifies the window.
+.IP \fIstd_colormap\fP 1i
+Specifies the
+.PN XStandardColormap
+structure to be used.
+.ds Cn colormaps
+.IP \fIcount\fP 1i
+Specifies the number of \*(Cn.
+.IP \fIproperty\fP 1i
+Specifies the property name.
+.LP
+.eM
+The
+.PN XSetRGBColormaps
+function replaces the RGB colormap definition in the specified property
+on the named window.
+If the property does not already exist,
+.PN XSetRGBColormaps
+sets the RGB colormap definition in the specified property
+on the named window.
+The property is stored with a type of RGB_COLOR_MAP and a format of 32.
+Note that it is the caller's responsibility to honor the ICCCM
+restriction that only RGB_DEFAULT_MAP contain more than one definition.
+.LP
+The
+.PN XSetRGBColormaps
+function usually is only used by window or session managers.
+To create a standard colormap,
+follow this procedure:
+.IP 1. 5
+Open a new connection to the same server.
+.IP 2. 5
+Grab the server.
+.IP 3. 5
+See if the property is on the property list of the root window for the screen.
+.IP 4. 5
+If the desired property is not present:
+.RS
+.IP \(bu 5
+Create a colormap (unless you are using the default colormap of the screen).
+.IP \(bu 5
+Determine the color characteristics of the visual.
+.IP \(bu 5
+Allocate cells in the colormap (or create it with
+.PN AllocAll ).
+.IP \(bu 5
+Call
+.PN XStoreColors
+to store appropriate color values in the colormap.
+.IP \(bu 5
+Fill in the descriptive members in the
+.PN XStandardColormap
+structure.
+.IP \(bu 5
+Attach the property to the root window.
+.IP \(bu 5
+Use
+.PN XSetCloseDownMode
+to make the resource permanent.
+.RE
+.IP 5. 5
+Ungrab the server.
+.LP
+.PN XSetRGBColormaps
+can generate
+.PN BadAlloc ,
+.PN BadAtom ,
+and
+.PN BadWindow
+errors.
+.sp
+.LP
+To obtain the
+.PN XStandardColormap
+structure associated with the specified property, use
+.PN XGetRGBColormaps .
+.IN "XGetRGBColormaps" "" "@DEF@"
+.sM
+.FD 0
+Status XGetRGBColormaps\^(\^\fIdisplay\fP, \fIw\fP, \fIstd_colormap_return\fP, \
+\fIcount_return\fP, \fIproperty\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIw\fP\^;
+.br
+ XStandardColormap **\fIstd_colormap_return\fP\^;
+.br
+ int *\fIcount_return\fP\^;
+.br
+ Atom \fIproperty\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIw\fP 1i
+Specifies the window.
+.IP \fIstd_colormap_return\fP 1i
+Returns the
+.PN XStandardColormap
+structure.
+.ds Cn colormaps
+.IP \fIcount_return\fP 1i
+Returns the number of \*(Cn.
+.IP \fIproperty\fP 1i
+Specifies the property name.
+.LP
+.eM
+The
+.PN XGetRGBColormaps
+function returns the RGB colormap definitions stored
+in the specified property on the named window.
+If the property exists, is of type RGB_COLOR_MAP, is of format 32,
+and is long enough to contain a colormap definition,
+.PN XGetRGBColormaps
+allocates and fills in space for the returned colormaps
+and returns a nonzero status.
+If the visualid is not present,
+.PN XGetRGBColormaps
+assumes the default visual for the screen on which the window is located;
+if the killid is not present,
+.PN None
+is assumed, which indicates that the resources cannot be released.
+Otherwise,
+none of the fields are set, and
+.PN XGetRGBColormaps
+returns a zero status.
+Note that it is the caller's responsibility to honor the ICCCM
+restriction that only RGB_DEFAULT_MAP contain more than one definition.
+.LP
+.PN XGetRGBColormaps
+can generate
+.PN BadAtom
+and
+.PN BadWindow
+errors.
+.bp