diff options
-rw-r--r-- | Makefile.am | 2 | ||||
-rw-r--r-- | configure.ac | 11 | ||||
-rw-r--r-- | specs/.gitignore | 5 | ||||
-rw-r--r-- | specs/Makefile.am | 72 | ||||
-rw-r--r-- | specs/encoding.xml | 3260 | ||||
-rw-r--r-- | specs/glossary.xml | 1313 | ||||
-rw-r--r-- | specs/keysyms.xml | 6038 | ||||
-rw-r--r-- | specs/sect1-9.xml | 14737 | ||||
-rw-r--r-- | specs/x11protocol.xml | 73 |
9 files changed, 25508 insertions, 3 deletions
diff --git a/Makefile.am b/Makefile.am index 26b9995..e9b30cf 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,3 +1,5 @@ +SUBDIRS=specs + xprotodir = $(includedir)/X11 xproto_HEADERS = \ ap_keysym.h \ diff --git a/configure.ac b/configure.ac index 18044a4..3dc8a13 100644 --- a/configure.ac +++ b/configure.ac @@ -3,11 +3,15 @@ AC_INIT([Xproto], [7.0.18], [https://bugs.freedesktop.org/enter_bug.cgi?product= AM_INIT_AUTOMAKE([foreign dist-bzip2]) AM_MAINTAINER_MODE -# Require xorg-macros: XORG_DEFAULT_OPTIONS +# Require xorg-macros minimum of 1.10 for DocBook XML documentation m4_ifndef([XORG_MACROS_VERSION], - [m4_fatal([must install xorg-macros 1.3 or later before running autoconf/autogen])]) -XORG_MACROS_VERSION(1.3) + [m4_fatal([must install xorg-macros 1.10 or later before running autoconf/autogen])]) +XORG_MACROS_VERSION(1.10) XORG_DEFAULT_OPTIONS +XORG_ENABLE_SPECS +XORG_WITH_XMLTO(0.0.20) +XORG_WITH_FOP +XORG_CHECK_SGML_DOCTOOLS(1.5) AC_CONFIG_HEADER([do-not-use-config.h]) AC_CONFIG_HEADER([Xfuncproto.h]) @@ -205,5 +209,6 @@ fi AC_OUTPUT([Makefile + specs/Makefile Xpoll.h xproto.pc]) diff --git a/specs/.gitignore b/specs/.gitignore new file mode 100644 index 0000000..22ef64b --- /dev/null +++ b/specs/.gitignore @@ -0,0 +1,5 @@ +*.html +*.pdf +*.ps +*.txt +*.css diff --git a/specs/Makefile.am b/specs/Makefile.am new file mode 100644 index 0000000..2e5d6b5 --- /dev/null +++ b/specs/Makefile.am @@ -0,0 +1,72 @@ +# +# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. +# +# 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 (including the next +# paragraph) 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 AUTHORS OR COPYRIGHT HOLDERS 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. +# + +if ENABLE_SPECS + +doc_sources = x11protocol.xml +dist_doc_DATA = $(doc_sources) \ + encoding.xml \ + glossary.xml \ + keysyms.xml \ + sect1-9.xml + +if HAVE_XMLTO +doc_DATA = $(doc_sources:.xml=.html) + +if HAVE_FOP +doc_DATA += $(doc_sources:.xml=.ps) $(doc_sources:.xml=.pdf) +endif + +if HAVE_XMLTO_TEXT +doc_DATA += $(doc_sources:.xml=.txt) +endif + +if HAVE_STYLESHEETS +XMLTO_FLAGS = -m $(XSL_STYLESHEET) --stringparam img.src.path=$(abs_builddir)/ + +doc_DATA += xorg.css +xorg.css: $(STYLESHEET_SRCDIR)/xorg.css + $(AM_V_GEN)cp -pf $(STYLESHEET_SRCDIR)/xorg.css $@ +endif + +CLEANFILES = $(doc_DATA) + +SUFFIXES = .xml .ps .pdf .txt .html + +%.txt: %.xml $(dist_doc_DATA) + $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) txt $< + +%.html: %.xml $(dist_doc_DATA) + $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) xhtml-nochunks $< + +%.pdf: %.xml $(dist_doc_DATA) + $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) --with-fop pdf $< + +%.ps: %.xml $(dist_doc_DATA) + $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) --with-fop ps $< + +chunked-html: $(dist_doc_DATA) + $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) -o html xhtml $(doc_sources) + +endif HAVE_XMLTO +endif ENABLE_SPECS diff --git a/specs/encoding.xml b/specs/encoding.xml new file mode 100644 index 0000000..69a8240 --- /dev/null +++ b/specs/encoding.xml @@ -0,0 +1,3260 @@ +<appendix id="protocol_encoding"> +<title>Protocol Encoding</title> +<!-- + The sections in this appendix correspond to their + number counterparts in the protocol document. +--> +<sect1 id="syntactic_conventions_b"> +<title>Syntactic Conventions</title> + +<para> +All numbers are in decimal, +unless prefixed with #x, in which case they are in hexadecimal (base 16). +</para> + +<para> +The general syntax used to describe requests, replies, errors, events, and +compound types is: +</para> + +<literallayout class="monospaced"> + <emphasis role='bold'>NameofThing</emphasis> + encode-form + ... + encode-form +</literallayout> + +<para> +Each encode-form describes a single component. +</para> +<para> +For components described in the protocol as: +</para> +<literallayout class="monospaced"> + name: TYPE +</literallayout> + +<para> +the encode-form is: +</para> + +<literallayout class="monospaced"> + N TYPE name +</literallayout> + +<para> +N is the number of bytes occupied in the data stream, +and TYPE is the interpretation of those bytes. +For example, +</para> + +<literallayout class="monospaced"> + depth: CARD8 +</literallayout> + +<para> +becomes: +</para> + +<literallayout class="monospaced"> + 1 CARD8 depth +</literallayout> + +<para> +For components with a static numeric value the encode-form is: +</para> + +<literallayout class="monospaced"> + N value name +</literallayout> + +<para> +The value is always interpreted as an N-byte unsigned integer. +For example, +the first two bytes of a +<emphasis role='bold'>Window </emphasis> +error are always zero (indicating an +error in general) and three (indicating the +<emphasis role='bold'>Window </emphasis> +error in particular): +</para> + +<literallayout class="monospaced"> + 1 0 Error + 1 3 code +</literallayout> + +<para> +For components described in the protocol as: +</para> + +<para> +name: +<emphasis role='bold'>{ Name1 ,..., </emphasis> +<emphasis role='bold'>NameI }</emphasis> +</para> + +<para> +the encode-form is: +</para> + +<literallayout class="monospaced"> + N name + value1 Name1 + ... + valueI NameI +</literallayout> + +<para> +The value is always interpreted as an N-byte unsigned integer. +Note that the size of N is sometimes larger than that strictly required +to encode the values. +For example: +</para> + +<para> +class: +{ <emphasis role='bold'>InputOutput</emphasis>, +<emphasis role='bold'>InputOnly</emphasis>, +<emphasis role='bold'>CopyFromParent</emphasis> } +</para> + +<para> +becomes: +</para> + +<literallayout class="monospaced"> +2 class + 0 CopyFromParent + 1 InputOutput + 2 InputOnly +</literallayout> + +<para> +For components described in the protocol as: +</para> + +<para> +NAME: TYPE or +<emphasis role='bold'>Alternative1 ...or</emphasis> +<emphasis role='bold'>AlternativeI</emphasis> +</para> + +<para> +the encode-form is: +</para> + +<literallayout class="monospaced"> +N TYPE NAME + value1 Alternative1 + ... + valueI AlternativeI +</literallayout> + +<para> +The alternative values are guaranteed not to conflict with the encoding +of TYPE. +For example: +</para> + +<para> +destination: WINDOW or +<emphasis role='bold'>PointerWindow </emphasis> +or +<emphasis role='bold'>InputFocus</emphasis> +</para> + +<para> +becomes: +</para> + +<literallayout class="monospaced"> +4 WINDOW destination + 0 PointerWindow + 1 InputFocus +</literallayout> + +<para> +For components described in the protocol as: +</para> + +<literallayout class="monospaced"> + value-mask: BITMASK +</literallayout> + +<para> +the encode-form is: +</para> + +<literallayout class="monospaced"> +N BITMASK value-mask + mask1 mask-name1 + ... + maskI mask-nameI +</literallayout> + +<para> +The individual bits in the mask are specified and named, +and N is 2 or 4. +The most-significant bit in a BITMASK is reserved for use in defining +chained (multiword) bitmasks, as extensions augment existing core requests. +The precise interpretation of this bit is not yet defined here, +although a probable mechanism is that a 1-bit indicates that another N bytes +of bitmask follows, with bits within the overall mask still interpreted +from least-significant to most-significant with an N-byte unit, +with N-byte units +interpreted in stream order, and with the overall mask being byte-swapped +in individual N-byte units. +</para> + +<para> +For LISTofVALUE encodings, the request is followed by a section of the form: +</para> + +<literallayout class="monospaced"> + VALUEs + encode-form + ... + encode-form +</literallayout> + +<para> +listing an encode-form for each VALUE. +The NAME in each encode-form keys to the corresponding BITMASK bit. +The encoding of a VALUE always occupies four bytes, +but the number of bytes specified in the encoding-form indicates how +many of the least-significant bytes are actually used; +the remaining bytes are unused and their values do not matter. +</para> + +<para> +In various cases, the number of bytes occupied by a component will be +specified +by a lowercase single-letter variable name instead of a specific numeric +value, and often some other component will have its value specified as a +simple numeric expression involving these variables. +Components specified with such expressions are always interpreted +as unsigned integers. +The scope of such variables is always just the enclosing request, reply, +error, event, or compound type structure. +For example: +</para> + +<literallayout class="monospaced"> +2 3+n request length +4n LISTofPOINT points +</literallayout> + +<para> +For unused bytes (the values of the bytes are undefined and do no matter), +the encode-form is: +</para> + +<literallayout class="monospaced"> + N unused +</literallayout> + +<para> +<!-- .LP --> +If the number of unused bytes is variable, the encode-form typically is: +</para> + +<literallayout class="monospaced"> + p unused, p=pad(E) +</literallayout> + +<para> +where E is some expression, +and pad(E) is the number of bytes needed to round E up to a multiple of four. +</para> + +<literallayout class="monospaced"> + pad(E) = (4 - (E mod 4)) mod 4 +</literallayout> +</sect1> + +<sect1 id="common_types_2"> +<title>Common Types</title> + +<variablelist> + <varlistentry> + <term>LISTofFOO</term> + <listitem> + <para> +In this document the LISTof notation strictly means some number of repetitions +of the FOO encoding; +the actual length of the list is encoded elsewhere. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term>SETofFOO</term> + <listitem> + <para> +A set is always represented by a bitmask, with a 1-bit indicating presence in +the set. + </para> + </listitem> + </varlistentry> +</variablelist> + +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep="0"/> + <tbody> + <row rowsep='0'> + <entry> +BITMASK: CARD32 + </entry> + </row> + <row rowsep='0'> + <entry> +WINDOW: CARD32 + </entry> + </row> + <row rowsep='0'> + <entry> +PIXMAP: CARD32 + </entry> + </row> + <row rowsep='0'> + <entry> +CURSOR: CARD32 + </entry> + </row> + <row rowsep='0'> + <entry> +FONT: CARD32 + </entry> + </row> + <row rowsep='0'> + <entry> +GCONTEXT: CARD32 + </entry> + </row> + <row rowsep='0'> + <entry> +COLORMAP: CARD32 + </entry> + </row> + <row rowsep='0'> + <entry> +DRAWABLE: CARD32 + </entry> + </row> + <row rowsep='0'> + <entry> +FONTABLE: CARD32 + </entry> + </row> + <row rowsep='0'> + <entry> +ATOM: CARD32 + </entry> + </row> + <row rowsep='0'> + <entry> +VISUALID: CARD32 + </entry> + </row> + <row rowsep='0'> + <entry> +BYTE: 8-bit value + </entry> + </row> + <row rowsep='0'> + <entry> +INT8: 8-bit signed integer + </entry> + </row> + <row rowsep='0'> + <entry> +INT16: 16-bit signed integer + </entry> + </row> + <row rowsep='0'> + <entry> +INT32: 32-bit signed integer + </entry> + </row> + <row rowsep='0'> + <entry> +CARD8: 8-bit unsigned integer + </entry> + </row> + <row rowsep='0'> + <entry> +CARD16: 16-bit unsigned integer + </entry> + </row> + <row rowsep='0'> + <entry> +CARD32: 32-bit unsigned integer + </entry> + </row> + <row rowsep='0'> + <entry> +TIMESTAMP: CARD32 + </entry> + </row> + </tbody> + </tgroup> +</informaltable> + + +<literallayout class="monospaced"> +BITGRAVITY + 0 Forget + 1 NorthWest + 2 North + 3 NorthEast + 4 West + 5 Center + 6 East + 7 SouthWest + 8 South + 9 SouthEast + 10 Static + +WINGRAVITY + 0 Unmap + 1 NorthWest + 2 North + 3 NorthEast + 4 West + 5 Center + 6 East + 7 SouthWest + 8 South + 9 SouthEast + 10 Static + +BOOL + 0 False + 1 True + +SETofEVENT + #x00000001 KeyPress + #x00000002 KeyRelease + #x00000004 ButtonPress + #x00000008 ButtonRelease + #x00000010 EnterWindow + #x00000020 LeaveWindow + #x00000040 PointerMotion + #x00000080 PointerMotionHint + #x00000100 Button1Motion + #x00000200 Button2Motion + #x00000400 Button3Motion + #x00000800 Button4Motion + #x00001000 Button5Motion + #x00002000 ButtonMotion + #x00004000 KeymapState + #x00008000 Exposure + #x00010000 VisibilityChange + #x00020000 StructureNotify + #x00040000 ResizeRedirect + #x00080000 SubstructureNotify + #x00100000 SubstructureRedirect + #x00200000 FocusChange + #x00400000 PropertyChange + #x00800000 ColormapChange + #x01000000 OwnerGrabButton + #xFE000000 unused but must be zero + +SETofPOINTEREVENT + encodings are the same as for SETofEVENT, except with + #xFFFF8003 unused but must be zero + +SETofDEVICEEVENT + encodings are the same as for SETofEVENT, except with + #xFFFFC0B0 unused but must be zero + +KEYSYM: CARD32 +KEYCODE: CARD8 +BUTTON: CARD8 + +SETofKEYBUTMASK + #x0001 Shift + #x0002 Lock + #x0004 Control + #x0008 Mod1 + #x0010 Mod2 + #x0020 Mod3 + #x0040 Mod4 + #x0080 Mod5 + #x0100 Button1 + #x0200 Button2 + #x0400 Button3 + #x0800 Button4 + #x1000 Button5 + #xE000 unused but must be zero + +SETofKEYMASK + encodings are the same as for SETofKEYBUTMASK, except with + #xFF00 unused but must be zero +STRING8: LISTofCARD8 +STRING16: LISTofCHAR2B + +CHAR2B + 1 CARD8 byte1 + 1 CARD8 byte2 + +POINT + 2 INT16 x + 2 INT16 y + +RECTANGLE + 2 INT16 x + 2 INT16 y + 2 CARD16 width + 2 CARD16 height + +ARC + 2 INT16 x + 2 INT16 y + 2 CARD16 width + 2 CARD16 height + 2 INT16 angle1 + 2 INT16 angle2 + +HOST + 1 family + 0 Internet + 1 DECnet + 2 Chaos + 5 ServerInterpreted + 6 InternetV6 + 1 unused + 2 n length of address + n LISTofBYTE address + p unused, p=pad(n) + +STR + 1 n length of name in bytes + n STRING8 name + +</literallayout> +</sect1> + +<sect1 id="errors_2"> +<title>Errors</title> + +<literallayout class="monospaced"> +<emphasis role='bold'>Request</emphasis> + 1 0 Error + 1 1 code + 2 CARD16 sequence number + 4 unused + 2 CARD16 minor opcode + 1 CARD8 major opcode + 21 unused + +<emphasis role='bold'>Value</emphasis> + 1 0 Error + 1 2 code + 2 CARD16 sequence number + 4 <32-bits> bad value + 2 CARD16 minor opcode + 1 CARD8 major opcode + 21 unused + +<emphasis role='bold'>Window</emphasis> + 1 0 Error + 1 3 code + 2 CARD16 sequence number + 4 CARD32 bad resource id + 2 CARD16 minor opcode + 1 CARD8 major opcode + 21 unused + +<emphasis role='bold'>Pixmap</emphasis> + 1 0 Error + 1 4 code + 2 CARD16 sequence number + 4 CARD32 bad resource id + 2 CARD16 minor opcode + 1 CARD8 major opcode + 21 unused + +<emphasis role='bold'>Atom</emphasis> + 1 0 Error + 1 5 code + 2 CARD16 sequence number + 4 CARD32 bad atom id + 2 CARD16 minor opcode + 1 CARD8 major opcode + 21 unused + +<emphasis role='bold'>Cursor</emphasis> + 1 0 Error + 1 6 code + 2 CARD16 sequence number + 4 CARD32 bad resource id + 2 CARD16 minor opcode + 1 CARD8 major opcode + 21 unused + +<emphasis role='bold'>Font</emphasis> + 1 0 Error + 1 7 code + 2 CARD16 sequence number + 4 CARD32 bad resource id + 2 CARD16 minor opcode + 1 CARD8 major opcode + 21 unused + +<emphasis role='bold'>Match</emphasis> + 1 0 Error + 1 8 code + 2 CARD16 sequence number + 4 unused + 2 CARD16 minor opcode + 1 CARD8 major opcode + 21 unused + +<emphasis role='bold'>Drawable</emphasis> + 1 0 Error + 1 9 code + 2 CARD16 sequence number + 4 CARD32 bad resource id + 2 CARD16 minor opcode + 1 CARD8 major opcode + 21 unused + +<emphasis role='bold'>Access</emphasis> + 1 0 Error + 1 10 code + 2 CARD16 sequence number + 4 unused + 2 CARD16 minor opcode + 1 CARD8 major opcode + 21 unused + +<emphasis role='bold'>Alloc</emphasis> + 1 0 Error + 1 11 code + 2 CARD16 sequence number + 4 unused + 2 CARD16 minor opcode + 1 CARD8 major opcode + 21 unused + +<emphasis role='bold'>Colormap</emphasis> + 1 0 Error + 1 12 code + 2 CARD16 sequence number + 4 CARD32 bad resource id + 2 CARD16 minor opcode + 1 CARD8 major opcode + 21 unused + +<emphasis role='bold'>GContext</emphasis> + 1 0 Error + 1 13 code + 2 CARD16 sequence number + 4 CARD32 bad resource id + 2 CARD16 minor opcode + 1 CARD8 major opcode + 21 unused + +<emphasis role='bold'>IDChoice</emphasis> + 1 0 Error + 1 14 code + 2 CARD16 sequence number + 4 CARD32 bad resource id + 2 CARD16 minor opcode + 1 CARD8 major opcode + 21 unused + +<emphasis role='bold'>Name</emphasis> + 1 0 Error + 1 15 code + 2 CARD16 sequence number + 4 unused + 2 CARD16 minor opcode + 1 CARD8 major opcode + 21 unused + +<emphasis role='bold'>Length</emphasis> + 1 0 Error + 1 16 code + 2 CARD16 sequence number + 4 unused + 2 CARD16 minor opcode + 1 CARD8 major opcode + 21 unused + +<emphasis role='bold'>Implementation</emphasis> + 1 0 Error + 1 17 code + 2 CARD16 sequence number + 4 unused + 2 CARD16 minor opcode + 1 CARD8 major opcode + 21 unused +</literallayout> +</sect1> + +<sect1 id="keyboards_2"> +<title>Keyboards</title> + +<para> +KEYCODE values are always greater than 7 (and less than 256). +</para> + +<para> +KEYSYM values with the bit #x10000000 set are reserved as vendor-specific. +</para> + +<para> +The names and encodings of the standard KEYSYM values are contained in +Appendix A, Keysym Encoding. <!-- xref --> +</para> +</sect1> + +<sect1 id="pointers_2"> +<title>Pointers</title> + +<para> +BUTTON values are numbered starting with one. +</para> + +</sect1> +<sect1 id="predefined"> +<title>Predefined Atoms</title> + +<literallayout class="monospaced"> +PRIMARY 1 WM_NORMAL_HINTS 40 +SECONDARY 2 WM_SIZE_HINTS 41 +ARC 3 WM_ZOOM_HINTS 42 +ATOM 4 MIN_SPACE 43 +BITMAP 5 NORM_SPACE 44 +CARDINAL 6 MAX_SPACE 45 +COLORMAP 7 END_SPACE 46 +CURSOR 8 SUPERSCRIPT_X 47 +CUT_BUFFER0 9 SUPERSCRIPT_Y 48 +CUT_BUFFER1 10 SUBSCRIPT_X 49 +CUT_BUFFER2 11 SUBSCRIPT_Y 50 +CUT_BUFFER3 12 UNDERLINE_POSITION 51 +CUT_BUFFER4 13 UNDERLINE_THICKNESS 52 +CUT_BUFFER5 14 STRIKEOUT_ASCENT 53 +CUT_BUFFER6 15 STRIKEOUT_DESCENT 54 +CUT_BUFFER7 16 ITALIC_ANGLE 55 +DRAWABLE 17 X_HEIGHT 56 +FONT 18 QUAD_WIDTH 57 +INTEGER 19 WEIGHT 58 +PIXMAP 20 POINT_SIZE 59 +POINT 21 RESOLUTION 60 +RECTANGLE 22 COPYRIGHT 61 +RESOURCE_MANAGER 23 NOTICE 62 +RGB_COLOR_MAP 24 FONT_NAME 63 +RGB_BEST_MAP 25 FAMILY_NAME 64 +RGB_BLUE_MAP 26 FULL_NAME 65 +RGB_DEFAULT_MAP 27 CAP_HEIGHT 66 +RGB_GRAY_MAP 28 WM_CLASS 67 +RGB_GREEN_MAP 29 WM_TRANSIENT_FOR 68 +RGB_RED_MAP 30 +STRING 31 +VISUALID 32 +WINDOW 33 +WM_COMMAND 34 +WM_HINTS 35 +WM_CLIENT_MACHINE 36 +WM_ICON_NAME 37 +WM_ICON_SIZE 38 +WM_NAME 39 +</literallayout> +</sect1> + +<sect1 id="connection_setup_2"> +<title>Connection Setup</title> + +<para> +For TCP connections, +displays on a given host are numbered starting from 0, +and the server for display N listens and accepts connections on port 6000 + N. +For DECnet connections, +displays on a given host are numbered starting from 0, +and the server for display N listens and accepts connections on the object +name obtained by concatenating "X$X" with the decimal representation of N, +for example, X$X0 and X$X1. +</para> + +<para> +Information sent by the client at connection setup: +</para> + +<literallayout class="monospaced"> + 1 byte-order + #x42 MSB first + #x6C LSB first + 1 unused + 2 CARD16 protocol-major-version + 2 CARD16 protocol-minor-version + 2 n length of authorization-protocol-name + 2 d length of authorization-protocol-data + 2 unused + n STRING8 authorization-protocol-name + p unused, p=pad(n) + d STRING8 authorization-protocol-data + q unused, q=pad(d) +</literallayout> + +<para> +Except where explicitly noted in the protocol, +all 16-bit and 32-bit quantities sent by the client must be transmitted +with the specified byte order, +and all 16-bit and 32-bit quantities returned by the server will be transmitted +with this byte order. +</para> + +<para> +Information received by the client if the connection is refused: +</para> + +<literallayout class="monospaced"> + 1 0 Failed + 1 n length of reason in bytes + 2 CARD16 protocol-major-version + 2 CARD16 protocol-minor-version + 2 (n+p)/4 length in 4-byte units of "additional data" + n STRING8 reason + p unused, p=pad(n) +</literallayout> + +<para> +Information received by the client if further authentication is required: +</para> + +<literallayout class="monospaced"> + 1 2 Authenticate + 5 unused + 2 (n+p)/4 length in 4-byte units of "additional data" + n STRING8 reason + p unused, p=pad(n) +</literallayout> + +<para> +Information received by the client if the connection is accepted: +</para> + +<literallayout class="monospaced"> + 1 1 Success + 1 unused + 2 CARD16 protocol-major-version + 2 CARD16 protocol-minor-version + 2 8+2n+(v+p+m)/4 length in 4-byte units of + "additional data" + 4 CARD32 release-number + 4 CARD32 resource-id-base + 4 CARD32 resource-id-mask + 4 CARD32 motion-buffer-size + 2 v length of vendor + 2 CARD16 maximum-request-length + 1 CARD8 number of SCREENs in roots + 1 n number for FORMATs in + pixmap-formats + 1 image-byte-order + 0 LSBFirst + 1 MSBFirst + 1 bitmap-format-bit-order + 0 LeastSignificant + 1 MostSignificant + 1 CARD8 bitmap-format-scanline-unit + 1 CARD8 bitmap-format-scanline-pad + 1 KEYCODE min-keycode + 1 KEYCODE max-keycode + 4 unused + v STRING8 vendor + p unused, p=pad(v) + 8n LISTofFORMAT pixmap-formats + m LISTofSCREEN roots (m is always a multiple of 4) +</literallayout> + +<literallayout class="monospaced"> +FORMAT + 1 CARD8 depth + 1 CARD8 bits-per-pixel + 1 CARD8 scanline-pad + 5 unused +</literallayout> + +<literallayout class="monospaced"> +SCREEN + 4 WINDOW root + 4 COLORMAP default-colormap + 4 CARD32 white-pixel + 4 CARD32 black-pixel + 4 SETofEVENT current-input-masks + 2 CARD16 width-in-pixels + 2 CARD16 height-in-pixels + 2 CARD16 width-in-millimeters + 2 CARD16 height-in-millimeters + 2 CARD16 min-installed-maps + 2 CARD16 max-installed-maps + 4 VISUALID root-visual + 1 backing-stores + 0 Never + 1 WhenMapped + 2 Always + 1 BOOL save-unders + 1 CARD8 root-depth + 1 CARD8 number of DEPTHs in allowed-depths + n LISTofDEPTH allowed-depths (n is always a + multiple of 4) +</literallayout> + +<literallayout class="monospaced"> +DEPTH + 1 CARD8 depth + 1 unused + 2 n number of VISUALTYPES in visuals + 4 unused + 24n LISTofVISUALTYPE visuals +</literallayout> + +<literallayout class="monospaced"> +VISUALTYPE + 4 VISUALID visual-id + 1 class + 0 StaticGray + 1 GrayScale + 2 StaticColor + 3 PseudoColor + 4 TrueColor + 5 DirectColor + 1 CARD8 bits-per-rgb-value + 2 CARD16 colormap-entries + 4 CARD32 red-mask + 4 CARD32 green-mask + 4 CARD32 blue-mask + 4 unused +</literallayout> +</sect1> + +<sect1 id="requests_2"> +<title>Requests</title> + +<literallayout class="monospaced"> +<emphasis role='bold'>CreateWindow</emphasis> + 1 1 opcode + 1 CARD8 depth + 2 8+n request length + 4 WINDOW wid + 4 WINDOW parent + 2 INT16 x + 2 INT16 y + 2 CARD16 width + 2 CARD16 height + 2 CARD16 border-width + 2 class + 0 CopyFromParent + 1 InputOutput + 2 InputOnly + 4 VISUALID visual + 0 CopyFromParent + 4 BITMASK value-mask (has n bits set to 1) + #x00000001 background-pixmap + #x00000002 background-pixel + #x00000004 border-pixmap + #x00000008 border-pixel + #x00000010 bit-gravity + #x00000020 win-gravity + #x00000040 backing-store + #x00000080 backing-planes + #x00000100 backing-pixel + #x00000200 override-redirect + #x00000400 save-under + #x00000800 event-mask + #x00001000 do-not-propagate-mask + #x00002000 colormap + #x00004000 cursor + 4n LISTofVALUE value-list + + VALUEs + 4 PIXMAP background-pixmap + 0 None + 1 ParentRelative + 4 CARD32 background-pixel + 4 PIXMAP border-pixmap + 0 CopyFromParent + 4 CARD32 border-pixel + 1 BITGRAVITY bit-gravity + 1 WINGRAVITY win-gravity + 1 backing-store + 0 NotUseful + 1 WhenMapped + 2 Always + 4 CARD32 backing-planes + 4 CARD32 backing-pixel + 1 BOOL override-redirect + 1 BOOL save-under + 4 SETofEVENT event-mask + 4 SETofDEVICEEVENT do-not-propagate-mask + 4 COLORMAP colormap + 0 CopyFromParent + 4 CURSOR cursor + 0 None + +<emphasis role='bold'>ChangeWindowAttributes</emphasis> + 1 2 opcode + 1 unused + 2 3+n request length + 4 WINDOW window + 4 BITMASK value-mask (has n bits set to 1) + encodings are the same as for CreateWindow + 4n LISTofVALUE value-list + encodings are the same as for CreateWindow + +<emphasis role='bold'>GetWindowAttributes</emphasis> + 1 3 opcode + 1 unused + 2 2 request length + 4 WINDOW window + +-> + 1 1 Reply + 1 backing-store + 0 NotUseful + 1 WhenMapped + 2 Always + 2 CARD16 sequence number + 4 3 reply length + 4 VISUALID visual + 2 class + 1 InputOutput + 2 InputOnly + 1 BITGRAVITY bit-gravity + 1 WINGRAVITY win-gravity + 4 CARD32 backing-planes + 4 CARD32 backing-pixel + 1 BOOL save-under + 1 BOOL map-is-installed + 1 map-state + 0 Unmapped + 1 Unviewable + 2 Viewable + 1 BOOL override-redirect + 4 COLORMAP colormap + 0 None + 4 SETofEVENT all-event-masks + 4 SETofEVENT your-event-mask + 2 SETofDEVICEEVENT do-not-propagate-mask + 2 unused + +<emphasis role='bold'>DestroyWindow</emphasis> + 1 4 opcode + 1 unused + 2 2 request length + 4 WINDOW window + +<emphasis role='bold'>DestroySubwindows</emphasis> + 1 5 opcode + 1 unused + 2 2 request length + 4 WINDOW window + +<emphasis role='bold'>ChangeSaveSet</emphasis> + 1 6 opcode + 1 mode + 0 Insert + 1 Delete + 2 2 request length + 4 WINDOW window + +<emphasis role='bold'>ReparentWindow</emphasis> + 1 7 opcode + 1 unused + 2 4 request length + 4 WINDOW window + 4 WINDOW parent + 2 INT16 x + 2 INT16 y + +<emphasis role='bold'>MapWindow</emphasis> + 1 8 opcode + 1 unused + 2 2 request length + 4 WINDOW window + +<emphasis role='bold'>MapSubwindows</emphasis> + 1 9 opcode + 1 unused + 2 2 request length + 4 WINDOW window + +<emphasis role='bold'>UnmapWindow</emphasis> + 1 10 opcode + 1 unused + 2 2 request length + 4 WINDOW window + +<emphasis role='bold'>UnmapSubwindows</emphasis> + 1 11 opcode + 1 unused + 2 2 request length + 4 WINDOW window + +<emphasis role='bold'>ConfigureWindow</emphasis> + 1 12 opcode + 1 unused + 2 3+n request length + 4 WINDOW window + 2 BITMASK value-mask (has n bits set to 1) + #x0001 x + #x0002 y + #x0004 width + #x0008 height + #x0010 border-width + #x0020 sibling + #x0040 stack-mode + 2 unused + 4n LISTofVALUE value-list + + VALUEs + 2 INT16 x + 2 INT16 y + 2 CARD16 width + 2 CARD16 height + 2 CARD16 border-width + 4 WINDOW sibling + 1 stack-mode + 0 Above + 1 Below + 2 TopIf + 3 BottomIf + 4 Opposite + +<emphasis role='bold'>CirculateWindow</emphasis> + 1 13 opcode + 1 direction + 0 RaiseLowest + 1 LowerHighest + 2 2 request length + 4 WINDOW window + +<emphasis role='bold'>GetGeometry</emphasis> + 1 14 opcode + 1 unused + 2 2 request length + 4 DRAWABLE drawable + +-> + 1 1 Reply + 1 CARD8 depth + 2 CARD16 sequence number + 4 0 reply length + 4 WINDOW root + 2 INT16 x + 2 INT16 y + 2 CARD16 width + 2 CARD16 height + 2 CARD16 border-width + 10 unused + +<emphasis role='bold'>QueryTree</emphasis> + 1 15 opcode + 1 unused + 2 2 request length + 4 WINDOW window + +-> + 1 1 Reply + 1 unused + 2 CARD16 sequence number + 4 n reply length + 4 WINDOW root + 4 WINDOW parent + 0 None + 2 n number of WINDOWs in children + 14 unused + 4n LISTofWINDOW children + +<emphasis role='bold'>InternAtom</emphasis> + 1 16 opcode + 1 BOOL only-if-exists + 2 2+(n+p)/4 request length + 2 n length of name + 2 unused + n STRING8 name + p unused, p=pad(n) + +-> + 1 1 Reply + 1 unused + 2 CARD16 sequence number + 4 0 reply length + 4 ATOM atom + 0 None + 20 unused + +<emphasis role='bold'>GetAtomName</emphasis> + 1 17 opcode + 1 unused + 2 2 request length + 4 ATOM atom + +-> + 1 1 Reply + 1 unused + 2 CARD16 sequence number + 4 (n+p)/4 reply length + 2 n length of name + 22 unused + n STRING8 name + p unused, p=pad(n) + +<emphasis role='bold'>ChangeProperty</emphasis> + 1 18 opcode + 1 mode + 0 Replace + 1 Prepend + 2 Append + 2 6+(n+p)/4 request length + 4 WINDOW window + 4 ATOM property + 4 ATOM type + 1 CARD8 format + 3 unused + 4 CARD32 length of data in format units + (= n for format = 8) + (= n/2 for format = 16) + (= n/4 for format = 32) + n LISTofBYTE data + (n is a multiple of 2 for format = 16) + (n is a multiple of 4 for format = 32) + p unused, p=pad(n) + + +<emphasis role='bold'>DeleteProperty</emphasis> + 1 19 opcode + 1 unused + 2 3 request length + 4 WINDOW window + 4 ATOM property + +<emphasis role='bold'>GetProperty</emphasis> + 1 20 opcode + 1 BOOL delete + 2 6 request length + 4 WINDOW window + 4 ATOM property + 4 ATOM type + 0 AnyPropertyType + 4 CARD32 long-offset + 4 CARD32 long-length + +-> + 1 1 Reply + 1 CARD8 format + 2 CARD16 sequence number + 4 (n+p)/4 reply length + 4 ATOM type + 0 None + 4 CARD32 bytes-after + 4 CARD32 length of value in format units + (= 0 for format = 0) + (= n for format = 8) + (= n/2 for format = 16) + (= n/4 for format = 32) + 12 unused + n LISTofBYTE value + (n is zero for format = 0) + (n is a multiple of 2 for format = 16) + (n is a multiple of 4 for format = 32) + p unused, p=pad(n) + +<emphasis role='bold'>ListProperties</emphasis> + 1 21 opcode + 1 unused + 2 2 request length + 4 WINDOW window + +-> + 1 1 Reply + 1 unused + 2 CARD16 sequence number + 4 n reply length + 2 n number of ATOMs in atoms + 22 unused + 4n LISTofATOM atoms + +<emphasis role='bold'>SetSelectionOwner</emphasis> + 1 22 opcode + 1 unused + 2 4 request length + 4 WINDOW owner + 0 None + 4 ATOM selection + 4 TIMESTAMP time + 0 CurrentTime + +<emphasis role='bold'>GetSelectionOwner</emphasis> + 1 23 opcode + 1 unused + 2 2 request length + 4 ATOM selection + +-> + 1 1 Reply + 1 unused + 2 CARD16 sequence number + 4 0 reply length + 4 WINDOW owner + 0 None + 20 unused + +<emphasis role='bold'>ConvertSelection</emphasis> + 1 24 opcode + 1 unused + 2 6 request length + 4 WINDOW requestor + 4 ATOM selection + 4 ATOM target + 4 ATOM property + 0 None + 4 TIMESTAMP time + 0 CurrentTime + +<emphasis role='bold'>SendEvent</emphasis> + 1 25 opcode + 1 BOOL propagate + 2 11 requestlength + 4 WINDOW destination + 0 PointerWindow + 1 InputFocus + 4 SETofEVENT event-mask + 32 event + standard event format (see the Events section) + +<emphasis role='bold'>GrabPointer</emphasis> + 1 26 opcode + 1 BOOL owner-events + 2 6 request length + 4 WINDOW grab-window + 2 SETofPOINTEREVENT event-mask + 1 pointer-mode + 0 Synchronous + 1 Asynchronous + 1 keyboard-mode + 0 Synchronous + 1 Asynchronous + 4 WINDOW confine-to + 0 None + 4 CURSOR cursor + 0 None + 4 TIMESTAMP time + 0 CurrentTime + +-> + 1 1 Reply + 1 status + 0 Success + 1 AlreadyGrabbed + 2 InvalidTime + 3 NotViewable + 4 Frozen + 2 CARD16 sequence number + 4 0 reply length + 24 unused + +<emphasis role='bold'>UngrabPointer</emphasis> + 1 27 opcode + 1 unused + 2 2 request length + 4 TIMESTAMP time + 0 CurrentTime + +<emphasis role='bold'>GrabButton</emphasis> + 1 28 opcode + 1 BOOL owner-events + 2 6 request length + 4 WINDOW grab-window + 2 SETofPOINTEREVENT event-mask + 1 pointer-mode + 0 Synchronous + 1 Asynchronous + 1 keyboard-mode + 0 Synchronous + 1 Asynchronous + 4 WINDOW confine-to + 0 None + 4 CURSOR cursor + 0 None + 1 BUTTON button + 0 AnyButton + 1 unused + 2 SETofKEYMASK modifiers + #x8000 AnyModifier + +<emphasis role='bold'>UngrabButton</emphasis> + 1 29 opcode + 1 BUTTON button + 0 AnyButton + 2 3 request length + 4 WINDOW grab-window + 2 SETofKEYMASK modifiers + #x8000 AnyModifier + 2 unused + +<emphasis role='bold'>ChangeActivePointerGrab</emphasis> + 1 30 opcode + 1 unused + 2 4 request length + 4 CURSOR cursor + 0 None + 4 TIMESTAMP time + 0 CurrentTime + 2 SETofPOINTEREVENT event-mask + 2 unused + +<emphasis role='bold'>GrabKeyboard</emphasis> + 1 31 opcode + 1 BOOL owner-events + 2 4 request length + 4 WINDOW grab-window + 4 TIMESTAMP time + 0 CurrentTime + 1 pointer-mode + 0 Synchronous + 1 Asynchronous + 1 keyboard-mode + 0 Synchronous + 1 Asynchronous + 2 unused + +-> + 1 1 Reply + 1 status + 0 Success + 1 AlreadyGrabbed + 2 InvalidTime + 3 NotViewable + 4 Frozen + 2 CARD16 sequence number + 4 0 reply length + 24 unused + +<emphasis role='bold'>UngrabKeyboard</emphasis> + 1 32 opcode + 1 unused + 2 2 request length + 4 TIMESTAMP time + 0 CurrentTime + +<emphasis role='bold'>GrabKey</emphasis> + 1 33 opcode + 1 BOOL owner-events + 2 4 request length + 4 WINDOW grab-window + 2 SETofKEYMASK modifiers + #x8000 AnyModifier + 1 KEYCODE key + 0 AnyKey + 1 pointer-mode + 0 Synchronous + 1 Asynchronous + 1 keyboard-mode + 0 Synchronous + 1 Asynchronous + 3 unused + +<emphasis role='bold'>UngrabKey</emphasis> + 1 34 opcode + 1 KEYCODE key + 0 AnyKey + 2 3 request length + 4 WINDOW grab-window + 2 SETofKEYMASK modifiers + #x8000 AnyModifier + 2 unused + +<emphasis role='bold'>AllowEvents</emphasis> + 1 35 opcode + 1 mode + 0 AsyncPointer + 1 SyncPointer + 2 ReplayPointer + 3 AsyncKeyboard + 4 SyncKeyboard + 5 ReplayKeyboard + 6 AsyncBoth + 7 SyncBoth + 2 2 request length + 4 TIMESTAMP time + 0 CurrentTime + +<emphasis role='bold'>GrabServer</emphasis> + 1 36 opcode + 1 unused + 2 1 request length + +<emphasis role='bold'>UngrabServer</emphasis> + 1 37 opcode + 1 unused + 2 1 request length + +<emphasis role='bold'>QueryPointer</emphasis> + 1 38 opcode + 1 unused + 2 2 request length + 4 WINDOW window + +-> + 1 1 Reply + 1 BOOL same-screen + 2 CARD16 sequence number + 4 0 reply length + 4 WINDOW root + 4 WINDOW child + 0 None + 2 INT16 root-x + 2 INT16 root-y + 2 INT16 win-x + 2 INT16 win-y + 2 SETofKEYBUTMASK mask + 6 unused + +<emphasis role='bold'>GetMotionEvents</emphasis> + 1 39 opcode + 1 unused + 2 4 request length + 4 WINDOW window + 4 TIMESTAMP start + 0 CurrentTime + 4 TIMESTAMP stop + 0 CurrentTime + +-> + 1 1 Reply + 1 unused + 2 CARD16 sequence number + 4 2n reply length + 4 n number of TIMECOORDs in events + 20 unused + 8n LISTofTIMECOORD events + + TIMECOORD + 4 TIMESTAMP time + 2 INT16 x + 2 INT16 y + +<emphasis role='bold'>TranslateCoordinates</emphasis> + 1 40 opcode + 1 unused + 2 4 request length + 4 WINDOW src-window + 4 WINDOW dst-window + 2 INT16 src-x + 2 INT16 src-y +-> + 1 1 Reply + 1 BOOL same-screen + 2 CARD16 sequence number + 4 0 reply length + 4 WINDOW child + 0 None + 2 INT16 dst-x + 2 INT16 dst-y + 16 unused + +<emphasis role='bold'>WarpPointer</emphasis> + 1 41 opcode + 1 unused + 2 6 request length + 4 WINDOW src-window + 0 None + 4 WINDOW dst-window + 0 None + 2 INT16 src-x + 2 INT16 src-y + 2 CARD16 src-width + 2 CARD16 src-height + 2 INT16 dst-x + 2 INT16 dst-y + +<emphasis role='bold'>SetInputFocus</emphasis> + 1 42 opcode + 1 revert-to + 0 None + 1 PointerRoot + 2 Parent + 2 3 request length + 4 WINDOW focus + 0 None + 1 PointerRoot + 4 TIMESTAMP time + 0 CurrentTime + +<emphasis role='bold'>GetInputFocus</emphasis> + 1 43 opcode + 1 unused + 2 1 request length + +-> + 1 1 Reply + 1 revert-to + 0 None + 1 PointerRoot + 2 Parent + 2 CARD16 sequence number + 4 0 reply length + 4 WINDOW focus + 0 None + 1 PointerRoot + 20 unused + +<emphasis role='bold'>QueryKeymap</emphasis> + 1 44 opcode + 1 unused + 2 1 request length + +-> + 1 1 Reply + 1 unused + 2 CARD16 sequence number + 4 2 reply length + 32 LISTofCARD8 keys + +<emphasis role='bold'>OpenFont</emphasis> + 1 45 opcode + 1 unused + 2 3+(n+p)/4 request length + 4 FONT fid + 2 n length of name + 2 unused + n STRING8 name + p unused, p=pad(n) + +<emphasis role='bold'>CloseFont</emphasis> + 1 46 opcode + 1 unused + 2 2 request length + 4 FONT font + +<emphasis role='bold'>QueryFont</emphasis> + 1 47 opcode + 1 unused + 2 2 request length + 4 FONTABLE font + +-> + 1 1 Reply + 1 unused + 2 CARD16 sequence number + 4 7+2n+3m reply length + 12 CHARINFO min-bounds + 4 unused + 12 CHARINFO max-bounds + 4 unused + 2 CARD16 min-char-or-byte2 + 2 CARD16 max-char-or-byte2 + 2 CARD16 default-char + 2 n number of FONTPROPs in properties + 1 draw-direction + 0 LeftToRight + 1 RightToLeft + 1 CARD8 min-byte1 + 1 CARD8 max-byte1 + 1 BOOL all-chars-exist + 2 INT16 font-ascent + 2 INT16 font-descent + 4 m number of CHARINFOs in char-infos + 8n LISTofFONTPROP properties + 12m LISTofCHARINFO char-infos + + FONTPROP + 4 ATOM name + 4 <32-bits> value + + CHARINFO + 2 INT16 left-side-bearing + 2 INT16 right-side-bearing + 2 INT16 character-width + 2 INT16 ascent + 2 INT16 descent + 2 CARD16 attributes + +<emphasis role='bold'>QueryTextExtents</emphasis> + 1 48 opcode + 1 BOOL odd length, True if p = 2 + 2 2+(2n+p)/4 request length + 4 FONTABLE font + 2n STRING16 string + p unused, p=pad(2n) + +-> + 1 1 Reply + 1 draw-direction + 0 LeftToRight + 1 RightToLeft + 2 CARD16 sequence number + 4 0 reply length + 2 INT16 font-ascent + 2 INT16 font-descent + 2 INT16 overall-ascent + 2 INT16 overall-descent + 4 INT32 overall-width + 4 INT32 overall-left + 4 INT32 overall-right + 4 unused + +<emphasis role='bold'>ListFonts</emphasis> + 1 49 opcode + 1 unused + 2 2+(n+p)/4 request length + 2 CARD16 max-names + 2 n length of pattern + n STRING8 pattern + p unused, p=pad(n) + +-> + 1 1 Reply + 1 unused + 2 CARD16 sequence number + 4 (n+p)/4 reply length + 2 CARD16 number of STRs in names + 22 unused + n LISTofSTR names + p unused, p=pad(n) + +<emphasis role='bold'>ListFontsWithInfo</emphasis> + 1 50 opcode + 1 unused + 2 2+(n+p)/4 request length + 2 CARD16 max-names + 2 n length of pattern + n STRING8 pattern + p unused, p=pad(n) + +-> (except for last in series) + 1 1 Reply + 1 n length of name in bytes + 2 CARD16 sequence number + 4 7+2m+(n+p)/4 reply length + 12 CHARINFO min-bounds + 4 unused + 12 CHARINFO max-bounds + 4 unused + 2 CARD16 min-char-or-byte2 + 2 CARD16 max-char-or-byte2 + 2 CARD16 default-char + 2 m number of FONTPROPs in properties + 1 draw-direction + 0 LeftToRight + 1 RightToLeft + 1 CARD8 min-byte1 + 1 CARD8 max-byte1 + 1 BOOL all-chars-exist + 2 INT16 font-ascent + 2 INT16 font-descent + 4 CARD32 replies-hint + 8m LISTofFONTPROP properties + n STRING8 name + p unused, p=pad(n) + + FONTPROP + encodings are the same as for QueryFont + + CHARINFO + encodings are the same as for QueryFont + +-> (last in series) + 1 1 Reply + 1 0 last-reply indicator + 2 CARD16 sequence number + 4 7 reply length + 52 unused + +<emphasis role='bold'>SetFontPath</emphasis> + 1 51 opcode + 1 unused + 2 2+(n+p)/4 request length + 2 CARD16 number of STRs in path + 2 unused + n LISTofSTR path + p unused, p=pad(n) + +<emphasis role='bold'>GetFontPath</emphasis> + 1 52 opcode + 1 unused + 2 1 request list + +-> + 1 1 Reply + 1 unused + 2 CARD16 sequence number + 4 (n+p)/4 reply length + 2 CARD16 number of STRs in path + 22 unused + n LISTofSTR path + p unused, p=pad(n) + +<emphasis role='bold'>CreatePixmap</emphasis> + 1 53 opcode + 1 CARD8 depth + 2 4 request length + 4 PIXMAP pid + 4 DRAWABLE drawable + 2 CARD16 width + 2 CARD16 height + +<emphasis role='bold'>FreePixmap</emphasis> + 1 54 opcode + 1 unused + 2 2 request length + 4 PIXMAP pixmap + +<emphasis role='bold'>CreateGC</emphasis> + 1 55 opcode + 1 unused + 2 4+n request length + 4 GCONTEXT cid + 4 DRAWABLE drawable + 4 BITMASK value-mask (has n bits set to 1) + #x00000001 function + #x00000002 plane-mask + #x00000004 foreground + #x00000008 background + #x00000010 line-width + #x00000020 line-style + #x00000040 cap-style + #x00000080 join-style + #x00000100 fill-style + #x00000200 fill-rule + #x00000400 tile + #x00000800 stipple + #x00001000 tile-stipple-x-origin + #x00002000 tile-stipple-y-origin + #x00004000 font + #x00008000 subwindow-mode + #x00010000 graphics-exposures + #x00020000 clip-x-origin + #x00040000 clip-y-origin + #x00080000 clip-mask + #x00100000 dash-offset + #x00200000 dashes + #x00400000 arc-mode + 4n LISTofVALUE value-list + + VALUEs + 1 function + 0 Clear + 1 And + 2 AndReverse + 3 Copy + 4 AndInverted + 5 NoOp + 6 Xor + 7 Or + 8 Nor + 9 Equiv + 10 Invert + 11 OrReverse + 12 CopyInverted + 13 OrInverted + 14 Nand + 15 Set + 4 CARD32 plane-mask + 4 CARD32 foreground + 4 CARD32 background + 2 CARD16 line-width + 1 line-style + 0 Solid + 1 OnOffDash + 2 DoubleDash + 1 cap-style + 0 NotLast + 1 Butt + 2 Round + 3 Projecting + 1 join-style + 0 Miter + 1 Round + 2 Bevel + 1 fill-style + 0 Solid + 1 Tiled + 2 Stippled + 3 OpaqueStippled + 1 fill-rule + 0 EvenOdd + 1 Winding + 4 PIXMAP tile + 4 PIXMAP stipple + 2 INT16 tile-stipple-x-origin + 2 INT16 tile-stipple-y-origin + 4 FONT font + 1 subwindow-mode + 0 ClipByChildren + 1 IncludeInferiors + 1 BOOL graphics-exposures + 2 INT16 clip-x-origin + 2 INT16 clip-y-origin + 4 PIXMAP clip-mask + 0 None + 2 CARD16 dash-offset + 1 CARD8 dashes + 1 arc-mode + 0 Chord + 1 PieSlice + +<emphasis role='bold'>ChangeGC</emphasis> + 1 56 opcode + 1 unused + 2 3+n request length + 4 GCONTEXT gc + 4 BITMASK value-mask (has n bits set to 1) + encodings are the same as for CreateGC + 4n LISTofVALUE value-list + encodings are the same as for CreateGC + +<emphasis role='bold'>CopyGC</emphasis> + 1 57 opcode + 1 unused + 2 4 request length + 4 GCONTEXT src-gc + 4 GCONTEXT dst-gc + 4 BITMASK value-mask + encodings are the same as for CreateGC + +<emphasis role='bold'>SetDashes</emphasis> + 1 58 opcode + 1 unused + 2 3+(n+p)/4 request length + 4 GCONTEXT gc + 2 CARD16 dash-offset + 2 n length of dashes + n LISTofCARD8 dashes + p unused, p=pad(n) + +<emphasis role='bold'>SetClipRectangles</emphasis> + 1 59 opcode + 1 ordering + 0 UnSorted + 1 YSorted + 2 YXSorted + 3 YXBanded + 2 3+2n request length + 4 GCONTEXT gc + 2 INT16 clip-x-origin + 2 INT16 clip-y-origin + 8n LISTofRECTANGLE rectangles + +<emphasis role='bold'>FreeGC</emphasis> + 1 60 opcode + 1 unused + 2 2 request length + 4 GCONTEXT gc + +<emphasis role='bold'>ClearArea</emphasis> + 1 61 opcode + 1 BOOL exposures + 2 4 request length + 4 WINDOW window + 2 INT16 x + 2 INT16 y + 2 CARD16 width + 2 CARD16 height + +<emphasis role='bold'>CopyArea</emphasis> + 1 62 opcode + 1 unused + 2 7 request length + 4 DRAWABLE src-drawable + 4 DRAWABLE dst-drawable + 4 GCONTEXT gc + 2 INT16 src-x + 2 INT16 src-y + 2 INT16 dst-x + 2 INT16 dst-y + 2 CARD16 width + 2 CARD16 height + +<emphasis role='bold'>CopyPlane</emphasis> + 1 63 opcode + 1 unused + 2 8 request length + 4 DRAWABLE src-drawable + 4 DRAWABLE dst-drawable + 4 GCONTEXT gc + 2 INT16 src-x + 2 INT16 src-y + 2 INT16 dst-x + 2 INT16 dst-y + 2 CARD16 width + 2 CARD16 height + 4 CARD32 bit-plane + +<emphasis role='bold'>PolyPoint</emphasis> + 1 64 opcode + 1 coordinate-mode + 0 Origin + 1 Previous + 2 3+n request length + 4 DRAWABLE drawable + 4 GCONTEXT gc + 4n LISTofPOINT points + +<emphasis role='bold'>PolyLine</emphasis> + 1 65 opcode + 1 coordinate-mode + 0 Origin + 1 Previous + 2 3+n request length + 4 DRAWABLE drawable + 4 GCONTEXT gc + 4n LISTofPOINT points + +<emphasis role='bold'>PolySegment</emphasis> + 1 66 opcode + 1 unused + 2 3+2n request length + 4 DRAWABLE drawable + 4 GCONTEXT gc + 8n LISTofSEGMENT segments + + SEGMENT + 2 INT16 x1 + 2 INT16 y1 + 2 INT16 x2 + 2 INT16 y2 + +<emphasis role='bold'>PolyRectangle</emphasis> + 1 67 opcode + 1 unused + 2 3+2n request length + 4 DRAWABLE drawable + 4 GCONTEXT gc + 8n LISTofRECTANGLE rectangles + +<emphasis role='bold'>PolyArc</emphasis> + 1 68 opcode + 1 unused + 2 3+3n request length + 4 DRAWABLE drawable + 4 GCONTEXT gc + 12n LISTofARC arcs + +<emphasis role='bold'>FillPoly</emphasis> + 1 69 opcode + 1 unused + 2 4+n request length + 4 DRAWABLE drawable + 4 GCONTEXT gc + 1 shape + 0 Complex + 1 Nonconvex + 2 Convex + 1 coordinate-mode + 0 Origin + 1 Previous + 2 unused + 4n LISTofPOINT points + +<emphasis role='bold'>PolyFillRectangle</emphasis> + 1 70 opcode + 1 unused + 2 3+2n request length + 4 DRAWABLE drawable + 4 GCONTEXT gc + 8n LISTofRECTANGLE rectangles + +<emphasis role='bold'>PolyFillArc</emphasis> + 1 71 opcode + 1 unused + 2 3+3n request length + 4 DRAWABLE drawable + 4 GCONTEXT gc + 12n LISTofARC arcs + +<emphasis role='bold'>PutImage</emphasis> + 1 72 opcode + 1 format + 0 Bitmap + 1 XYPixmap + 2 ZPixmap + 2 6+(n+p)/4 request length + 4 DRAWABLE drawable + 4 GCONTEXT gc + 2 CARD16 width + 2 CARD16 height + 2 INT16 dst-x + 2 INT16 dst-y + 1 CARD8 left-pad + 1 CARD8 depth + 2 unused + n LISTofBYTE data + p unused, p=pad(n) + +<emphasis role='bold'>GetImage</emphasis> + 1 73 opcode + 1 format + 1 XYPixmap + 2 ZPixmap + 2 5 request length + 4 DRAWABLE drawable + 2 INT16 x + 2 INT16 y + 2 CARD16 width + 2 CARD16 height + 4 CARD32 plane-mask + +-> + 1 1 Reply + 1 CARD8 depth + 2 CARD16 sequence number + 4 (n+p)/4 reply length + 4 VISUALID visual + 0 None + 20 unused + n LISTofBYTE data + p unused, p=pad(n) + +<emphasis role='bold'>PolyText8</emphasis> + 1 74 opcode + 1 unused + 2 4+(n+p)/4 request length + 4 DRAWABLE drawable + 4 GCONTEXT gc + 2 INT16 x + 2 INT16 y + n LISTofTEXTITEM8 items + p unused, p=pad(n) (p is always 0 + or 1) + + TEXTITEM8 + 1 m length of string (cannot be 255) + 1 INT8 delta + m STRING8 string + or + 1 255 font-shift indicator + 1 font byte 3 (most-significant) + 1 font byte 2 + 1 font byte 1 + 1 font byte 0 (least-significant) + +<emphasis role='bold'>PolyText16</emphasis> + 1 75 opcode + 1 unused + 2 4+(n+p)/4 request length + 4 DRAWABLE drawable + 4 GCONTEXT gc + 2 INT16 x + 2 INT16 y + n LISTofTEXTITEM16 items + p unused, p=pad(n) (p must be 0 or + 1) + + TEXTITEM16 + 1 m number of CHAR2Bs in string + (cannot be 255) + 1 INT8 delta + 2m STRING16 string + or + 1 255 font-shift indicator + 1 font byte 3 (most-significant) + 1 font byte 2 + 1 font byte 1 + 1 font byte 0 (least-significant) + +<emphasis role='bold'>ImageText8</emphasis> + 1 76 opcode + 1 n length of string + 2 4+(n+p)/4 request length + 4 DRAWABLE drawable + 4 GCONTEXT gc + 2 INT16 x + 2 INT16 y + n STRING8 string + p unused, p=pad(n) + +<emphasis role='bold'>ImageText16</emphasis> + 1 77 opcode + 1 n number of CHAR2Bs in string + 2 4+(2n+p)/4 request length + 4 DRAWABLE drawable + 4 GCONTEXT gc + 2 INT16 x + 2 INT16 y + 2n STRING16 string + p unused, p=pad(2n) + +<emphasis role='bold'>CreateColormap</emphasis> + 1 78 opcode + 1 alloc + 0 None + 1 All + 2 4 request length + 4 COLORMAP mid + 4 WINDOW window + 4 VISUALID visual + +<emphasis role='bold'>FreeColormap</emphasis> + 1 79 opcode + 1 unused + 2 2 request length + 4 COLORMAP cmap + +<emphasis role='bold'>CopyColormapAndFree</emphasis> + 1 80 opcode + 1 unused + 2 3 request length + 4 COLORMAP mid + 4 COLORMAP src-cmap + +<emphasis role='bold'>InstallColormap</emphasis> + 1 81 opcode + 1 unused + 2 2 request length + 4 COLORMAP cmap + +<emphasis role='bold'>UninstallColormap</emphasis> + 1 82 opcode + 1 unused + 2 2 request length + 4 COLORMAP cmap + +<emphasis role='bold'>ListInstalledColormaps</emphasis> + 1 83 opcode + 1 unused + 2 2 request length + 4 WINDOW window + +-> + 1 1 Reply + 1 unused + 2 CARD16 sequence number + 4 n reply length + 2 n number of COLORMAPs in cmaps + 22 unused + 4n LISTofCOLORMAP cmaps + +<emphasis role='bold'>AllocColor</emphasis> + 1 84 opcode + 1 unused + 2 4 request length + 4 COLORMAP cmap + 2 CARD16 red + 2 CARD16 green + 2 CARD16 blue + 2 unused + +-> + 1 1 Reply + 1 unused + 2 CARD16 sequence number + 4 0 reply length + 2 CARD16 red + 2 CARD16 green + 2 CARD16 blue + 2 unused + 4 CARD32 pixel + 12 unused + +<emphasis role='bold'>AllocNamedColor</emphasis> + 1 85 opcode + 1 unused + 2 3+(n+p)/4 request length + 4 COLORMAP cmap + 2 n length of name + 2 unused + n STRING8 name + p unused, p=pad(n) + +-> + 1 1 Reply + 1 unused + 2 CARD16 sequence number + 4 0 reply length + 4 CARD32 pixel + 2 CARD16 exact-red + 2 CARD16 exact-green + 2 CARD16 exact-blue + 2 CARD16 visual-red + 2 CARD16 visual-green + 2 CARD16 visual-blue + 8 unused + +<emphasis role='bold'>AllocColorCells</emphasis> + 1 86 opcode + 1 BOOL contiguous + 2 3 request length + 4 COLORMAP cmap + 2 CARD16 colors + 2 CARD16 planes + +-> + 1 1 Reply + 1 unused + 2 CARD16 sequence number + 4 n+m reply length + 2 n number of CARD32s in pixels + 2 m number of CARD32s in masks + 20 unused + 4n LISTofCARD32 pixels + 4m LISTofCARD32 masks + +<emphasis role='bold'>AllocColorPlanes</emphasis> + 1 87 opcode + 1 BOOL contiguous + 2 4 request length + 4 COLORMAP cmap + 2 CARD16 colors + 2 CARD16 reds + 2 CARD16 greens + 2 CARD16 blues + +-> + 1 1 Reply + 1 unused + 2 CARD16 sequence number + 4 n reply length + 2 n number of CARD32s in pixels + 2 unused + 4 CARD32 red-mask + 4 CARD32 green-mask + 4 CARD32 blue-mask + 8 unused + 4n LISTofCARD32 pixels + +<emphasis role='bold'>FreeColors</emphasis> + 1 88 opcode + 1 unused + 2 3+n request length + 4 COLORMAP cmap + 4 CARD32 plane-mask + 4n LISTofCARD32 pixels + +<emphasis role='bold'>StoreColors</emphasis> + 1 89 opcode + 1 unused + 2 2+3n request length + 4 COLORMAP cmap + 12n LISTofCOLORITEM items + + COLORITEM + 4 CARD32 pixel + 2 CARD16 red + 2 CARD16 green + 2 CARD16 blue + 1 do-red, do-green, do-blue + #x01 do-red (1 is True, 0 is False) + #x02 do-green (1 is True, 0 is False) + #x04 do-blue (1 is True, 0 is False) + #xF8 unused + 1 unused + +<emphasis role='bold'>StoreNamedColor</emphasis> + 1 90 opcode + 1 do-red, do-green, do-blue + #x01 do-red (1 is True, 0 is False) + #x02 do-green (1 is True, 0 is False) + #x04 do-blue (1 is True, 0 is False) + #xF8 unused + 2 4+(n+p)/4 request length + 4 COLORMAP cmap + 4 CARD32 pixel + 2 n length of name + 2 unused + n STRING8 name + p unused, p=pad(n) + +<emphasis role='bold'>QueryColors</emphasis> + 1 91 opcode + 1 unused + 2 2+n request length + 4 COLORMAP cmap + 4n LISTofCARD32 pixels + +-> + 1 1 Reply + 1 unused + 2 CARD16 sequence number + 4 2n reply length + 2 n number of RGBs in colors + 22 unused + 8n LISTofRGB colors + + RGB + 2 CARD16 red + 2 CARD16 green + 2 CARD16 blue + 2 unused + +<emphasis role='bold'>LookupColor</emphasis> + 1 92 opcode + 1 unused + 2 3+(n+p)/4 request length + 4 COLORMAP cmap + 2 n length of name + 2 unused + n STRING8 name + p unused, p=pad(n) + +-> + 1 1 Reply + 1 unused + 2 CARD16 sequence number + 4 0 reply length + 2 CARD16 exact-red + 2 CARD16 exact-green + 2 CARD16 exact-blue + 2 CARD16 visual-red + 2 CARD16 visual-green + 2 CARD16 visual-blue + 12 unused + +<emphasis role='bold'>CreateCursor</emphasis> + 1 93 opcode + 1 unused + 2 8 request length + 4 CURSOR cid + 4 PIXMAP source + 4 PIXMAP mask + 0 None + 2 CARD16 fore-red + 2 CARD16 fore-green + 2 CARD16 fore-blue + 2 CARD16 back-red + 2 CARD16 back-green + 2 CARD16 back-blue + 2 CARD16 x + 2 CARD16 y + +<emphasis role='bold'>CreateGlyphCursor</emphasis> + 1 94 opcode + 1 unused + 2 8 request length + 4 CURSOR cid + 4 FONT source-font + 4 FONT mask-font + 0 None + 2 CARD16 source-char + 2 CARD16 mask-char + 2 CARD16 fore-red + 2 CARD16 fore-green + 2 CARD16 fore-blue + 2 CARD16 back-red + 2 CARD16 back-green + 2 CARD16 back-blue + +<emphasis role='bold'>FreeCursor</emphasis> + 1 95 opcode + 1 unused + 2 2 request length + 4 CURSOR cursor + +<emphasis role='bold'>RecolorCursor</emphasis> + 1 96 opcode + 1 unused + 2 5 request length + 4 CURSOR cursor + 2 CARD16 fore-red + 2 CARD16 fore-green + 2 CARD16 fore-blue + 2 CARD16 back-red + 2 CARD16 back-green + 2 CARD16 back-blue + +<emphasis role='bold'>QueryBestSize</emphasis> + 1 97 opcode + 1 class + 0 Cursor + 1 Tile + 2 Stipple + 2 3 request length + 4 DRAWABLE drawable + 2 CARD16 width + 2 CARD16 height + +-> + 1 1 Reply + 1 unused + 2 CARD16 sequence number + 4 0 reply length + 2 CARD16 width + 2 CARD16 height + 20 unused + +<emphasis role='bold'>QueryExtension</emphasis> + 1 98 opcode + 1 unused + 2 2+(n+p)/4 request length + 2 n length of name + 2 unused + n STRING8 name + p unused, p=pad(n) + +-> + 1 1 Reply + 1 unused + 2 CARD16 sequence number + 4 0 reply length + 1 BOOL present + 1 CARD8 major-opcode + 1 CARD8 first-event + 1 CARD8 first-error + 20 unused + +<emphasis role='bold'>ListExtensions</emphasis> + 1 99 opcode + 1 unused + 2 1 request length + +-> + 1 1 Reply + 1 CARD8 number of STRs in names + 2 CARD16 sequence number + 4 (n+p)/4 reply length + 24 unused + n LISTofSTR names + p unused, p=pad(n) + +<emphasis role='bold'>ChangeKeyboardMapping</emphasis> + 1 100 opcode + 1 n keycode-count + 2 2+nm request length + 1 KEYCODE first-keycode + 1 m keysyms-per-keycode + 2 unused + 4nm LISTofKEYSYM keysyms + +<emphasis role='bold'>GetKeyboardMapping</emphasis> + 1 101 opcode + 1 unused + 2 2 request length + 1 KEYCODE first-keycode + 1 m count + 2 unused + +-> + 1 1 Reply + 1 n keysyms-per-keycode + 2 CARD16 sequence number + 4 nm reply length (m = count field + from the request) + 24 unused + 4nm LISTofKEYSYM keysyms + +<emphasis role='bold'>ChangeKeyboardControl</emphasis> + 1 102 opcode + 1 unused + 2 2+n request length + 4 BITMASK value-mask (has n bits set to 1) + #x0001 key-click-percent + #x0002 bell-percent + #x0004 bell-pitch + #x0008 bell-duration + #x0010 led + #x0020 led-mode + #x0040 key + #x0080 auto-repeat-mode + 4n LISTofVALUE value-list + + VALUEs + 1 INT8 key-click-percent + 1 INT8 bell-percent + 2 INT16 bell-pitch + 2 INT16 bell-duration + 1 CARD8 led + 1 led-mode + 0 Off + 1 On + 1 KEYCODE key + 1 auto-repeat-mode + 0 Off + 1 On + 2 Default + +<emphasis role='bold'>GetKeyboardControl</emphasis> + 1 103 opcode + 1 unused + 2 1 request length + +-> + 1 1 Reply + 1 global-auto-repeat + 0 Off + 1 On + 2 CARD16 sequence number + 4 5 reply length + 4 CARD32 led-mask + 1 CARD8 key-click-percent + 1 CARD8 bell-percent + 2 CARD16 bell-pitch + 2 CARD16 bell-duration + 2 unused + 32 LISTofCARD8 auto-repeats + +<emphasis role='bold'>Bell</emphasis> + 1 104 opcode + 1 INT8 percent + 2 1 request length + +<emphasis role='bold'>ChangePointerControl</emphasis> + 1 105 opcode + 1 unused + 2 3 request length + 2 INT16 acceleration-numerator + 2 INT16 acceleration-denominator + 2 INT16 threshold + 1 BOOL do-acceleration + 1 BOOL do-threshold + +<emphasis role='bold'>GetPointerControl</emphasis> + 1 106 opcode + 1 unused + 2 1 request length + +-> + 1 1 Reply + 1 unused + 2 CARD16 sequence number + 4 0 reply length + 2 CARD16 acceleration-numerator + 2 CARD16 acceleration-denominator + 2 CARD16 threshold + 18 unused + +<emphasis role='bold'>SetScreenSaver</emphasis> + 1 107 opcode + 1 unused + 2 3 request length + 2 INT16 timeout + 2 INT16 interval + 1 prefer-blanking + 0 No + 1 Yes + 2 Default + 1 allow-exposures + 0 No + 1 Yes + 2 Default + 2 unused + +<emphasis role='bold'>GetScreenSaver</emphasis> + 1 108 opcode + 1 unused + 2 1 request length + +-> + 1 1 Reply + 1 unused + 2 CARD16 sequence number + 4 0 reply length + 2 CARD16 timeout + 2 CARD16 interval + 1 prefer-blanking + 0 No + 1 Yes + 1 allow-exposures + 0 No + 1 Yes + 18 unused + +<emphasis role='bold'>ChangeHosts</emphasis> + 1 109 opcode + 1 mode + 0 Insert + 1 Delete + 2 2+(n+p)/4 request length + 1 family + 0 Internet + 1 DECnet + 2 Chaos + 1 unused + 2 n length of address + n LISTofCARD8 address + p unused, p=pad(n) + +<emphasis role='bold'>ListHosts</emphasis> + 1 110 opcode + 1 unused + 2 1 request length + +-> + 1 1 Reply + 1 mode + 0 Disabled + 1 Enabled + 2 CARD16 sequence number + 4 n/4 reply length + 2 CARD16 number of HOSTs in hosts + 22 unused + n LISTofHOST hosts (n always a multiple of 4) + +<emphasis role='bold'>SetAccessControl</emphasis> + 1 111 opcode + 1 mode + 0 Disable + 1 Enable + 2 1 request length + +<emphasis role='bold'>SetCloseDownMode</emphasis> + 1 112 opcode + 1 mode + 0 Destroy + 1 RetainPermanent + 2 RetainTemporary + 2 1 request length + +<emphasis role='bold'>KillClient</emphasis> + 1 113 opcode + 1 unused + 2 2 request length + 4 CARD32 resource + 0 AllTemporary + +<emphasis role='bold'>RotateProperties</emphasis> + 1 114 opcode + 1 unused + 2 3+n request length + 4 WINDOW window + 2 n number of properties + 2 INT16 delta + 4n LISTofATOM properties + +<emphasis role='bold'>ForceScreenSaver</emphasis> + 1 115 opcode + 1 mode + 0 Reset + 1 Activate + 2 1 request length + +<emphasis role='bold'>SetPointerMapping</emphasis> + 1 116 opcode + 1 n length of map + 2 1+(n+p)/4 request length + n LISTofCARD8 map + p unused, p=pad(n) + +-> + 1 1 Reply + 1 status + 0 Success + 1 Busy + 2 CARD16 sequence number + 4 0 reply length + 24 unused + +<emphasis role='bold'>GetPointerMapping</emphasis> + 1 117 opcode + 1 unused + 2 1 request length + +-> + 1 1 Reply + 1 n length of map + 2 CARD16 sequence number + 4 (n+p)/4 reply length + 24 unused + n LISTofCARD8 map + p unused, p=pad(n) + +<emphasis role='bold'>SetModifierMapping</emphasis> + 1 118 opcode + 1 n keycodes-per-modifier + 2 1+2n request length + 8n LISTofKEYCODE keycodes + +-> + 1 1 Reply + 1 status + 0 Success + 1 Busy + 2 Failed + 2 CARD16 sequence number + 4 0 reply length + 24 unused + +<emphasis role='bold'>GetModifierMapping</emphasis> + 1 119 opcode + 1 unused + 2 1 request length + +-> + 1 1 Reply + 1 n keycodes-per-modifier + 2 CARD16 sequence number + 4 2n reply length + 24 unused + 8n LISTofKEYCODE keycodes + +<emphasis role='bold'>NoOperation</emphasis> + 1 127 opcode + 1 unused + 2 1+n request length + 4n unused +</literallayout> +</sect1> + +<sect1 id="events_2"> +<title>Events</title> + +<literallayout class="monospaced"> +<emphasis role='bold'>KeyPress</emphasis> + 1 2 code + 1 KEYCODE detail + 2 CARD16 sequence number + 4 TIMESTAMP time + 4 WINDOW root + 4 WINDOW event + 4 WINDOW child + 0 None + 2 INT16 root-x + 2 INT16 root-y + 2 INT16 event-x + 2 INT16 event-y + 2 SETofKEYBUTMASK state + 1 BOOL same-screen + 1 unused + +<emphasis role='bold'>KeyRelease</emphasis> + 1 3 code + 1 KEYCODE detail + 2 CARD16 sequence number + 4 TIMESTAMP time + 4 WINDOW root + 4 WINDOW event + 4 WINDOW child + 0 None + 2 INT16 root-x + 2 INT16 root-y + 2 INT16 event-x + 2 INT16 event-y + 2 SETofKEYBUTMASK state + 1 BOOL same-screen + 1 unused + +<emphasis role='bold'>ButtonPress</emphasis> + 1 4 code + 1 BUTTON detail + 2 CARD16 sequence number + 4 TIMESTAMP time + 4 WINDOW root + 4 WINDOW event + 4 WINDOW child + 0 None + 2 INT16 root-x + 2 INT16 root-y + 2 INT16 event-x + 2 INT16 event-y + 2 SETofKEYBUTMASK state + 1 BOOL same-screen + 1 unused + +<emphasis role='bold'>ButtonRelease</emphasis> + 1 5 code + 1 BUTTON detail + 2 CARD16 sequence number + 4 TIMESTAMP time + 4 WINDOW root + 4 WINDOW event + 4 WINDOW child + 0 None + 2 INT16 root-x + 2 INT16 root-y + 2 INT16 event-x + 2 INT16 event-y + 2 SETofKEYBUTMASK state + 1 BOOL same-screen + 1 unused + +<emphasis role='bold'>MotionNotify</emphasis> + 1 6 code + 1 detail + 0 Normal + 1 Hint + 2 CARD16 sequence number + 4 TIMESTAMP time + 4 WINDOW root + 4 WINDOW event + 4 WINDOW child + 0 None + 2 INT16 root-x + 2 INT16 root-y + 2 INT16 event-x + 2 INT16 event-y + 2 SETofKEYBUTMASK state + 1 BOOL same-screen + 1 unused + +<emphasis role='bold'>EnterNotify</emphasis> + 1 7 code + 1 detail + 0 Ancestor + 1 Virtual + 2 Inferior + 3 Nonlinear + 4 NonlinearVirtual + 2 CARD16 sequence number + 4 TIMESTAMP time + 4 WINDOW root + 4 WINDOW event + 4 WINDOW child + 0 None + 2 INT16 root-x + 2 INT16 root-y + 2 INT16 event-x + 2 INT16 event-y + 2 SETofKEYBUTMASK state + 1 mode + 0 Normal + 1 Grab + 2 Ungrab + 1 same-screen, focus + #x01 focus (1 is True, 0 is False) + #x02 same-screen (1 is True, 0 is False) + #xFC unused + +<emphasis role='bold'>LeaveNotify</emphasis> + 1 8 code + 1 detail + 0 Ancestor + 1 Virtual + 2 Inferior + 3 Nonlinear + 4 NonlinearVirtual + 2 CARD16 sequence number + 4 TIMESTAMP time + 4 WINDOW root + 4 WINDOW event + 4 WINDOW child + 0 None + 2 INT16 root-x + 2 INT16 root-y + 2 INT16 event-x + 2 INT16 event-y + 2 SETofKEYBUTMASK state + 1 mode + 0 Normal + 1 Grab + 2 Ungrab + 1 same-screen, focus + #x01 focus (1 is True, 0 is False) + #x02 same-screen (1 is True, 0 is False) + #xFC unused + +<emphasis role='bold'>FocusIn</emphasis> + 1 9 code + 1 detail + 0 Ancestor + 1 Virtual + 2 Inferior + 3 Nonlinear + 4 NonlinearVirtual + 5 Pointer + 6 PointerRoot + 7 None + 2 CARD16 sequence number + 4 WINDOW event + 1 mode + 0 Normal + 1 Grab + 2 Ungrab + 3 WhileGrabbed + 23 unused + +<emphasis role='bold'>FocusOut</emphasis> + 1 10 code + 1 detail + 0 Ancestor + 1 Virtual + 2 Inferior + 3 Nonlinear + 4 NonlinearVirtual + 5 Pointer + 6 PointerRoot + 7 None + 2 CARD16 sequence number + 4 WINDOW event + 1 mode + 0 Normal + 1 Grab + 2 Ungrab + 3 WhileGrabbed + 23 unused + +<emphasis role='bold'>KeymapNotify</emphasis> + 1 11 code + 31 LISTofCARD8 keys (byte for keycodes 0-7 is + omitted) + +<emphasis role='bold'>Expose</emphasis> + 1 12 code + 1 unused + 2 CARD16 sequence number + 4 WINDOW window + 2 CARD16 x + 2 CARD16 y + 2 CARD16 width + 2 CARD16 height + 2 CARD16 count + 14 unused + +<emphasis role='bold'>GraphicsExposure</emphasis> + 1 13 code + 1 unused + 2 CARD16 sequence number + 4 DRAWABLE drawable + 2 CARD16 x + 2 CARD16 y + 2 CARD16 width + 2 CARD16 height + 2 CARD16 minor-opcode + 2 CARD16 count + 1 CARD8 major-opcode + 11 unused + +<emphasis role='bold'>NoExposure</emphasis> + 1 14 code + 1 unused + 2 CARD16 sequence number + 4 DRAWABLE drawable + 2 CARD16 minor-opcode + 1 CARD8 major-opcode + 21 unused + +<emphasis role='bold'>VisibilityNotify</emphasis> + 1 15 code + 1 unused + 2 CARD16 sequence number + 4 WINDOW window + 1 state + 0 Unobscured + 1 PartiallyObscured + 2 FullyObscured + 23 unused + +<emphasis role='bold'>CreateNotify</emphasis> + 1 16 code + 1 unused + 2 CARD16 sequence number + 4 WINDOW parent + 4 WINDOW window + 2 INT16 x + 2 INT16 y + 2 CARD16 width + 2 CARD16 height + 2 CARD16 border-width + 1 BOOL override-redirect + 9 unused + +<emphasis role='bold'>DestroyNotify</emphasis> + 1 17 code + 1 unused + 2 CARD16 sequence number + 4 WINDOW event + 4 WINDOW window + 20 unused + +<emphasis role='bold'>UnmapNotify</emphasis> + 1 18 code + 1 unused + 2 CARD16 sequence number + 4 WINDOW event + 4 WINDOW window + 1 BOOL from-configure + 19 unused + +<emphasis role='bold'>MapNotify</emphasis> + 1 19 code + 1 unused + 2 CARD16 sequence number + 4 WINDOW event + 4 WINDOW window + 1 BOOL override-redirect + 19 unused + +<emphasis role='bold'>MapRequest</emphasis> + 1 20 code + 1 unused + 2 CARD16 sequence number + 4 WINDOW parent + 4 WINDOW window + 20 unused + +<emphasis role='bold'>ReparentNotify</emphasis> + 1 21 code + 1 unused + 2 CARD16 sequence number + 4 WINDOW event + 4 WINDOW window + 4 WINDOW parent + 2 INT16 x + 2 INT16 y + 1 BOOL override-redirect + 11 unused + +<emphasis role='bold'>ConfigureNotify</emphasis> + 1 22 code + 1 unused + 2 CARD16 sequence number + 4 WINDOW event + 4 WINDOW window + 4 WINDOW above-sibling + 0 None + 2 INT16 x + 2 INT16 y + 2 CARD16 width + 2 CARD16 height + 2 CARD16 border-width + 1 BOOL override-redirect + 5 unused + +<emphasis role='bold'>ConfigureRequest</emphasis> + 1 23 code + 1 stack-mode + 0 Above + 1 Below + 2 TopIf + 3 BottomIf + 4 Opposite + 2 CARD16 sequence number + 4 WINDOW parent + 4 WINDOW window + 4 WINDOW sibling + 0 None + 2 INT16 x + 2 INT16 y + 2 CARD16 width + 2 CARD16 height + 2 CARD16 border-width + 2 BITMASK value-mask + #x0001 x + #x0002 y + #x0004 width + #x0008 height + #x0010 border-width + #x0020 sibling + #x0040 stack-mode + 4 unused + +<emphasis role='bold'>GravityNotify</emphasis> + 1 24 code + 1 unused + 2 CARD16 sequence number + 4 WINDOW event + 4 WINDOW window + 2 INT16 x + 2 INT16 y + 16 unused + +<emphasis role='bold'>ResizeRequest</emphasis> + 1 25 code + 1 unused + 2 CARD16 sequence number + 4 WINDOW window + 2 CARD16 width + 2 CARD16 height + 20 unused + +<emphasis role='bold'>CirculateNotify</emphasis> + 1 26 code + 1 unused + 2 CARD16 sequence number + 4 WINDOW event + 4 WINDOW window + 4 WINDOW unused + 1 place + 0 Top + 1 Bottom + 15 unused + +<emphasis role='bold'>CirculateRequest</emphasis> + 1 27 code + 1 unused + 2 CARD16 sequence number + 4 WINDOW parent + 4 WINDOW window + 4 unused + 1 place + 0 Top + 1 Bottom + 15 unused + +<emphasis role='bold'>PropertyNotify</emphasis> + 1 28 code + 1 unused + 2 CARD16 sequence number + 4 WINDOW window + 4 ATOM atom + 4 TIMESTAMP time + 1 state + 0 NewValue + 1 Deleted + 15 unused + +<emphasis role='bold'>SelectionClear</emphasis> + 1 29 code + 1 unused + 2 CARD16 sequence number + 4 TIMESTAMP time + 4 WINDOW owner + 4 ATOM selection + 16 unused + +<emphasis role='bold'>SelectionRequest</emphasis> + 1 30 code + 1 unused + 2 CARD16 sequence number + 4 TIMESTAMP time + 0 CurrentTime + 4 WINDOW owner + 4 WINDOW requestor + 4 ATOM selection + 4 ATOM target + 4 ATOM property + 0 None + 4 unused + +<emphasis role='bold'>SelectionNotify</emphasis> + 1 31 code + 1 unused + 2 CARD16 sequence number + 4 TIMESTAMP time + 0 CurrentTime + 4 WINDOW requestor + 4 ATOM selection + 4 ATOM target + 4 ATOM property + 0 None + 8 unused + +<emphasis role='bold'>ColormapNotify</emphasis> + 1 32 code + 1 unused + 2 CARD16 sequence number + 4 WINDOW window + 4 COLORMAP colormap + 0 None + 1 BOOL new + 1 state + 0 Uninstalled + 1 Installed + 18 unused + +<emphasis role='bold'>ClientMessage</emphasis> + 1 33 code + 1 CARD8 format + 2 CARD16 sequence number + 4 WINDOW window + 4 ATOM type + 20 data + +<emphasis role='bold'>MappingNotify</emphasis> + 1 34 code + 1 unused + 2 CARD16 sequence number + 1 request + 0 Modifier + 1 Keyboard + 2 Pointer + 1 KEYCODE first-keycode + 1 CARD8 count + 25 unused +</literallayout> + +</sect1> +</appendix> diff --git a/specs/glossary.xml b/specs/glossary.xml new file mode 100644 index 0000000..fca24b3 --- /dev/null +++ b/specs/glossary.xml @@ -0,0 +1,1313 @@ +<glossary id='glossary'> +<title>Glossary</title> + + +<glossentry> + <glossterm><function>Access control list</function></glossterm> + <glossdef> +<!-- .IN "Access control list" "" "@DEF@" --> + <para> +X maintains a list of hosts from which client programs can be run. +By default, +only programs on the local host and hosts specified in an initial list read +by the server can use the display. +Clients on the local host can change this access control list. +Some server implementations can also implement other authorization mechanisms +in addition to or in place of this mechanism. +The action of this mechanism can be conditional based on the authorization +protocol name and data received by the server at connection setup. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Active grab</function></glossterm> + <glossdef> +<!-- .IN "Active grab" "" "@DEF@" --> + <para> +A grab is active when the pointer or keyboard is actually owned by +the single grabbing client. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Ancestors</function></glossterm> + <glossdef> +<!-- .IN "Ancestors" "" "@DEF@" --> + <para> +If W is an inferior of A, then A is an ancestor of W. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Atom</function></glossterm> + <glossdef> +<!-- .IN "Atom" "" "@DEF@" --> + <para> +An atom is a unique ID corresponding to a string name. +Atoms are used to identify properties, types, and selections. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Background</function></glossterm> + <glossdef> +<!-- .IN "Background" "" "@DEF@" --> + <para> +An +<emphasis role='bold'>InputOutput </emphasis> +window can have a background, which is defined as a pixmap. +When regions of the window have their contents lost or invalidated, +the server will automatically tile those regions with the background. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Backing store</function></glossterm> + <glossdef> +<!-- .IN "Backing store" "" "@DEF@" --> + <para> +When a server maintains the contents of a window, +the pixels saved off screen are known as a backing store. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Bit gravity</function></glossterm> + <glossdef> +<!-- .IN "Bit" "gravity" "@DEF@" --> + <para> +When a window is resized, +the contents of the window are not necessarily discarded. +It is possible to request that the server relocate the previous contents +to some region of the window (though no guarantees are made). +This attraction of window contents for some location of +a window is known as bit gravity. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Bit plane</function></glossterm> + <glossdef> +<!-- .IN "Bit" "plane" "@DEF@" --> + <para> +When a pixmap or window is thought of as a stack of bitmaps, +each bitmap is called a bit plane or plane. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Bitmap</function></glossterm> + <glossdef> +<!-- .IN "Bitmap" "" "@DEF@" --> + <para> +A bitmap is a pixmap of depth one. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Border</function></glossterm> + <glossdef> +<!-- .IN "Border" "" "@DEF@" --> + <para> +An +<emphasis role='bold'>InputOutput </emphasis> +window can have a border of equal thickness on all four sides of the window. +A pixmap defines the contents of the border, +and the server automatically maintains the contents of the border. +Exposure events are never generated for border regions. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Button grabbing</function></glossterm> + <glossdef> +<!-- .IN "Button" "grabbing" "@DEF@" --> + <para> +Buttons on the pointer may be passively grabbed by a client. +When the button is pressed, +the pointer is then actively grabbed by the client. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Byte order</function></glossterm> + <glossdef> +<!-- .IN "Byte order" "" "@DEF@" --> + <para> +For image (pixmap/bitmap) data, +the server defines the byte order, +and clients with different native byte ordering must swap bytes as necessary. +For all other parts of the protocol, +the client defines the byte order, +and the server swaps bytes as necessary. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Children</function></glossterm> + <glossdef> +<!-- .IN "Children" "" "@DEF@" --> + <para> +The children of a window are its first-level subwindows. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Client</function></glossterm> + <glossdef> +<!-- .IN "Client" "" "@DEF@" --> + <para> +An application program connects to the window system server by some +interprocess communication path, such as a TCP connection or a +shared memory buffer. +This program is referred to as a client of the window system server. +More precisely, +the client is the communication path itself; +a program with multiple paths open to the server is viewed as +multiple clients by the protocol. +Resource lifetimes are controlled by connection lifetimes, +not by program lifetimes. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Clipping region</function></glossterm> + <glossdef> +<!-- .IN "Clipping region" "" "@DEF@" --> + <para> +In a graphics context, +a bitmap or list of rectangles can be specified +to restrict output to a particular region of the window. +The image defined by the bitmap or rectangles is called a clipping region. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Colormap</function></glossterm> + <glossdef> +<!-- .IN "Colormap" "" "@DEF@" --> + <para> +A colormap consists of a set of entries defining color values. +The colormap associated with a window is used to display the contents of +the window; each pixel value indexes the colormap to produce RGB values +that drive the guns of a monitor. +Depending on hardware limitations, +one or more colormaps may be installed at one time, +so that windows associated with those maps display with correct colors. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Connection</function></glossterm> + <glossdef> +<!-- .IN "Connection" "" "@DEF@" --> + <para> +The interprocess communication path between the server and client +program is known as a connection. +A client program typically (but not necessarily) has one +connection to the server over which requests and events are sent. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Containment</function></glossterm> + <glossdef> +<!-- .IN "Containment" "" "@DEF@" --> + <para> +A window ``contains'' the pointer if the window is viewable and the +hotspot of the cursor is within a visible region of the window or a +visible region of one of its inferiors. +The border of the window is included as part of the window for containment. +The pointer is ``in'' a window if the window contains the pointer +but no inferior contains the pointer. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Coordinate system</function></glossterm> + <glossdef> +<!-- .IN "Coordinate system" "" "@DEF@" --> + <para> +The coordinate system has the X axis horizontal and the Y axis vertical, +with the origin [0, 0] at the upper left. +Coordinates are integral, +in terms of pixels, +and coincide with pixel centers. +Each window and pixmap has its own coordinate system. +For a window, +the origin is inside the border at the inside upper left. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Cursor</function></glossterm> + <glossdef> +<!-- .IN "Cursor" "" "@DEF@" --> + <para> +A cursor is the visible shape of the pointer on a screen. +It consists of a hot spot, a source bitmap, a shape bitmap, +and a pair of colors. +The cursor defined for a window controls the visible appearance +when the pointer is in that window. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Depth</function></glossterm> + <glossdef> +<!-- .IN "Depth" "" "@DEF@" --> + <para> +The depth of a window or pixmap is the number of bits per pixel that it has. +The depth of a graphics context is the depth of the drawables it can be +used in conjunction with for graphics output. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Device</function></glossterm> + <glossdef> +<!-- .IN "Device" "" "@DEF@" --> + <para> +Keyboards, mice, tablets, track-balls, button boxes, and so on are all +collectively known as input devices. +The core protocol only deals with two devices, +``the keyboard'' and ``the pointer.'' +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>DirectColor</function></glossterm> + <glossdef> +<!-- .IN "DirectColor" "" "@DEF@" --> + <para> +<emphasis role='bold'>DirectColor</emphasis> +is a class of colormap in which a pixel value is decomposed into three +separate subfields for indexing. +The first subfield indexes an array to produce red intensity values. +The second subfield indexes a second array to produce blue intensity values. +The third subfield indexes a third array to produce green intensity values. +The RGB values can be changed dynamically. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Display</function></glossterm> + <glossdef> +<!-- .IN "Display" "" "@DEF@" --> + <para> +A server, together with its screens and input devices, is called a display. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Drawable</function></glossterm> + <glossdef> +<!-- .IN "Drawable" "" "@DEF@" --> + <para> +Both windows and pixmaps can be used as sources and destinations in +graphics operations. +These windows and pixmaps are collectively known as drawables. +However, an +<emphasis role='bold'>InputOnly </emphasis> +window cannot be used as a source or destination in a graphics operation. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Event</function></glossterm> + <glossdef> +<!-- .IN "Event" "" "@DEF@" --> + <para> +Clients are informed of information asynchronously by means of events. +These events can be generated either asynchronously from devices +or as side effects of client requests. +Events are grouped into types. +The server never sends events to a client unless the +client has specificially asked to be informed of that type of event. +However, other clients can force events to be sent to other clients. +Events are typically reported relative to a window. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Event mask</function></glossterm> + <glossdef> +<!-- .IN "Event" "mask" "@DEF@" --> + <para> +Events are requested relative to a window. +The set of event types that a client requests relative to a window +is described by using an event mask. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Event synchronization</function></glossterm> + <glossdef> +<!-- .IN "Event" "synchronization" "@DEF@" --> + <para> +There are certain race conditions possible when demultiplexing device +events to clients (in particular deciding where pointer and keyboard +events should be sent when in the middle of window management +operations). +The event synchronization mechanism allows synchronous processing +of device events. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Event propagation</function></glossterm> + <glossdef> +<!-- .IN "Event" "propagation" "@DEF@" --> + <para> +Device-related events propagate from the source window to ancestor +windows until some client has expressed interest in handling that type +of event or until the event is discarded explicitly. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Event source</function></glossterm> + <glossdef> +<!-- .IN "Event" "source" "@DEF@" --> + <para> +The window the pointer is in is the source of a device-related +event. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Exposure event</function></glossterm> + <glossdef> +<!-- .IN "Event" "Exposure" "@DEF@" --> + <para> +Servers do not guarantee to preserve the contents of windows when +windows are obscured or reconfigured. +Exposure events are sent to clients to inform them when contents +of regions of windows have been lost. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Extension</function></glossterm> + <glossdef> +<!-- .IN "Extension" "" "@DEF@" --> + <para> +Named extensions to the core protocol can be defined to extend the +system. +Extension to output requests, resources, and event types are +all possible and are expected. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Focus window</function></glossterm> + <glossdef> +<!-- .IN "Focus window" "" ""@DEF@" --> + <para> +The focus window is another term for the input focus. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Font</function></glossterm> + <glossdef> +<!-- .IN "Font" "" "@DEF@" --> + <para> +A font is a matrix of glyphs (typically characters). +The protocol does no translation or interpretation of character sets. +The client simply indicates values used to index the glyph array. +A font contains additional metric information to determine interglyph +and interline spacing. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>GC</function>, <function>GContext</function></glossterm> + <glossdef> +<!-- .IN "GC" "" "@DEF@" --> +<!-- .IN "GContext" "" "@DEF@" --> + <para> +GC and gcontext are abbreviations for graphics context. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Glyph</function></glossterm> + <glossdef> +<!-- .IN "Glyph" "" "@DEF@" --> + <para> +A glyph is an image, typically of a character, in a font. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Grab</function></glossterm> + <glossdef> +<!-- .IN "Grab" "" "@DEF@" --> + <para> +Keyboard keys, the keyboard, pointer buttons, the pointer, and the +server can be grabbed for exclusive use by a client. +In general, +these facilities are not intended to be used by normal applications +but are intended for various input and window managers to implement +various styles of user interfaces. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Graphics context</function></glossterm> + <glossdef> +<!-- .IN "Graphics context" "" "@DEF@" --> + <para> +Various information for graphics output is stored in a graphics context +such as foreground pixel, background pixel, line width, clipping region, +and so on. +A graphics context can only be used with drawables that have the same root +and the same depth as the graphics context. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Gravity</function></glossterm> + <glossdef> +<!-- .IN "Gravity" "" "@DEF@" --> + <para> +See <function>bit gravity</function> and <function>window gravity</function>. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>GrayScale</function></glossterm> + <glossdef> +<!-- .IN "GrayScale" "" "@DEF@" --> + <para> +<emphasis role='bold'>GrayScale </emphasis> +can be viewed as a degenerate case of +<emphasis role='bold'>PseudoColor , </emphasis> +in which the red, green, and blue values in any given colormap entry are equal, +thus producing shades of gray. +The gray values can be changed dynamically. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Hotspot</function></glossterm> + <glossdef> +<!-- .IN "Hotspot" "" "@DEF@" --> + <para> +A cursor has an associated hotspot that defines the point in the +cursor corresponding to the coordinates reported for the pointer. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Identifier</function></glossterm> + <glossdef> +<!-- .IN "Identifier" "" "@DEF@" --> + <para> +An identifier is a unique value associated with a resource that clients use +to name that resource. +The identifier can be used over any connection. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Inferiors</function></glossterm> + <glossdef> +<!-- .IN "Inferiors" "" "@DEF@" --> + <para> +The inferiors of a window are all of the subwindows nested below it: +the children, the children's children, and so on. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Input focus</function></glossterm> + <glossdef> +<!-- .IN "Input focus" "" "@DEF@" --> + <para> +The input focus is normally a window defining the scope for +processing of keyboard input. +If a generated keyboard event would normally be reported to this window +or one of its inferiors, +the event is reported normally. +Otherwise, the event is reported with respect to +the focus window. +The input focus also can be set such that all +keyboard events are discarded and such that the focus +window is dynamically taken to be the root window of whatever screen +the pointer is on at each keyboard event. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Input manager</function></glossterm> + <glossdef> +<!-- .IN "Input manager" "" "@DEF@" --> + <para> +Control over keyboard input is typically provided by an input manager client. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>InputOnly window</function></glossterm> + <glossdef> +<!-- .IN "Window" "InputOnly" "@DEF@" --> + <para> +An +<emphasis role='bold'>InputOnly</emphasis> +window is a window that cannot be used for graphics requests. +<emphasis role='bold'>InputOnly </emphasis> +windows are invisible and can be used to control such things +as cursors, input event generation, and grabbing. +<emphasis role='bold'>InputOnly </emphasis> +windows cannot have +<emphasis role='bold'>InputOutput </emphasis> +windows as inferiors. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>InputOutput window</function></glossterm> + <glossdef> +<!-- .IN "Window" "InputOutput" "@DEF@" --> + <para> +An +<emphasis role='bold'>InputOutput</emphasis> +window is the normal kind of opaque window, used for both input and output. +<emphasis role='bold'>InputOutput </emphasis> +windows can have both +<emphasis role='bold'>InputOutput </emphasis> +and +<emphasis role='bold'>InputOnly </emphasis> +windows as inferiors. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Key grabbing</function></glossterm> + <glossdef> +<!-- .IN "Key" "grabbing" "@DEF@" --> + <para> +Keys on the keyboard can be passively grabbed by a client. +When the key is pressed, +the keyboard is then actively grabbed by the client. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Keyboard grabbing</function></glossterm> + <glossdef> +<!-- .IN "Keyboard" "grabbing" "@DEF@" --> + <para> +A client can actively grab control of the keyboard, and key events +will be sent to that client rather than the client the events would +normally have been sent to. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Keysym</function></glossterm> + <glossdef> +<!-- .IN "Keysym" "" "@DEF@" --> + <para> +An encoding of a symbol on a keycap on a keyboard. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Mapped</function></glossterm> + <glossdef> +<!-- .IN "Mapped window" "" "@DEF@" --> + <para> +A window is said to be mapped if a map call has been performed on it. +Unmapped windows and their inferiors are never viewable or visible. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Modifier keys</function></glossterm> + <glossdef> +<!-- .IN "Modifier keys" "" "@DEF@" --> + <para> +Shift, Control, Meta, Super, Hyper, Alt, Compose, Apple, CapsLock, +ShiftLock, and similar keys are called modifier keys. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Monochrome</function></glossterm> + <glossdef> +<!-- .IN "Monochrome" "" "@DEF@" --> + <para> +Monochrome is a special case of +<emphasis role='bold'>StaticGray </emphasis> +in which there are only two colormap entries. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Obscure</function></glossterm> + <glossdef> +<!-- .IN "Obscure" "" "@DEF@" --> + <para> +A window is obscured if some other window obscures it. +Window A obscures window B if both are viewable +<emphasis role='bold'>InputOutput </emphasis> +windows, A is higher in the global stacking order, +and the rectangle defined by the outside edges of A intersects +the rectangle defined by the outside edges of B. +Note the distinction between obscure and occludes. +Also note that window borders are included in the calculation +and that a window can be obscured and yet still have visible regions. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Occlude</function></glossterm> + <glossdef> +<!-- .IN "Occlude" "" "@DEF@" --> + <para> +A window is occluded if some other window occludes it. +Window A occludes window B if both are mapped, A is higher in the global +stacking order, and the rectangle defined by the outside edges of A +intersects the rectangle defined by the outside edges of B. +Note the distinction between occludes and obscures. +Also note that window borders are included in the calculation. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Padding</function></glossterm> + <glossdef> +<!-- .IN "Padding" "" "@DEF@" --> + <para> +Some padding bytes are inserted in the data stream to maintain +alignment of the protocol requests on natural boundaries. +This increases ease of portability to some machine architectures. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Parent window</function></glossterm> + <glossdef> +<!-- .IN "Window" "parent" "@DEF@" --> + <para> +If C is a child of P, then P is the parent of C. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Passive grab</function></glossterm> + <glossdef> +<!-- .IN "Passive grab" "" "@DEF@" --> + <para> +Grabbing a key or button is a passive grab. +The grab activates when the key or button is actually pressed. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Pixel value</function></glossterm> + <glossdef> +<!-- .IN "Pixel value" "" "@DEF@" --> + <para> +A pixel is an N-bit value, where N is the number of bit planes used +in a particular window or pixmap (that is, +N is the depth of the window or pixmap). +For a window, +a pixel value indexes a colormap to derive an actual color to be displayed. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Pixmap</function></glossterm> + <glossdef> +<!-- .IN "Pixmap" "" "@DEF@" --> + <para> +A pixmap is a three-dimensional array of bits. +A pixmap is normally thought of as a two-dimensional array of pixels, +where each pixel can be a value from 0 to (2^N)-1 +and where N is the depth (z axis) of the pixmap. +A pixmap can also be thought of as a stack of N bitmaps. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Plane</function></glossterm> + <glossdef> +<!-- .IN "Plane" "" "@DEF@" --> + <para> +When a pixmap or window is thought of as a stack of bitmaps, +each bitmap is called a plane or bit plane. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Plane mask</function></glossterm> + <glossdef> +<!-- .IN "Plane" "mask" "@DEF@" --> + <para> +Graphics operations can be restricted to only affect a subset of bit +planes of a destination. +A plane mask is a bit mask describing which planes are to be modified. +The plane mask is stored in a graphics context. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Pointer</function></glossterm> + <glossdef> +<!-- .IN "Pointer" "" "@DEF@" --> + <para> +The pointer is the pointing device attached to the cursor +and tracked on the screens. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Pointer grabbing</function></glossterm> + <glossdef> +<!-- .IN "Pointer" "grabbing" "@DEF@" --> + <para> +A client can actively grab control of the pointer. +Then button and motion events will be sent to that client +rather than the client the events would normally have been sent to. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Pointing device</function></glossterm> + <glossdef> +<!-- .IN "Pointing device" "" "@DEF@" --> + <para> +A pointing device is typically a mouse, tablet, or some other +device with effective dimensional motion. +There is only one visible cursor defined by the core protocol, +and it tracks whatever pointing device is attached as the pointer. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Property</function></glossterm> + <glossdef> +<!-- .IN "Property" "" "@DEF@" --> + <para> +Windows may have associated properties, +which consist of a name, a type, a data format, and some data. +The protocol places no interpretation on properties. +They are intended as a general-purpose naming mechanism for clients. +For example, clients might use properties to share information such as resize +hints, program names, and icon formats with a window manager. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Property list</function></glossterm> + <glossdef> +<!-- .IN "Property list" "" "@DEF@" --> + <para> +The property list of a window is the list of properties that have +been defined for the window. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>PseudoColor</function></glossterm> + <glossdef> +<!-- .IN "PseudoColor" "" "@DEF@" --> + <para> +<emphasis role='bold'>PseudoColor</emphasis> +is a class of colormap in which a pixel value indexes the colormap to +produce independent red, green, and blue values; +that is, the colormap is viewed as an array of triples (RGB values). +The RGB values can be changed dynamically. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Redirecting control</function></glossterm> + <glossdef> +<!-- .IN "Redirecting control" "" "@DEF@" --> + <para> +Window managers (or client programs) may want to enforce window layout +policy in various ways. +When a client attempts to change the size or position of a window, +the operation may be redirected to a specified client +rather than the operation actually being performed. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Reply</function></glossterm> + <glossdef> +<!-- .IN "Reply" "" "@DEF@" --> + <para> +Information requested by a client program is sent back to the client +with a reply. +Both events and replies are multiplexed on the same connection. +Most requests do not generate replies, +although some requests generate multiple replies. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Request</function></glossterm> + <glossdef> +<!-- .IN "Request" "" "@DEF@" --> + <para> +A command to the server is called a request. +It is a single block of data sent over a connection. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Resource</function></glossterm> + <glossdef> +<!-- .IN "Resource" "" "@DEF@" --> + <para> +Windows, pixmaps, cursors, fonts, graphics contexts, and colormaps are +known as resources. +They all have unique identifiers associated with them for naming purposes. +The lifetime of a resource usually is bounded by the lifetime of the connection +over which the resource was created. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>RGB values</function></glossterm> + <glossdef> +<!-- .IN "RGB values" "" "@DEF@" --> + <para> +Red, green, and blue (RGB) intensity values are used to define color. +These values are always represented as 16-bit unsigned numbers, +with 0 being the minimum intensity and 65535 being the maximum intensity. +The server scales the values to match the display hardware. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Root</function></glossterm> + <glossdef> +<!-- .IN "Root" "" "@DEF@" --> + <para> +The root of a pixmap, colormap, or graphics context is the same as the root of +whatever drawable was used when the pixmap, colormap, or graphics context was +created. +The root of a window is the root window under which the window was created. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Root window</function></glossterm> + <glossdef> +<!-- .IN "Window" "root" "@DEF@" --> + <para> +Each screen has a root window covering it. +It cannot be reconfigured or unmapped, +but it otherwise acts as a full-fledged window. +A root window has no parent. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Save set</function></glossterm> + <glossdef> +<!-- .IN "Save set" "" "@DEF@" --> + <para> +The save set of a client is a list of other clients' windows that, +if they are inferiors of one of the client's windows at connection close, +should not be destroyed and that should be remapped if currently unmapped. +Save sets are typically used by window managers to avoid +lost windows if the manager terminates abnormally. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Scanline</function></glossterm> + <glossdef> +<!-- .IN "Scanline" "" "@DEF@" --> + <para> +A scanline is a list of pixel or bit values viewed as a horizontal +row (all values having the same y coordinate) of an image, with the +values ordered by increasing x coordinate. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Scanline order</function></glossterm> + <glossdef> +<!-- .IN "Scanline order" "" "@DEF@" --> + <para> +An image represented in scanline order contains scanlines ordered by +increasing y coordinate. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Screen</function></glossterm> + <glossdef> +<!-- .IN "Screen" "" "@DEF@" --> + <para> +A server can provide several independent screens, +which typically have physically independent monitors. +This would be the expected configuration when there is only a single keyboard +and pointer shared among the screens. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Selection</function></glossterm> + <glossdef> +<!-- .IN "Selection" "" "@DEF@" --> + <para> +A selection can be thought of as an indirect property with dynamic +type; that is, rather than having the property stored in the server, +it is maintained by some client (the ``owner''). +A selection is global in nature and is thought of as belonging to the user +(although maintained by clients), rather than as being private to a particular +window subhierarchy or a particular set of clients. +When a client asks for the contents of a selection, +it specifies a selection ``target type''. +This target type can be used to control the transmitted representation of the +contents. +For example, +if the selection is ``the last thing the user clicked on'' +and that is currently an image, then the target type might specify +whether the contents of the image should be sent in XY format or Z format. +The target type can also be used to control the class of contents transmitted; +for example, asking for the ``looks'' (fonts, line +spacing, indentation, and so on) of a paragraph selection rather than the +text of the paragraph. +The target type can also be used for other purposes. +The protocol does not constrain the semantics. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Server</function></glossterm> + <glossdef> +<!-- .IN "Server" "" "@DEF@" --> + <para> +The server provides the basic windowing mechanism. +It handles connections from clients, +multiplexes graphics requests onto the screens, +and demultiplexes input back to the appropriate clients. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Server grabbing</function></glossterm> + <glossdef> +<!-- .IN "Server" "grabbing" "@DEF@" --> + <para> +The server can be grabbed by a single client for exclusive use. +This prevents processing of any requests from other client connections until +the grab is completed. +This is typically only a transient state for +such things as rubber-banding, pop-up menus, or to execute requests +indivisibly. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Sibling</function></glossterm> + <glossdef> +<!-- .IN "Sibling" "" "@DEF@" --> + <para> +Children of the same parent window are known as sibling windows. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Stacking order</function></glossterm> + <glossdef> +<!-- .IN "Stacking order" "" "@DEF@" --> + <para> +Sibling windows may stack on top of each other. +Windows above other windows both obscure and occlude those lower windows. +This is similar to paper on a desk. +The relationship between sibling windows is known as the stacking order. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>StaticColor</function></glossterm> + <glossdef> +<!-- .IN "StaticColor" "" "@DEF@" --> + <para> +<emphasis role='bold'>StaticColor </emphasis> +can be viewed as a degenerate case of +<emphasis role='bold'>PseudoColor</emphasis> +in which the RGB values are predefined and read-only. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>StaticGray</function></glossterm> + <glossdef> +<!-- .IN "StaticGray" "" "@DEF@" --> + <para> +<emphasis role='bold'>StaticGray </emphasis> +can be viewed as a degenerate case of +<emphasis role='bold'>GrayScale</emphasis> +in which the gray values are predefined and read-only. +The values are typically linear or near-linear increasing ramps. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Stipple</function></glossterm> + <glossdef> +<!-- .IN "Stipple" "" "@DEF@" --> + <para> +A stipple pattern is a bitmap that is used to tile a region that will serve +as an additional clip mask for a fill operation with the foreground +color. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>String Equivalence</function></glossterm> + <glossdef> +<!-- .IN "String Equivalence" "" "@DEF@" --> + <para> +Two ISO Latin-1 STRING8 values are considered equal if they are the same +length and if corresponding bytes are either equal or are equivalent as +follows: decimal values 65 to 90 inclusive (characters ``A'' to ``Z'') are +pairwise equivalent to decimal values 97 to 122 inclusive +(characters ``a'' to ``z''), decimal values 192 to 214 inclusive +(characters ``A grave'' to ``O diaeresis'') are pairwise equivalent to decimal +values 224 to 246 inclusive (characters ``a grave'' to ``o diaeresis''), +and decimal values 216 to 222 inclusive (characters ``O oblique'' to ``THORN'') +are pairwise equivalent to decimal values 246 to 254 inclusive +(characters ``o oblique'' to ``thorn''). +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Tile</function></glossterm> + <glossdef> +<!-- .IN "Tile" "" "@DEF@" --> + <para> +A pixmap can be replicated in two dimensions to tile a region. +The pixmap itself is also known as a tile. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Timestamp</function></glossterm> + <glossdef> +<!-- .IN "Timestamp" "" "@DEF@" --> + <para> +A timestamp is a time value, expressed in milliseconds. +It typically is the time since the last +server reset. +Timestamp values wrap around (after about 49.7 days). +The server, given its current time is represented by timestamp T, +always interprets timestamps from clients by treating half of the +timestamp space as being earlier in time than T and half of the +timestamp space as being later in time than T. +One timestamp value (named +<emphasis role='bold'>CurrentTime ) </emphasis> +is never generated by the server. +This value is reserved for use in requests to represent the current +server time. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>TrueColor</function></glossterm> + <glossdef> +<!-- .IN "TrueColor" "" "@DEF@" --> + <para> +<emphasis role='bold'>TrueColor</emphasis> +can be viewed as a degenerate case of +<emphasis role='bold'>DirectColor</emphasis> +in which the subfields in the pixel value directly encode +the corresponding RGB values; that is, the colormap has predefined +read-only RGB values. +The values are typically linear or near-linear increasing ramps. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Type</function></glossterm> + <glossdef> +<!-- .IN "Type" "" "@DEF@" --> + <para> +A type is an arbitrary atom used to identify the interpretation of +property data. +Types are completely uninterpreted by the server +and are solely for the benefit of clients. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Viewable</function></glossterm> + <glossdef> +<!-- .IN "Viewable" "" "@DEF@" --> + <para> +A window is viewable if it and all of its ancestors are mapped. +This does not imply that any portion of the window is actually visible. +Graphics requests can be performed on a window when it is not viewable, +but output will not be retained unless the server is maintaining +backing store. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Visible</function></glossterm> + <glossdef> +<!-- .IN "Visible" "" "@DEF@" --> + <para> +A region of a window is visible if someone looking at the screen can +actually see it; +that is, the window is viewable and the region is not occluded by any +other window. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Window gravity</function></glossterm> + <glossdef> +<!-- .IN "Window" "gravity" "@DEF@" --> + <para> +When windows are resized, +subwindows may be repositioned automatically relative to some position +in the window. +This attraction of a subwindow to some part of its parent is known +as window gravity. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>Window manager</function></glossterm> + <glossdef> +<!-- .IN "Window" "manager" "@DEF@" --> + <para> +Manipulation of windows on the screen and much of the user interface +(policy) is typically provided by a window manager client. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>XYFormat</function></glossterm> + <glossdef> +<!-- .IN "XYFormat" "" "@DEF@" --> + <para> +The data for a pixmap is said to be in XY format if it is organized as +a set of bitmaps representing individual bit planes, with the planes +appearing from most-significant to least-significant in bit order. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +<glossentry> + <glossterm><function>ZFormat</function></glossterm> + <glossdef> +<!-- .IN "ZFormat" "" "@DEF@" --> + <para> +The data for a pixmap is said to be in Z format if it is organized as +a set of pixel values in scanline order. +<!-- .KE --> + </para> + </glossdef> +</glossentry> +</glossary> diff --git a/specs/keysyms.xml b/specs/keysyms.xml new file mode 100644 index 0000000..66c9702 --- /dev/null +++ b/specs/keysyms.xml @@ -0,0 +1,6038 @@ +<appendix id="keysym_encoding"> +<title>KEYSYM Encoding</title> + +<para> +KEYSYM values are 32-bit integers that encode the symbols on the +keycaps of a keyboard. The three most significant bits are always +zero, which leaves a 29-bit number space. For convenience, KEYSYM +values can be viewed as split into four bytes: +</para> + +<itemizedlist> + <listitem> + <para> +Byte 1 is the most significant eight bits (three zero bits and +the most-significant five bits of the 29-bit effective value) + </para> + </listitem> + <listitem> + <para> +Byte 2 is the next most-significant eight bits + </para> + </listitem> + <listitem> + <para> +Byte 3 is the next most-significant eight bits + </para> + </listitem> + <listitem> + <para> +Byte 4 is the least-significant eight bits + </para> + </listitem> +</itemizedlist> + +<para> +There are six categories of KEYSYM values. +</para> + +<sect1 id="special_keysyms"> +<title>Special KEYSYMs</title> +<para> +There are two special values: +<emphasis role='bold'>NoSymbol </emphasis> +and +<emphasis role='bold'>VoidSymbol .</emphasis> +They are used to indicate the absence of symbols (see section 5). +</para> <!-- xref --> + +<informaltable frame="topbot"> + <tgroup cols='6' align='left'> + <colspec colname='c1' colsep="0"/> + <colspec colname='c2' colsep="0"/> + <colspec colname='c3' colsep="0"/> + <colspec colname='c4' colsep="0"/> + <colspec colname='c5' colsep="0"/> + <colspec colname='c6' colsep="0"/> + <thead> + <row rowsep="1"> + <entry>Byte 1</entry> + <entry>Byte 2</entry> + <entry>Byte 3</entry> + <entry>Byte 4</entry> + <entry>Hex. value</entry> + <entry>Name</entry> + </row> + </thead> + <tbody> + <row rowsep="0"> + <entry>0</entry> + <entry>0</entry> + <entry>0</entry> + <entry>0</entry> + <entry>#x00000000</entry> + <entry><emphasis role='bold'>NoSymbol</emphasis></entry> + </row> + <row rowsep="0"> + <entry>0</entry> + <entry>255</entry> + <entry>255</entry> + <entry>255</entry> + <entry>#x00FFFFFF</entry> + <entry><emphasis role='bold'>VoidSymbol</emphasis></entry> + </row> + </tbody> + </tgroup> +</informaltable> +</sect1> + +<sect1 id="latin_keysyms"> +<title>Latin-1 KEYSYMs</title> + +<para> +The Latin-1 KEYSYMs occupy the range #x0020 to #x007E and #x00A0 to +#00FF and represent the ISO 10646 / Unicode characters U+0020 to +U+007E and U+00A0 to U+00FF, respectively. +</para> +</sect1> + +<sect1 id="unicode_keysyms"> +<title>Unicode KEYSYMs</title> + +<para> +These occupy the range #x01000100 to #x0110FFFF and represent the ISO +10646 / Unicode characters U+0100 to U+10FFFF, respectively. The +numeric value of a Unicode KEYSYM is the Unicode position of the +corresponding character plus #x01000000. In the interest of backwards +compatibility, clients should be able to process both the Unicode +KEYSYM and the Legacy KEYSYM for those characters where both exist. +</para> +<para> +Dead keys, which place an accent on the next character entered, shall +be encoded as Function KEYSYMs, and not as the Unicode KEYSYM +corresponding to an equivalent combining character. Where a keycap +indicates a specific function with a graphical symbol that is also +available in Unicode (e.g., an upwards arrow for the cursor up +function), the appropriate Function KEYSYM should be used, and not +the Unicode KEYSYM corresponding to the depicted symbol. +</para> +</sect1> +<sect1 id="function_keysyms"> +<title>Function KEYSYMs</title> + +<para> +These represent keycap symbols that do not directly represent elements +of a coded character set. Instead, they typically identify a software +function, mode, or operation (e.g., cursor up, caps lock, insert) that +can be activated using a dedicated key. Function KEYSYMs have zero +values for bytes 1 and 2. Byte 3 distinguishes between several 8-bit +sets within which byte 4 identifies the individual function key. +</para> + +<informaltable frame="topbot"> + <tgroup cols='2' align='left'> + <colspec colname='c1' colsep="0"/> + <colspec colname='c2' colsep="0"/> + <thead> + <row rowsep="1"> + <entry>Byte 3</entry> + <entry>Byte 4</entry> + </row> + </thead> + <tbody> + <row rowsep="0"> + <entry>255</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>254</entry> + <entry>Keyboard (XKB) Extension</entry> + </row> + <row rowsep="0"> + <entry>253</entry> + <entry>3270</entry> + </row> + </tbody> + </tgroup> +</informaltable> + +<para> +Within a national market, keyboards tend to be comparatively standard +with respect to the character keys, but they can differ significantly +on the miscellaneous function keys. Some have function keys left over +from early timesharing days, others were designed for a specific +application, such as text processing, web browsing, or accessing +audiovisual data. The symbols on the keycaps can differ significantly +between manufacturers and national markets, even where they denote the +same software function (e.g., Ctrl in the U.S. versus Strg in Germany) +</para> +<para> +<!-- .LP --> +There are two ways of thinking about how to define KEYSYMs for such a +world: +</para> +<itemizedlist> + <listitem> + <para> +The Engraving approach + </para> + </listitem> + <listitem> + <para> +The Common approach + </para> + </listitem> +</itemizedlist> +<para> +<!-- .LP --> +The Engraving approach is to create a KEYSYM for every unique key +engraving. This is effectively taking the union of all key engravings +on all keyboards. For example, some keyboards label function keys +across the top as F1 through Fn, and others label them as PF1 through +PFn. These would be different keys under the Engraving +approach. Likewise, Lock would differ from Shift Lock, which is +different from the up-arrow symbol that has the effect of changing +lowercase to uppercase. There are lots of other aliases such as Del, +DEL, Delete, Remove, and so forth. The Engraving approach makes it +easy to decide if a new entry should be added to the KEYSYM set: if it +does not exactly match an existing one, then a new one is created. +</para> +<para> +<!-- .LP --> +The Common approach tries to capture all of the keys present on an +interesting number of keyboards, folding likely aliases into the same +KEYSYM. For example, Del, DEL, and Delete are all merged into a single +KEYSYM. Vendors can augment the KEYSYM set (using the vendor-specific +encoding space) to include all of their unique keys that were not +included in the standard set. Each vendor decides which of its keys +map into the standard KEYSYMs, which presumably can be overridden by a +user. It is more difficult to implement this approach, because +judgment is required about when a sufficient set of keyboards +implements an engraving to justify making it a KEYSYM in the standard +set and about which engravings should be merged into a single +KEYSYM. +</para> +<para> +<!-- .LP --> +Although neither scheme is perfect or elegant, the Common approach has +been selected because it makes it easier to write a portable +application. Having the Delete functionality merged into a single +KEYSYM allows an application to implement a deletion function and +expect reasonable bindings on a wide set of workstations. Under the +Common approach, application writers are still free to look for and +interpret vendor-specific KEYSYMs, but because they are in the +extended set, the application developer is more conscious that they +are writing the application in a nonportable fashion. +</para> +<para> +<!-- .LP --> +The Keyboard set is a miscellaneous collection of commonly occurring +keys on keyboards. Within this set, the numeric keypad symbols are +generally duplicates of symbols found on keys on the main part of the +keyboard, but they are distinguished here because they often have a +distinguishable semantics associated with them. +</para> + +<informaltable frame="topbot"> + <tgroup cols='3' align='left'> + <colspec colname='c1' colwidth='1*' colsep="0"/> + <colspec colname='c2' colwidth='3*' colsep="0"/> + <colspec colname='c3' colwidth='1*' colsep="0"/> + <thead> + <row rowsep="1"> + <entry>KEYSYM value</entry> + <entry>Name</entry> + <entry>Set</entry> + </row> + </thead> + <tbody> + <row rowsep="0"> + <entry>#xFF08</entry> + <entry>BACKSPACE, BACK SPACE, BACK CHAR</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF09</entry> + <entry>TAB</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF0A</entry> + <entry>LINEFEED, LF</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF0B</entry> + <entry>CLEAR</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF0D</entry> + <entry>RETURN, ENTER</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF13</entry> + <entry>PAUSE, HOLD</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF14</entry> + <entry>SCROLL LOCK</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF15</entry> + <entry>SYS REQ, SYSTEM REQUEST</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF1B</entry> + <entry>ESCAPE</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF20</entry> + <entry>MULTI-KEY CHARACTER PREFACE</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF21</entry> + <entry>KANJI, KANJI CONVERT</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF22</entry> + <entry>MUHENKAN</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF23</entry> + <entry>HENKAN MODE</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF24</entry> + <entry>ROMAJI</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF25</entry> + <entry>HIRAGANA</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF26</entry> + <entry>KATAKANA</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF27</entry> + <entry>HIRAGANA/KATAKANA TOGGLE</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF28</entry> + <entry>ZENKAKU</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF29</entry> + <entry>HANKAKU</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF2A</entry> + <entry>ZENKAKU/HANKAKU TOGGLE</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF2B</entry> + <entry>TOUROKU</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF2C</entry> + <entry>MASSYO</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF2D</entry> + <entry>KANA LOCK</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF2E</entry> + <entry>KANA SHIFT</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF2F</entry> + <entry>EISU SHIFT</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF30</entry> + <entry>EISU TOGGLE</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF31</entry> + <entry>HANGUL START/STOP (TOGGLE)</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF32</entry> + <entry>HANGUL START</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF33</entry> + <entry>HANGUL END, ENGLISH START</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF34</entry> + <entry>START HANGUL/HANJA CONVERSION</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF35</entry> + <entry>HANGUL JAMO MODE</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF36</entry> + <entry>HANGUL ROMAJA MODE</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF37</entry> + <entry>HANGUL CODE INPUT</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF38</entry> + <entry>HANGUL JEONJA MODE</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF39</entry> + <entry>HANGUL BANJA MODE</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF3A</entry> + <entry>HANGUL PREHANJA CONVERSION</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF3B</entry> + <entry>HANGUL POSTHANJA CONVERSION</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF3C</entry> + <entry>HANGUL SINGLE CANDIDATE</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF3D</entry> + <entry>HANGUL MULTIPLE CANDIDATE</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF3E</entry> + <entry>HANGUL PREVIOUS CANDIDATE</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF3F</entry> + <entry>HANGUL SPECIAL SYMBOLS</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF50</entry> + <entry>HOME</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF51</entry> + <entry>LEFT, MOVE LEFT, LEFT ARROW</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF52</entry> + <entry>UP, MOVE UP, UP ARROW</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF53</entry> + <entry>RIGHT, MOVE RIGHT, RIGHT ARROW</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF54</entry> + <entry>DOWN, MOVE DOWN, DOWN ARROW</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF55</entry> + <entry>PRIOR, PREVIOUS, PAGE UP</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF56</entry> + <entry>NEXT, PAGE DOWN</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF57</entry> + <entry>END, EOL</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF58</entry> + <entry>BEGIN, BOL</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF60</entry> + <entry>SELECT, MARK</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF61</entry> + <entry>PRINT</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF62</entry> + <entry>EXECUTE, RUN, DO</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF63</entry> + <entry>INSERT, INSERT HERE</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF65</entry> + <entry>UNDO, OOPS</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF66</entry> + <entry>REDO, AGAIN</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF67</entry> + <entry>MENU</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF68</entry> + <entry>FIND, SEARCH</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF69</entry> + <entry>CANCEL, STOP, ABORT, EXIT</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF6A</entry> + <entry>HELP</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF6B</entry> + <entry>BREAK</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF7E</entry> + <entry>MODE SWITCH, SCRIPT SWITCH, CHARACTER SET SWITCH</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF7F</entry> + <entry>NUM LOCK</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF80</entry> + <entry>KEYPAD SPACE</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF89</entry> + <entry>KEYPAD TAB</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF8D</entry> + <entry>KEYPAD ENTER</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF91</entry> + <entry>KEYPAD F1, PF1, A</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF92</entry> + <entry>KEYPAD F2, PF2, B</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF93</entry> + <entry>KEYPAD F3, PF3, C</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF94</entry> + <entry>KEYPAD F4, PF4, D</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF95</entry> + <entry>KEYPAD HOME</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF96</entry> + <entry>KEYPAD LEFT</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF97</entry> + <entry>KEYPAD UP</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF98</entry> + <entry>KEYPAD RIGHT</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF99</entry> + <entry>KEYPAD DOWN</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF9A</entry> + <entry>KEYPAD PRIOR, PAGE UP</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF9B</entry> + <entry>KEYPAD NEXT, PAGE DOWN</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF9C</entry> + <entry>KEYPAD END</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF9D</entry> + <entry>KEYPAD BEGIN</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF9E</entry> + <entry>KEYPAD INSERT</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFF9F</entry> + <entry>KEYPAD DELETE</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFAA</entry> + <entry>KEYPAD MULTIPLICATION SIGN, ASTERISK</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFAB</entry> + <entry>KEYPAD PLUS SIGN</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFAC</entry> + <entry>KEYPAD SEPARATOR, COMMA</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFAD</entry> + <entry>KEYPAD MINUS SIGN, HYPHEN</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFAE</entry> + <entry>KEYPAD DECIMAL POINT, FULL STOP</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFAF</entry> + <entry>KEYPAD DIVISION SIGN, SOLIDUS</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFB0</entry> + <entry>KEYPAD DIGIT ZERO</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFB1</entry> + <entry>KEYPAD DIGIT ONE</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFB2</entry> + <entry>KEYPAD DIGIT TWO</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFB3</entry> + <entry>KEYPAD DIGIT THREE</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFB4</entry> + <entry>KEYPAD DIGIT FOUR</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFB5</entry> + <entry>KEYPAD DIGIT FIVE</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFB6</entry> + <entry>KEYPAD DIGIT SIX</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFB7</entry> + <entry>KEYPAD DIGIT SEVEN</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFB8</entry> + <entry>KEYPAD DIGIT EIGHT</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFB9</entry> + <entry>KEYPAD DIGIT NINE</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFBD</entry> + <entry>KEYPAD EQUALS SIGN</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFBE</entry> + <entry>F1</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFBF</entry> + <entry>F2</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFC0</entry> + <entry>F3</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFC1</entry> + <entry>F4</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFC2</entry> + <entry>F5</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFC3</entry> + <entry>F6</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFC4</entry> + <entry>F7</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFC5</entry> + <entry>F8</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFC6</entry> + <entry>F9</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFC7</entry> + <entry>F10</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFC8</entry> + <entry>F11, L1</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFC9</entry> + <entry>F12, L2</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFCA</entry> + <entry>F13, L3</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFCB</entry> + <entry>F14, L4</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFCC</entry> + <entry>F15, L5</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFCD</entry> + <entry>F16, L6</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFCE</entry> + <entry>F17, L7</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFCF</entry> + <entry>F18, L8</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFD0</entry> + <entry>F19, L9</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFD1</entry> + <entry>F20, L10</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFD2</entry> + <entry>F21, R1</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFD3</entry> + <entry>F22, R2</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFD4</entry> + <entry>F23, R3</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFD5</entry> + <entry>F24, R4</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFD6</entry> + <entry>F25, R5</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFD7</entry> + <entry>F26, R6</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFD8</entry> + <entry>F27, R7</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFD9</entry> + <entry>F28, R8</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFDA</entry> + <entry>F29, R9</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFDB</entry> + <entry>F30, R10</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFDC</entry> + <entry>F31, R11</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFDD</entry> + <entry>F32, R12</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFDE</entry> + <entry>F33, R13</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFDF</entry> + <entry>F34, R14</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFE0</entry> + <entry>F35, R15</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFE1</entry> + <entry>LEFT SHIFT</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFE2</entry> + <entry>RIGHT SHIFT</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFE3</entry> + <entry>LEFT CONTROL</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFE4</entry> + <entry>RIGHT CONTROL</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFE5</entry> + <entry>CAPS LOCK</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFE6</entry> + <entry>SHIFT LOCK</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFE7</entry> + <entry>LEFT META</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFE8</entry> + <entry>RIGHT META</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFE9</entry> + <entry>LEFT ALT</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFEA</entry> + <entry>RIGHT ALT</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFEB</entry> + <entry>LEFT SUPER</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFEC</entry> + <entry>RIGHT SUPER</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFED</entry> + <entry>LEFT HYPER</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFEE</entry> + <entry>RIGHT HYPER</entry> + <entry>Keyboard</entry> + </row> + <row rowsep="0"> + <entry>#xFFFF</entry> + <entry>DELETE, RUBOUT</entry> + <entry>Keyboard</entry> + </row> + </tbody> + </tgroup> +</informaltable> + +<para> +The Keyboard (XKB) Extension set, which provides among other things +a range of dead keys, is defined in "The X Keyboard Extension: +Protocol Specification", Appendix C. <!-- xref --> +</para> + +<para> +The 3270 set defines additional keys that are specific to IBM 3270 +terminals. +</para> + +<informaltable frame="topbot"> + <tgroup cols='3' align='left'> + <colspec colname='c1' colwidth='1*' colsep="0"/> + <colspec colname='c2' colwidth='3*' colsep="0"/> + <colspec colname='c3' colwidth='1*' colsep="0"/> + <thead> + <row rowsep="1"> + <entry>KEYSYM value</entry> + <entry>Name</entry> + <entry>Set</entry> + </row> + </thead> + <tbody> + <row rowsep="0"> + <entry>#xFD01</entry> + <entry>3270 DUPLICATE</entry> + <entry>3270</entry> + </row> + <row rowsep="0"> + <entry>#xFD02</entry> + <entry>3270 FIELDMARK</entry> + <entry>3270</entry> + </row> + <row rowsep="0"> + <entry>#xFD03</entry> + <entry>3270 RIGHT2</entry> + <entry>3270</entry> + </row> + <row rowsep="0"> + <entry>#xFD04</entry> + <entry>3270 LEFT2</entry> + <entry>3270</entry> + </row> + <row rowsep="0"> + <entry>#xFD05</entry> + <entry>3270 BACKTAB</entry> + <entry>3270</entry> + </row> + <row rowsep="0"> + <entry>#xFD06</entry> + <entry>3270 ERASEEOF</entry> + <entry>3270</entry> + </row> + <row rowsep="0"> + <entry>#xFD07</entry> + <entry>3270 ERASEINPUT</entry> + <entry>3270</entry> + </row> + <row rowsep="0"> + <entry>#xFD08</entry> + <entry>3270 RESET</entry> + <entry>3270</entry> + </row> + <row rowsep="0"> + <entry>#xFD09</entry> + <entry>3270 QUIT</entry> + <entry>3270</entry> + </row> + <row rowsep="0"> + <entry>#xFD0A</entry> + <entry>3270 PA1</entry> + <entry>3270</entry> + </row> + <row rowsep="0"> + <entry>#xFD0B</entry> + <entry>3270 PA2</entry> + <entry>3270</entry> + </row> + <row rowsep="0"> + <entry>#xFD0C</entry> + <entry>3270 PA3</entry> + <entry>3270</entry> + </row> + <row rowsep="0"> + <entry>#xFD0D</entry> + <entry>3270 TEST</entry> + <entry>3270</entry> + </row> + <row rowsep="0"> + <entry>#xFD0E</entry> + <entry>3270 ATTN</entry> + <entry>3270</entry> + </row> + <row rowsep="0"> + <entry>#xFD0F</entry> + <entry>3270 CURSORBLINK</entry> + <entry>3270</entry> + </row> + <row rowsep="0"> + <entry>#xFD10</entry> + <entry>3270 ALTCURSOR</entry> + <entry>3270</entry> + </row> + <row rowsep="0"> + <entry>#xFD11</entry> + <entry>3270 KEYCLICK</entry> + <entry>3270</entry> + </row> + <row rowsep="0"> + <entry>#xFD12</entry> + <entry>3270 JUMP</entry> + <entry>3270</entry> + </row> + <row rowsep="0"> + <entry>#xFD13</entry> + <entry>3270 IDENT</entry> + <entry>3270</entry> + </row> + <row rowsep="0"> + <entry>#xFD14</entry> + <entry>3270 RULE</entry> + <entry>3270</entry> + </row> + <row rowsep="0"> + <entry>#xFD15</entry> + <entry>3270 COPY</entry> + <entry>3270</entry> + </row> + <row rowsep="0"> + <entry>#xFD16</entry> + <entry>3270 PLAY</entry> + <entry>3270</entry> + </row> + <row rowsep="0"> + <entry>#xFD17</entry> + <entry>3270 SETUP</entry> + <entry>3270</entry> + </row> + <row rowsep="0"> + <entry>#xFD18</entry> + <entry>3270 RECORD</entry> + <entry>3270</entry> + </row> + <row rowsep="0"> + <entry>#xFD19</entry> + <entry>3270 CHANGESCREEN</entry> + <entry>3270</entry> + </row> + <row rowsep="0"> + <entry>#xFD1A</entry> + <entry>3270 DELETEWORD</entry> + <entry>3270</entry> + </row> + <row rowsep="0"> + <entry>#xFD1B</entry> + <entry>3270 EXSELECT</entry> + <entry>3270</entry> + </row> + <row rowsep="0"> + <entry>#xFD1C</entry> + <entry>3270 CURSORSELECT</entry> + <entry>3270</entry> + </row> + <row rowsep="0"> + <entry>#xFD1D</entry> + <entry>3270 PRINTSCREEN</entry> + <entry>3270</entry> + </row> + <row rowsep="0"> + <entry>#xFD1E</entry> + <entry>3270 ENTER</entry> + <entry>3270</entry> + </row> + </tbody> + </tgroup> +</informaltable> + +</sect1> + +<sect1 id="vendor_keysyms"> +<title>Vendor KEYSYMs</title> + +<para> +The KEYSYM number range #x10000000 to #x1FFFFFFF is available for +vendor-specific extentions. Among these, the range #x11000000 to +#x1100FFFF is designated for keypad KEYSYMs. +</para> +</sect1> + +<sect1 id="legacy_keysyms"> +<title>Legacy KEYSYMs</title> + +<para> +These date from the time before ISO 10646 / Unicode was +available. They represent characters from a number of different older +8-bit coded character sets and have zero values for bytes 1 and +2. Byte 3 indicates a coded character set and byte 4 is the 8-bit +value of the particular character within that set. +</para> + +<informaltable frame="topbot"> + <tgroup cols='4' align='left'> + <colspec colname='c1' colwidth='1*' colsep="0"/> + <colspec colname='c2' colwidth='2*' colsep="0"/> + <colspec colname='c3' colwidth='1*' colsep="0"/> + <colspec colname='c4' colwidth='1*' colsep="0"/> + <thead> + <row rowsep="1"> + <entry>Byte 3</entry> + <entry>Byte 4</entry> + <entry>Byte 3</entry> + <entry>Byte 4</entry> + </row> + </thead> + <tbody> + <row rowsep="0"> + <entry>1</entry> + <entry>Latin-2</entry> + <entry>11</entry> + <entry>APL</entry> + </row> + <row rowsep="0"> + <entry>2</entry> + <entry>Latin-3</entry> + <entry>12</entry> + <entry>Hebrew</entry> + </row> + <row rowsep="0"> + <entry>3</entry> + <entry>Latin-4</entry> + <entry>13</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>4</entry> + <entry>Kana</entry> + <entry>14</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>5</entry> + <entry>Arabic</entry> + <entry>15</entry> + <entry>Latin-5</entry> + </row> + <row rowsep="0"> + <entry>6</entry> + <entry>Cyrillic</entry> + <entry>16</entry> + <entry>Latin-6</entry> + </row> + <row rowsep="0"> + <entry>7</entry> + <entry>Greek</entry> + <entry>17</entry> + <entry>Latin-7</entry> + </row> + <row rowsep="0"> + <entry>8</entry> + <entry>Technical</entry> + <entry>18</entry> + <entry>Latin-8</entry> + </row> + <row rowsep="0"> + <entry>9</entry> + <entry>Special</entry> + <entry>19</entry> + <entry>Latin-9</entry> + </row> + <row rowsep="0"> + <entry>10</entry> + <entry>Publishing</entry> + <entry>32</entry> + <entry>Currency</entry> + </row> + </tbody> + </tgroup> +</informaltable> + +<para> +Each character set contains gaps where codes have been removed that +were duplicates with codes in previous character sets (that is, +character sets with lesser byte 3 value). +</para> + +<para> +The Latin, Arabic, Cyrillic, Greek, Hebrew, and Thai sets were taken +from the early drafts of the relevant ISO 8859 parts available at the +time. However, in the case of the Cyrillic and Greek sets, these +turned out differently in the final versions of the ISO standard. The +Technical, Special, and Publishing sets are based on Digital Equipment +Corporation standards, as no equivalent international standards were +available at the time. +</para> + +<para> +The table below lists all standardized Legacy KEYSYMs, along with the +name used in the source document. Where there exists an unambiguous +equivalent in Unicode, as it is the case with all ISO 8859 characters, +it is given in the second column as a cross reference. Where there is +no Unicode number provided, the exact semantics of the KEYSYM may have +been lost and a Unicode KEYSYM should be used instead, if available. +</para> + +<para> +As support of Unicode KEYSYMs increases, some or all of the Legacy +KEYSYMs may be phased out and withdrawn in future versions of this +standard. Most KEYSYMs in the sets Technical, Special, Publishing, APL +and Currency (with the exception of #x20AC) were probably never used +in practice, and were not supported by pre-Unicode fonts. In +particular, the Currency set, which was copied from Unicode, has +already been deprecated by the introduction of the Unicode KEYSYMs. +</para> + +<informaltable frame="topbot"> + <tgroup cols='4' align='left'> + <colspec colname='c1' colwidth='1*' colsep="0"/> + <colspec colname='c2' colwidth='1*' colsep="0"/> + <colspec colname='c3' colwidth='5*' colsep="0"/> + <colspec colname='c4' colwidth='1*' colsep="0"/> + <thead> + <row rowsep="1"> + <entry>KEYSYM value</entry> + <entry>Unicode value</entry> + <entry>Name</entry> + <entry>Set</entry> + </row> + </thead> + <tbody> + <row rowsep="0"> + <entry>#x01A1</entry> + <entry>U+0104</entry> + <entry>LATIN CAPITAL LETTER A WITH OGONEK</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01A2</entry> + <entry>U+02D8</entry> + <entry>BREVE</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01A3</entry> + <entry>U+0141</entry> + <entry>LATIN CAPITAL LETTER L WITH STROKE</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01A5</entry> + <entry>U+013D</entry> + <entry>LATIN CAPITAL LETTER L WITH CARON</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01A6</entry> + <entry>U+015A</entry> + <entry>LATIN CAPITAL LETTER S WITH ACUTE</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01A9</entry> + <entry>U+0160</entry> + <entry>LATIN CAPITAL LETTER S WITH CARON</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01AA</entry> + <entry>U+015E</entry> + <entry>LATIN CAPITAL LETTER S WITH CEDILLA</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01AB</entry> + <entry>U+0164</entry> + <entry>LATIN CAPITAL LETTER T WITH CARON</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01AC</entry> + <entry>U+0179</entry> + <entry>LATIN CAPITAL LETTER Z WITH ACUTE</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01AE</entry> + <entry>U+017D</entry> + <entry>LATIN CAPITAL LETTER Z WITH CARON</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01AF</entry> + <entry>U+017B</entry> + <entry>LATIN CAPITAL LETTER Z WITH DOT ABOVE</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01B1</entry> + <entry>U+0105</entry> + <entry>LATIN SMALL LETTER A WITH OGONEK</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01B2</entry> + <entry>U+02DB</entry> + <entry>OGONEK</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01B3</entry> + <entry>U+0142</entry> + <entry>LATIN SMALL LETTER L WITH STROKE</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01B5</entry> + <entry>U+013E</entry> + <entry>LATIN SMALL LETTER L WITH CARON</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01B6</entry> + <entry>U+015B</entry> + <entry>LATIN SMALL LETTER S WITH ACUTE</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01B7</entry> + <entry>U+02C7</entry> + <entry>CARON</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01B9</entry> + <entry>U+0161</entry> + <entry>LATIN SMALL LETTER S WITH CARON</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01BA</entry> + <entry>U+015F</entry> + <entry>LATIN SMALL LETTER S WITH CEDILLA</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01BB</entry> + <entry>U+0165</entry> + <entry>LATIN SMALL LETTER T WITH CARON</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01BC</entry> + <entry>U+017A</entry> + <entry>LATIN SMALL LETTER Z WITH ACUTE</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01BD</entry> + <entry>U+02DD</entry> + <entry>DOUBLE ACUTE ACCENT</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01BE</entry> + <entry>U+017E</entry> + <entry>LATIN SMALL LETTER Z WITH CARON</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01BF</entry> + <entry>U+017C</entry> + <entry>LATIN SMALL LETTER Z WITH DOT ABOVE</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01C0</entry> + <entry>U+0154</entry> + <entry>LATIN CAPITAL LETTER R WITH ACUTE</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01C3</entry> + <entry>U+0102</entry> + <entry>LATIN CAPITAL LETTER A WITH BREVE</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01C5</entry> + <entry>U+0139</entry> + <entry>LATIN CAPITAL LETTER L WITH ACUTE</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01C6</entry> + <entry>U+0106</entry> + <entry>LATIN CAPITAL LETTER C WITH ACUTE</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01C8</entry> + <entry>U+010C</entry> + <entry>LATIN CAPITAL LETTER C WITH CARON</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01CA</entry> + <entry>U+0118</entry> + <entry>LATIN CAPITAL LETTER E WITH OGONEK</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01CC</entry> + <entry>U+011A</entry> + <entry>LATIN CAPITAL LETTER E WITH CARON</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01CF</entry> + <entry>U+010E</entry> + <entry>LATIN CAPITAL LETTER D WITH CARON</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01D0</entry> + <entry>U+0110</entry> + <entry>LATIN CAPITAL LETTER D WITH STROKE</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01D1</entry> + <entry>U+0143</entry> + <entry>LATIN CAPITAL LETTER N WITH ACUTE</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01D2</entry> + <entry>U+0147</entry> + <entry>LATIN CAPITAL LETTER N WITH CARON</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01D5</entry> + <entry>U+0150</entry> + <entry>LATIN CAPITAL LETTER O WITH DOUBLE ACUTE</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01D8</entry> + <entry>U+0158</entry> + <entry>LATIN CAPITAL LETTER R WITH CARON</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01D9</entry> + <entry>U+016E</entry> + <entry>LATIN CAPITAL LETTER U WITH RING ABOVE</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01DB</entry> + <entry>U+0170</entry> + <entry>LATIN CAPITAL LETTER U WITH DOUBLE ACUTE</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01DE</entry> + <entry>U+0162</entry> + <entry>LATIN CAPITAL LETTER T WITH CEDILLA</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01E0</entry> + <entry>U+0155</entry> + <entry>LATIN SMALL LETTER R WITH ACUTE</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01E3</entry> + <entry>U+0103</entry> + <entry>LATIN SMALL LETTER A WITH BREVE</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01E5</entry> + <entry>U+013A</entry> + <entry>LATIN SMALL LETTER L WITH ACUTE</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01E6</entry> + <entry>U+0107</entry> + <entry>LATIN SMALL LETTER C WITH ACUTE</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01E8</entry> + <entry>U+010D</entry> + <entry>LATIN SMALL LETTER C WITH CARON</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01EA</entry> + <entry>U+0119</entry> + <entry>LATIN SMALL LETTER E WITH OGONEK</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01EC</entry> + <entry>U+011B</entry> + <entry>LATIN SMALL LETTER E WITH CARON</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01EF</entry> + <entry>U+010F</entry> + <entry>LATIN SMALL LETTER D WITH CARON</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01F0</entry> + <entry>U+0111</entry> + <entry>LATIN SMALL LETTER D WITH STROKE</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01F1</entry> + <entry>U+0144</entry> + <entry>LATIN SMALL LETTER N WITH ACUTE</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01F2</entry> + <entry>U+0148</entry> + <entry>LATIN SMALL LETTER N WITH CARON</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01F5</entry> + <entry>U+0151</entry> + <entry>LATIN SMALL LETTER O WITH DOUBLE ACUTE</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01F8</entry> + <entry>U+0159</entry> + <entry>LATIN SMALL LETTER R WITH CARON</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01F9</entry> + <entry>U+016F</entry> + <entry>LATIN SMALL LETTER U WITH RING ABOVE</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01FB</entry> + <entry>U+0171</entry> + <entry>LATIN SMALL LETTER U WITH DOUBLE ACUTE</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01FE</entry> + <entry>U+0163</entry> + <entry>LATIN SMALL LETTER T WITH CEDILLA</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x01FF</entry> + <entry>U+02D9</entry> + <entry>DOT ABOVE</entry> + <entry>Latin-2</entry> + </row> + <row rowsep="0"> + <entry>#x02A1</entry> + <entry>U+0126</entry> + <entry>LATIN CAPITAL LETTER H WITH STROKE</entry> + <entry>Latin-3</entry> + </row> + <row rowsep="0"> + <entry>#x02A6</entry> + <entry>U+0124</entry> + <entry>LATIN CAPITAL LETTER H WITH CIRCUMFLEX</entry> + <entry>Latin-3</entry> + </row> + <row rowsep="0"> + <entry>#x02A9</entry> + <entry>U+0130</entry> + <entry>LATIN CAPITAL LETTER I WITH DOT ABOVE</entry> + <entry>Latin-3</entry> + </row> + <row rowsep="0"> + <entry>#x02AB</entry> + <entry>U+011E</entry> + <entry>LATIN CAPITAL LETTER G WITH BREVE</entry> + <entry>Latin-3</entry> + </row> + <row rowsep="0"> + <entry>#x02AC</entry> + <entry>U+0134</entry> + <entry>LATIN CAPITAL LETTER J WITH CIRCUMFLEX</entry> + <entry>Latin-3</entry> + </row> + <row rowsep="0"> + <entry>#x02B1</entry> + <entry>U+0127</entry> + <entry>LATIN SMALL LETTER H WITH STROKE</entry> + <entry>Latin-3</entry> + </row> + <row rowsep="0"> + <entry>#x02B6</entry> + <entry>U+0125</entry> + <entry>LATIN SMALL LETTER H WITH CIRCUMFLEX</entry> + <entry>Latin-3</entry> + </row> + <row rowsep="0"> + <entry>#x02B9</entry> + <entry>U+0131</entry> + <entry>LATIN SMALL LETTER DOTLESS I</entry> + <entry>Latin-3</entry> + </row> + <row rowsep="0"> + <entry>#x02BB</entry> + <entry>U+011F</entry> + <entry>LATIN SMALL LETTER G WITH BREVE</entry> + <entry>Latin-3</entry> + </row> + <row rowsep="0"> + <entry>#x02BC</entry> + <entry>U+0135</entry> + <entry>LATIN SMALL LETTER J WITH CIRCUMFLEX</entry> + <entry>Latin-3</entry> + </row> + <row rowsep="0"> + <entry>#x02C5</entry> + <entry>U+010A</entry> + <entry>LATIN CAPITAL LETTER C WITH DOT ABOVE</entry> + <entry>Latin-3</entry> + </row> + <row rowsep="0"> + <entry>#x02C6</entry> + <entry>U+0108</entry> + <entry>LATIN CAPITAL LETTER C WITH CIRCUMFLEX</entry> + <entry>Latin-3</entry> + </row> + <row rowsep="0"> + <entry>#x02D5</entry> + <entry>U+0120</entry> + <entry>LATIN CAPITAL LETTER G WITH DOT ABOVE</entry> + <entry>Latin-3</entry> + </row> + <row rowsep="0"> + <entry>#x02D8</entry> + <entry>U+011C</entry> + <entry>LATIN CAPITAL LETTER G WITH CIRCUMFLEX</entry> + <entry>Latin-3</entry> + </row> + <row rowsep="0"> + <entry>#x02DD</entry> + <entry>U+016C</entry> + <entry>LATIN CAPITAL LETTER U WITH BREVE</entry> + <entry>Latin-3</entry> + </row> + <row rowsep="0"> + <entry>#x02DE</entry> + <entry>U+015C</entry> + <entry>LATIN CAPITAL LETTER S WITH CIRCUMFLEX</entry> + <entry>Latin-3</entry> + </row> + <row rowsep="0"> + <entry>#x02E5</entry> + <entry>U+010B</entry> + <entry>LATIN SMALL LETTER C WITH DOT ABOVE</entry> + <entry>Latin-3</entry> + </row> + <row rowsep="0"> + <entry>#x02E6</entry> + <entry>U+0109</entry> + <entry>LATIN SMALL LETTER C WITH CIRCUMFLEX</entry> + <entry>Latin-3</entry> + </row> + <row rowsep="0"> + <entry>#x02F5</entry> + <entry>U+0121</entry> + <entry>LATIN SMALL LETTER G WITH DOT ABOVE</entry> + <entry>Latin-3</entry> + </row> + <row rowsep="0"> + <entry>#x02F8</entry> + <entry>U+011D</entry> + <entry>LATIN SMALL LETTER G WITH CIRCUMFLEX</entry> + <entry>Latin-3</entry> + </row> + <row rowsep="0"> + <entry>#x02FD</entry> + <entry>U+016D</entry> + <entry>LATIN SMALL LETTER U WITH BREVE</entry> + <entry>Latin-3</entry> + </row> + <row rowsep="0"> + <entry>#x02FE</entry> + <entry>U+015D</entry> + <entry>LATIN SMALL LETTER S WITH CIRCUMFLEX</entry> + <entry>Latin-3</entry> + </row> + <row rowsep="0"> + <entry>#x03A2</entry> + <entry>U+0138</entry> + <entry>LATIN SMALL LETTER KRA</entry> + <entry>Latin-4</entry> + </row> + <row rowsep="0"> + <entry>#x03A3</entry> + <entry>U+0156</entry> + <entry>LATIN CAPITAL LETTER R WITH CEDILLA</entry> + <entry>Latin-4</entry> + </row> + <row rowsep="0"> + <entry>#x03A5</entry> + <entry>U+0128</entry> + <entry>LATIN CAPITAL LETTER I WITH TILDE</entry> + <entry>Latin-4</entry> + </row> + <row rowsep="0"> + <entry>#x03A6</entry> + <entry>U+013B</entry> + <entry>LATIN CAPITAL LETTER L WITH CEDILLA</entry> + <entry>Latin-4</entry> + </row> + <row rowsep="0"> + <entry>#x03AA</entry> + <entry>U+0112</entry> + <entry>LATIN CAPITAL LETTER E WITH MACRON</entry> + <entry>Latin-4</entry> + </row> + <row rowsep="0"> + <entry>#x03AB</entry> + <entry>U+0122</entry> + <entry>LATIN CAPITAL LETTER G WITH CEDILLA</entry> + <entry>Latin-4</entry> + </row> + <row rowsep="0"> + <entry>#x03AC</entry> + <entry>U+0166</entry> + <entry>LATIN CAPITAL LETTER T WITH STROKE</entry> + <entry>Latin-4</entry> + </row> + <row rowsep="0"> + <entry>#x03B3</entry> + <entry>U+0157</entry> + <entry>LATIN SMALL LETTER R WITH CEDILLA</entry> + <entry>Latin-4</entry> + </row> + <row rowsep="0"> + <entry>#x03B5</entry> + <entry>U+0129</entry> + <entry>LATIN SMALL LETTER I WITH TILDE</entry> + <entry>Latin-4</entry> + </row> + <row rowsep="0"> + <entry>#x03B6</entry> + <entry>U+013C</entry> + <entry>LATIN SMALL LETTER L WITH CEDILLA</entry> + <entry>Latin-4</entry> + </row> + <row rowsep="0"> + <entry>#x03BA</entry> + <entry>U+0113</entry> + <entry>LATIN SMALL LETTER E WITH MACRON</entry> + <entry>Latin-4</entry> + </row> + <row rowsep="0"> + <entry>#x03BB</entry> + <entry>U+0123</entry> + <entry>LATIN SMALL LETTER G WITH CEDILLA</entry> + <entry>Latin-4</entry> + </row> + <row rowsep="0"> + <entry>#x03BC</entry> + <entry>U+0167</entry> + <entry>LATIN SMALL LETTER T WITH STROKE</entry> + <entry>Latin-4</entry> + </row> + <row rowsep="0"> + <entry>#x03BD</entry> + <entry>U+014A</entry> + <entry>LATIN CAPITAL LETTER ENG</entry> + <entry>Latin-4</entry> + </row> + <row rowsep="0"> + <entry>#x03BF</entry> + <entry>U+014B</entry> + <entry>LATIN SMALL LETTER ENG</entry> + <entry>Latin-4</entry> + </row> + <row rowsep="0"> + <entry>#x03C0</entry> + <entry>U+0100</entry> + <entry>LATIN CAPITAL LETTER A WITH MACRON</entry> + <entry>Latin-4</entry> + </row> + <row rowsep="0"> + <entry>#x03C7</entry> + <entry>U+012E</entry> + <entry>LATIN CAPITAL LETTER I WITH OGONEK</entry> + <entry>Latin-4</entry> + </row> + <row rowsep="0"> + <entry>#x03CC</entry> + <entry>U+0116</entry> + <entry>LATIN CAPITAL LETTER E WITH DOT ABOVE</entry> + <entry>Latin-4</entry> + </row> + <row rowsep="0"> + <entry>#x03CF</entry> + <entry>U+012A</entry> + <entry>LATIN CAPITAL LETTER I WITH MACRON</entry> + <entry>Latin-4</entry> + </row> + <row rowsep="0"> + <entry>#x03D1</entry> + <entry>U+0145</entry> + <entry>LATIN CAPITAL LETTER N WITH CEDILLA</entry> + <entry>Latin-4</entry> + </row> + <row rowsep="0"> + <entry>#x03D2</entry> + <entry>U+014C</entry> + <entry>LATIN CAPITAL LETTER O WITH MACRON</entry> + <entry>Latin-4</entry> + </row> + <row rowsep="0"> + <entry>#x03D3</entry> + <entry>U+0136</entry> + <entry>LATIN CAPITAL LETTER K WITH CEDILLA</entry> + <entry>Latin-4</entry> + </row> + <row rowsep="0"> + <entry>#x03D9</entry> + <entry>U+0172</entry> + <entry>LATIN CAPITAL LETTER U WITH OGONEK</entry> + <entry>Latin-4</entry> + </row> + <row rowsep="0"> + <entry>#x03DD</entry> + <entry>U+0168</entry> + <entry>LATIN CAPITAL LETTER U WITH TILDE</entry> + <entry>Latin-4</entry> + </row> + <row rowsep="0"> + <entry>#x03DE</entry> + <entry>U+016A</entry> + <entry>LATIN CAPITAL LETTER U WITH MACRON</entry> + <entry>Latin-4</entry> + </row> + <row rowsep="0"> + <entry>#x03E0</entry> + <entry>U+0101</entry> + <entry>LATIN SMALL LETTER A WITH MACRON</entry> + <entry>Latin-4</entry> + </row> + <row rowsep="0"> + <entry>#x03E7</entry> + <entry>U+012F</entry> + <entry>LATIN SMALL LETTER I WITH OGONEK</entry> + <entry>Latin-4</entry> + </row> + <row rowsep="0"> + <entry>#x03EC</entry> + <entry>U+0117</entry> + <entry>LATIN SMALL LETTER E WITH DOT ABOVE</entry> + <entry>Latin-4</entry> + </row> + <row rowsep="0"> + <entry>#x03EF</entry> + <entry>U+012B</entry> + <entry>LATIN SMALL LETTER I WITH MACRON</entry> + <entry>Latin-4</entry> + </row> + <row rowsep="0"> + <entry>#x03F1</entry> + <entry>U+0146</entry> + <entry>LATIN SMALL LETTER N WITH CEDILLA</entry> + <entry>Latin-4</entry> + </row> + <row rowsep="0"> + <entry>#x03F2</entry> + <entry>U+014D</entry> + <entry>LATIN SMALL LETTER O WITH MACRON</entry> + <entry>Latin-4</entry> + </row> + <row rowsep="0"> + <entry>#x03F3</entry> + <entry>U+0137</entry> + <entry>LATIN SMALL LETTER K WITH CEDILLA</entry> + <entry>Latin-4</entry> + </row> + <row rowsep="0"> + <entry>#x03F9</entry> + <entry>U+0173</entry> + <entry>LATIN SMALL LETTER U WITH OGONEK</entry> + <entry>Latin-4</entry> + </row> + <row rowsep="0"> + <entry>#x03FD</entry> + <entry>U+0169</entry> + <entry>LATIN SMALL LETTER U WITH TILDE</entry> + <entry>Latin-4</entry> + </row> + <row rowsep="0"> + <entry>#x03FE</entry> + <entry>U+016B</entry> + <entry>LATIN SMALL LETTER U WITH MACRON</entry> + <entry>Latin-4</entry> + </row> + <row rowsep="0"> + <entry>#x047E</entry> + <entry>U+203E</entry> + <entry>OVERLINE</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04A1</entry> + <entry>U+3002</entry> + <entry>KANA FULL STOP</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04A2</entry> + <entry>U+300C</entry> + <entry>KANA OPENING BRACKET</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04A3</entry> + <entry>U+300D</entry> + <entry>KANA CLOSING BRACKET</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04A4</entry> + <entry>U+3001</entry> + <entry>KANA COMMA</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04A5</entry> + <entry>U+30FB</entry> + <entry>KANA CONJUNCTIVE</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04A6</entry> + <entry>U+30F2</entry> + <entry>KANA LETTER WO</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04A7</entry> + <entry>U+30A1</entry> + <entry>KANA LETTER SMALL A</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04A8</entry> + <entry>U+30A3</entry> + <entry>KANA LETTER SMALL I</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04A9</entry> + <entry>U+30A5</entry> + <entry>KANA LETTER SMALL U</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04AA</entry> + <entry>U+30A7</entry> + <entry>KANA LETTER SMALL E</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04AB</entry> + <entry>U+30A9</entry> + <entry>KANA LETTER SMALL O</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04AC</entry> + <entry>U+30E3</entry> + <entry>KANA LETTER SMALL YA</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04AD</entry> + <entry>U+30E5</entry> + <entry>KANA LETTER SMALL YU</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04AE</entry> + <entry>U+30E7</entry> + <entry>KANA LETTER SMALL YO</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04AF</entry> + <entry>U+30C3</entry> + <entry>KANA LETTER SMALL TSU</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04B0</entry> + <entry>U+30FC</entry> + <entry>PROLONGED SOUND SYMBOL</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04B1</entry> + <entry>U+30A2</entry> + <entry>KANA LETTER A</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04B2</entry> + <entry>U+30A4</entry> + <entry>KANA LETTER I</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04B3</entry> + <entry>U+30A6</entry> + <entry>KANA LETTER U</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04B4</entry> + <entry>U+30A8</entry> + <entry>KANA LETTER E</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04B5</entry> + <entry>U+30AA</entry> + <entry>KANA LETTER O</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04B6</entry> + <entry>U+30AB</entry> + <entry>KANA LETTER KA</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04B7</entry> + <entry>U+30AD</entry> + <entry>KANA LETTER KI</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04B8</entry> + <entry>U+30AF</entry> + <entry>KANA LETTER KU</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04B9</entry> + <entry>U+30B1</entry> + <entry>KANA LETTER KE</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04BA</entry> + <entry>U+30B3</entry> + <entry>KANA LETTER KO</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04BB</entry> + <entry>U+30B5</entry> + <entry>KANA LETTER SA</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04BC</entry> + <entry>U+30B7</entry> + <entry>KANA LETTER SHI</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04BD</entry> + <entry>U+30B9</entry> + <entry>KANA LETTER SU</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04BE</entry> + <entry>U+30BB</entry> + <entry>KANA LETTER SE</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04BF</entry> + <entry>U+30BD</entry> + <entry>KANA LETTER SO</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04C0</entry> + <entry>U+30BF</entry> + <entry>KANA LETTER TA</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04C1</entry> + <entry>U+30C1</entry> + <entry>KANA LETTER CHI</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04C2</entry> + <entry>U+30C4</entry> + <entry>KANA LETTER TSU</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04C3</entry> + <entry>U+30C6</entry> + <entry>KANA LETTER TE</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04C4</entry> + <entry>U+30C8</entry> + <entry>KANA LETTER TO</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04C5</entry> + <entry>U+30CA</entry> + <entry>KANA LETTER NA</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04C6</entry> + <entry>U+30CB</entry> + <entry>KANA LETTER NI</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04C7</entry> + <entry>U+30CC</entry> + <entry>KANA LETTER NU</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04C8</entry> + <entry>U+30CD</entry> + <entry>KANA LETTER NE</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04C9</entry> + <entry>U+30CE</entry> + <entry>KANA LETTER NO</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04CA</entry> + <entry>U+30CF</entry> + <entry>KANA LETTER HA</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04CB</entry> + <entry>U+30D2</entry> + <entry>KANA LETTER HI</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04CC</entry> + <entry>U+30D5</entry> + <entry>KANA LETTER FU</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04CD</entry> + <entry>U+30D8</entry> + <entry>KANA LETTER HE</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04CE</entry> + <entry>U+30DB</entry> + <entry>KANA LETTER HO</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04CF</entry> + <entry>U+30DE</entry> + <entry>KANA LETTER MA</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04D0</entry> + <entry>U+30DF</entry> + <entry>KANA LETTER MI</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04D1</entry> + <entry>U+30E0</entry> + <entry>KANA LETTER MU</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04D2</entry> + <entry>U+30E1</entry> + <entry>KANA LETTER ME</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04D3</entry> + <entry>U+30E2</entry> + <entry>KANA LETTER MO</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04D4</entry> + <entry>U+30E4</entry> + <entry>KANA LETTER YA</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04D5</entry> + <entry>U+30E6</entry> + <entry>KANA LETTER YU</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04D6</entry> + <entry>U+30E8</entry> + <entry>KANA LETTER YO</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04D7</entry> + <entry>U+30E9</entry> + <entry>KANA LETTER RA</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04D8</entry> + <entry>U+30EA</entry> + <entry>KANA LETTER RI</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04D9</entry> + <entry>U+30EB</entry> + <entry>KANA LETTER RU</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04DA</entry> + <entry>U+30EC</entry> + <entry>KANA LETTER RE</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04DB</entry> + <entry>U+30ED</entry> + <entry>KANA LETTER RO</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04DC</entry> + <entry>U+30EF</entry> + <entry>KANA LETTER WA</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04DD</entry> + <entry>U+30F3</entry> + <entry>KANA LETTER N</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04DE</entry> + <entry>U+309B</entry> + <entry>VOICED SOUND SYMBOL</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x04DF</entry> + <entry>U+309C</entry> + <entry>SEMIVOICED SOUND SYMBOL</entry> + <entry>Kana</entry> + </row> + <row rowsep="0"> + <entry>#x05AC</entry> + <entry>U+060C</entry> + <entry>ARABIC COMMA</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05BB</entry> + <entry>U+061B</entry> + <entry>ARABIC SEMICOLON</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05BF</entry> + <entry>U+061F</entry> + <entry>ARABIC QUESTION MARK</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05C1</entry> + <entry>U+0621</entry> + <entry>ARABIC LETTER HAMZA</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05C2</entry> + <entry>U+0622</entry> + <entry>ARABIC LETTER ALEF WITH MADDA ABOVE</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05C3</entry> + <entry>U+0623</entry> + <entry>ARABIC LETTER ALEF WITH HAMZA ABOVE</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05C4</entry> + <entry>U+0624</entry> + <entry>ARABIC LETTER WAW WITH HAMZA ABOVE</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05C5</entry> + <entry>U+0625</entry> + <entry>ARABIC LETTER ALEF WITH HAMZA BELOW</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05C6</entry> + <entry>U+0626</entry> + <entry>ARABIC LETTER YEH WITH HAMZA ABOVE</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05C7</entry> + <entry>U+0627</entry> + <entry>ARABIC LETTER ALEF</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05C8</entry> + <entry>U+0628</entry> + <entry>ARABIC LETTER BEH</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05C9</entry> + <entry>U+0629</entry> + <entry>ARABIC LETTER TEH MARBUTA</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05CA</entry> + <entry>U+062A</entry> + <entry>ARABIC LETTER TEH</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05CB</entry> + <entry>U+062B</entry> + <entry>ARABIC LETTER THEH</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05CC</entry> + <entry>U+062C</entry> + <entry>ARABIC LETTER JEEM</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05CD</entry> + <entry>U+062D</entry> + <entry>ARABIC LETTER HAH</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05CE</entry> + <entry>U+062E</entry> + <entry>ARABIC LETTER KHAH</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05CF</entry> + <entry>U+062F</entry> + <entry>ARABIC LETTER DAL</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05D0</entry> + <entry>U+0630</entry> + <entry>ARABIC LETTER THAL</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05D1</entry> + <entry>U+0631</entry> + <entry>ARABIC LETTER REH</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05D2</entry> + <entry>U+0632</entry> + <entry>ARABIC LETTER ZAIN</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05D3</entry> + <entry>U+0633</entry> + <entry>ARABIC LETTER SEEN</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05D4</entry> + <entry>U+0634</entry> + <entry>ARABIC LETTER SHEEN</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05D5</entry> + <entry>U+0635</entry> + <entry>ARABIC LETTER SAD</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05D6</entry> + <entry>U+0636</entry> + <entry>ARABIC LETTER DAD</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05D7</entry> + <entry>U+0637</entry> + <entry>ARABIC LETTER TAH</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05D8</entry> + <entry>U+0638</entry> + <entry>ARABIC LETTER ZAH</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05D9</entry> + <entry>U+0639</entry> + <entry>ARABIC LETTER AIN</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05DA</entry> + <entry>U+063A</entry> + <entry>ARABIC LETTER GHAIN</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05E0</entry> + <entry>U+0640</entry> + <entry>ARABIC TATWEEL</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05E1</entry> + <entry>U+0641</entry> + <entry>ARABIC LETTER FEH</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05E2</entry> + <entry>U+0642</entry> + <entry>ARABIC LETTER QAF</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05E3</entry> + <entry>U+0643</entry> + <entry>ARABIC LETTER KAF</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05E4</entry> + <entry>U+0644</entry> + <entry>ARABIC LETTER LAM</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05E5</entry> + <entry>U+0645</entry> + <entry>ARABIC LETTER MEEM</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05E6</entry> + <entry>U+0646</entry> + <entry>ARABIC LETTER NOON</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05E7</entry> + <entry>U+0647</entry> + <entry>ARABIC LETTER HEH</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05E8</entry> + <entry>U+0648</entry> + <entry>ARABIC LETTER WAW</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05E9</entry> + <entry>U+0649</entry> + <entry>ARABIC LETTER ALEF MAKSURA</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05EA</entry> + <entry>U+064A</entry> + <entry>ARABIC LETTER YEH</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05EB</entry> + <entry>U+064B</entry> + <entry>ARABIC FATHATAN</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05EC</entry> + <entry>U+064C</entry> + <entry>ARABIC DAMMATAN</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05ED</entry> + <entry>U+064D</entry> + <entry>ARABIC KASRATAN</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05EE</entry> + <entry>U+064E</entry> + <entry>ARABIC FATHA</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05EF</entry> + <entry>U+064F</entry> + <entry>ARABIC DAMMA</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05F0</entry> + <entry>U+0650</entry> + <entry>ARABIC KASRA</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05F1</entry> + <entry>U+0651</entry> + <entry>ARABIC SHADDA</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x05F2</entry> + <entry>U+0652</entry> + <entry>ARABIC SUKUN</entry> + <entry>Arabic</entry> + </row> + <row rowsep="0"> + <entry>#x06A1</entry> + <entry>U+0452</entry> + <entry>CYRILLIC SMALL LETTER DJE</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06A2</entry> + <entry>U+0453</entry> + <entry>CYRILLIC SMALL LETTER GJE</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06A3</entry> + <entry>U+0451</entry> + <entry>CYRILLIC SMALL LETTER IO</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06A4</entry> + <entry>U+0454</entry> + <entry>CYRILLIC SMALL LETTER UKRAINIAN IE</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06A5</entry> + <entry>U+0455</entry> + <entry>CYRILLIC SMALL LETTER DZE</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06A6</entry> + <entry>U+0456</entry> + <entry>CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06A7</entry> + <entry>U+0457</entry> + <entry>CYRILLIC SMALL LETTER YI</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06A8</entry> + <entry>U+0458</entry> + <entry>CYRILLIC SMALL LETTER JE</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06A9</entry> + <entry>U+0459</entry> + <entry>CYRILLIC SMALL LETTER LJE</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06AA</entry> + <entry>U+045A</entry> + <entry>CYRILLIC SMALL LETTER NJE</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06AB</entry> + <entry>U+045B</entry> + <entry>CYRILLIC SMALL LETTER TSHE</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06AC</entry> + <entry>U+045C</entry> + <entry>CYRILLIC SMALL LETTER KJE</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06AD</entry> + <entry>U+0491</entry> + <entry>CYRILLIC SMALL LETTER GHE WITH UPTURN</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06AE</entry> + <entry>U+045E</entry> + <entry>CYRILLIC SMALL LETTER SHORT U</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06AF</entry> + <entry>U+045F</entry> + <entry>CYRILLIC SMALL LETTER DZHE</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06B0</entry> + <entry>U+2116</entry> + <entry>NUMERO SIGN</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06B1</entry> + <entry>U+0402</entry> + <entry>CYRILLIC CAPITAL LETTER DJE</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06B2</entry> + <entry>U+0403</entry> + <entry>CYRILLIC CAPITAL LETTER GJE</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06B3</entry> + <entry>U+0401</entry> + <entry>CYRILLIC CAPITAL LETTER IO</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06B4</entry> + <entry>U+0404</entry> + <entry>CYRILLIC CAPITAL LETTER UKRAINIAN IE</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06B5</entry> + <entry>U+0405</entry> + <entry>CYRILLIC CAPITAL LETTER DZE</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06B6</entry> + <entry>U+0406</entry> + <entry>CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06B7</entry> + <entry>U+0407</entry> + <entry>CYRILLIC CAPITAL LETTER YI</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06B8</entry> + <entry>U+0408</entry> + <entry>CYRILLIC CAPITAL LETTER JE</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06B9</entry> + <entry>U+0409</entry> + <entry>CYRILLIC CAPITAL LETTER LJE</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06BA</entry> + <entry>U+040A</entry> + <entry>CYRILLIC CAPITAL LETTER NJE</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06BB</entry> + <entry>U+040B</entry> + <entry>CYRILLIC CAPITAL LETTER TSHE</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06BC</entry> + <entry>U+040C</entry> + <entry>CYRILLIC CAPITAL LETTER KJE</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06BD</entry> + <entry>U+0490</entry> + <entry>CYRILLIC CAPITAL LETTER GHE WITH UPTURN</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06BE</entry> + <entry>U+040E</entry> + <entry>CYRILLIC CAPITAL LETTER SHORT U</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06BF</entry> + <entry>U+040F</entry> + <entry>CYRILLIC CAPITAL LETTER DZHE</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06C0</entry> + <entry>U+044E</entry> + <entry>CYRILLIC SMALL LETTER YU</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06C1</entry> + <entry>U+0430</entry> + <entry>CYRILLIC SMALL LETTER A</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06C2</entry> + <entry>U+0431</entry> + <entry>CYRILLIC SMALL LETTER BE</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06C3</entry> + <entry>U+0446</entry> + <entry>CYRILLIC SMALL LETTER TSE</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06C4</entry> + <entry>U+0434</entry> + <entry>CYRILLIC SMALL LETTER DE</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06C5</entry> + <entry>U+0435</entry> + <entry>CYRILLIC SMALL LETTER IE</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06C6</entry> + <entry>U+0444</entry> + <entry>CYRILLIC SMALL LETTER EF</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06C7</entry> + <entry>U+0433</entry> + <entry>CYRILLIC SMALL LETTER GHE</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06C8</entry> + <entry>U+0445</entry> + <entry>CYRILLIC SMALL LETTER HA</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06C9</entry> + <entry>U+0438</entry> + <entry>CYRILLIC SMALL LETTER I</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06CA</entry> + <entry>U+0439</entry> + <entry>CYRILLIC SMALL LETTER SHORT I</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06CB</entry> + <entry>U+043A</entry> + <entry>CYRILLIC SMALL LETTER KA</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06CC</entry> + <entry>U+043B</entry> + <entry>CYRILLIC SMALL LETTER EL</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06CD</entry> + <entry>U+043C</entry> + <entry>CYRILLIC SMALL LETTER EM</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06CE</entry> + <entry>U+043D</entry> + <entry>CYRILLIC SMALL LETTER EN</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06CF</entry> + <entry>U+043E</entry> + <entry>CYRILLIC SMALL LETTER O</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06D0</entry> + <entry>U+043F</entry> + <entry>CYRILLIC SMALL LETTER PE</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06D1</entry> + <entry>U+044F</entry> + <entry>CYRILLIC SMALL LETTER YA</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06D2</entry> + <entry>U+0440</entry> + <entry>CYRILLIC SMALL LETTER ER</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06D3</entry> + <entry>U+0441</entry> + <entry>CYRILLIC SMALL LETTER ES</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06D4</entry> + <entry>U+0442</entry> + <entry>CYRILLIC SMALL LETTER TE</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06D5</entry> + <entry>U+0443</entry> + <entry>CYRILLIC SMALL LETTER U</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06D6</entry> + <entry>U+0436</entry> + <entry>CYRILLIC SMALL LETTER ZHE</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06D7</entry> + <entry>U+0432</entry> + <entry>CYRILLIC SMALL LETTER VE</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06D8</entry> + <entry>U+044C</entry> + <entry>CYRILLIC SMALL LETTER SOFT SIGN</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06D9</entry> + <entry>U+044B</entry> + <entry>CYRILLIC SMALL LETTER YERU</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06DA</entry> + <entry>U+0437</entry> + <entry>CYRILLIC SMALL LETTER ZE</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06DB</entry> + <entry>U+0448</entry> + <entry>CYRILLIC SMALL LETTER SHA</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06DC</entry> + <entry>U+044D</entry> + <entry>CYRILLIC SMALL LETTER E</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06DD</entry> + <entry>U+0449</entry> + <entry>CYRILLIC SMALL LETTER SHCHA</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06DE</entry> + <entry>U+0447</entry> + <entry>CYRILLIC SMALL LETTER CHE</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06DF</entry> + <entry>U+044A</entry> + <entry>CYRILLIC SMALL LETTER HARD SIGN</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06E0</entry> + <entry>U+042E</entry> + <entry>CYRILLIC CAPITAL LETTER YU</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06E1</entry> + <entry>U+0410</entry> + <entry>CYRILLIC CAPITAL LETTER A</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06E2</entry> + <entry>U+0411</entry> + <entry>CYRILLIC CAPITAL LETTER BE</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06E3</entry> + <entry>U+0426</entry> + <entry>CYRILLIC CAPITAL LETTER TSE</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06E4</entry> + <entry>U+0414</entry> + <entry>CYRILLIC CAPITAL LETTER DE</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06E5</entry> + <entry>U+0415</entry> + <entry>CYRILLIC CAPITAL LETTER IE</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06E6</entry> + <entry>U+0424</entry> + <entry>CYRILLIC CAPITAL LETTER EF</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06E7</entry> + <entry>U+0413</entry> + <entry>CYRILLIC CAPITAL LETTER GHE</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06E8</entry> + <entry>U+0425</entry> + <entry>CYRILLIC CAPITAL LETTER HA</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06E9</entry> + <entry>U+0418</entry> + <entry>CYRILLIC CAPITAL LETTER I</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06EA</entry> + <entry>U+0419</entry> + <entry>CYRILLIC CAPITAL LETTER SHORT I</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06EB</entry> + <entry>U+041A</entry> + <entry>CYRILLIC CAPITAL LETTER KA</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06EC</entry> + <entry>U+041B</entry> + <entry>CYRILLIC CAPITAL LETTER EL</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06ED</entry> + <entry>U+041C</entry> + <entry>CYRILLIC CAPITAL LETTER EM</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06EE</entry> + <entry>U+041D</entry> + <entry>CYRILLIC CAPITAL LETTER EN</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06EF</entry> + <entry>U+041E</entry> + <entry>CYRILLIC CAPITAL LETTER O</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06F0</entry> + <entry>U+041F</entry> + <entry>CYRILLIC CAPITAL LETTER PE</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06F1</entry> + <entry>U+042F</entry> + <entry>CYRILLIC CAPITAL LETTER YA</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06F2</entry> + <entry>U+0420</entry> + <entry>CYRILLIC CAPITAL LETTER ER</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06F3</entry> + <entry>U+0421</entry> + <entry>CYRILLIC CAPITAL LETTER ES</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06F4</entry> + <entry>U+0422</entry> + <entry>CYRILLIC CAPITAL LETTER TE</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06F5</entry> + <entry>U+0423</entry> + <entry>CYRILLIC CAPITAL LETTER U</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06F6</entry> + <entry>U+0416</entry> + <entry>CYRILLIC CAPITAL LETTER ZHE</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06F7</entry> + <entry>U+0412</entry> + <entry>CYRILLIC CAPITAL LETTER VE</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06F8</entry> + <entry>U+042C</entry> + <entry>CYRILLIC CAPITAL LETTER SOFT SIGN</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06F9</entry> + <entry>U+042B</entry> + <entry>CYRILLIC CAPITAL LETTER YERU</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06FA</entry> + <entry>U+0417</entry> + <entry>CYRILLIC CAPITAL LETTER ZE</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06FB</entry> + <entry>U+0428</entry> + <entry>CYRILLIC CAPITAL LETTER SHA</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06FC</entry> + <entry>U+042D</entry> + <entry>CYRILLIC CAPITAL LETTER E</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06FD</entry> + <entry>U+0429</entry> + <entry>CYRILLIC CAPITAL LETTER SHCHA</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06FE</entry> + <entry>U+0427</entry> + <entry>CYRILLIC CAPITAL LETTER CHE</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x06FF</entry> + <entry>U+042A</entry> + <entry>CYRILLIC CAPITAL LETTER HARD SIGN</entry> + <entry>Cyrillic</entry> + </row> + <row rowsep="0"> + <entry>#x07A1</entry> + <entry>U+0386</entry> + <entry>GREEK CAPITAL LETTER ALPHA WITH TONOS</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07A2</entry> + <entry>U+0388</entry> + <entry>GREEK CAPITAL LETTER EPSILON WITH TONOS</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07A3</entry> + <entry>U+0389</entry> + <entry>GREEK CAPITAL LETTER ETA WITH TONOS</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07A4</entry> + <entry>U+038A</entry> + <entry>GREEK CAPITAL LETTER IOTA WITH TONOS</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07A5</entry> + <entry>U+03AA</entry> + <entry>GREEK CAPITAL LETTER IOTA WITH DIALYTIKA</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07A7</entry> + <entry>U+038C</entry> + <entry>GREEK CAPITAL LETTER OMICRON WITH TONOS</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07A8</entry> + <entry>U+038E</entry> + <entry>GREEK CAPITAL LETTER UPSILON WITH TONOS</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07A9</entry> + <entry>U+03AB</entry> + <entry>GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07AB</entry> + <entry>U+038F</entry> + <entry>GREEK CAPITAL LETTER OMEGA WITH TONOS</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07AE</entry> + <entry>U+0385</entry> + <entry>GREEK DIALYTIKA TONOS</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07AF</entry> + <entry>U+2015</entry> + <entry>HORIZONTAL BAR</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07B1</entry> + <entry>U+03AC</entry> + <entry>GREEK SMALL LETTER ALPHA WITH TONOS</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07B2</entry> + <entry>U+03AD</entry> + <entry>GREEK SMALL LETTER EPSILON WITH TONOS</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07B3</entry> + <entry>U+03AE</entry> + <entry>GREEK SMALL LETTER ETA WITH TONOS</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07B4</entry> + <entry>U+03AF</entry> + <entry>GREEK SMALL LETTER IOTA WITH TONOS</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07B5</entry> + <entry>U+03CA</entry> + <entry>GREEK SMALL LETTER IOTA WITH DIALYTIKA</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07B6</entry> + <entry>U+0390</entry> + <entry>GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07B7</entry> + <entry>U+03CC</entry> + <entry>GREEK SMALL LETTER OMICRON WITH TONOS</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07B8</entry> + <entry>U+03CD</entry> + <entry>GREEK SMALL LETTER UPSILON WITH TONOS</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07B9</entry> + <entry>U+03CB</entry> + <entry>GREEK SMALL LETTER UPSILON WITH DIALYTIKA</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07BA</entry> + <entry>U+03B0</entry> + <entry>GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07BB</entry> + <entry>U+03CE</entry> + <entry>GREEK SMALL LETTER OMEGA WITH TONOS</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07C1</entry> + <entry>U+0391</entry> + <entry>GREEK CAPITAL LETTER ALPHA</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07C2</entry> + <entry>U+0392</entry> + <entry>GREEK CAPITAL LETTER BETA</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07C3</entry> + <entry>U+0393</entry> + <entry>GREEK CAPITAL LETTER GAMMA</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07C4</entry> + <entry>U+0394</entry> + <entry>GREEK CAPITAL LETTER DELTA</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07C5</entry> + <entry>U+0395</entry> + <entry>GREEK CAPITAL LETTER EPSILON</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07C6</entry> + <entry>U+0396</entry> + <entry>GREEK CAPITAL LETTER ZETA</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07C7</entry> + <entry>U+0397</entry> + <entry>GREEK CAPITAL LETTER ETA</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07C8</entry> + <entry>U+0398</entry> + <entry>GREEK CAPITAL LETTER THETA</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07C9</entry> + <entry>U+0399</entry> + <entry>GREEK CAPITAL LETTER IOTA</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07CA</entry> + <entry>U+039A</entry> + <entry>GREEK CAPITAL LETTER KAPPA</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07CB</entry> + <entry>U+039B</entry> + <entry>GREEK CAPITAL LETTER LAMDA</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07CC</entry> + <entry>U+039C</entry> + <entry>GREEK CAPITAL LETTER MU</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07CD</entry> + <entry>U+039D</entry> + <entry>GREEK CAPITAL LETTER NU</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07CE</entry> + <entry>U+039E</entry> + <entry>GREEK CAPITAL LETTER XI</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07CF</entry> + <entry>U+039F</entry> + <entry>GREEK CAPITAL LETTER OMICRON</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07D0</entry> + <entry>U+03A0</entry> + <entry>GREEK CAPITAL LETTER PI</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07D1</entry> + <entry>U+03A1</entry> + <entry>GREEK CAPITAL LETTER RHO</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07D2</entry> + <entry>U+03A3</entry> + <entry>GREEK CAPITAL LETTER SIGMA</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07D4</entry> + <entry>U+03A4</entry> + <entry>GREEK CAPITAL LETTER TAU</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07D5</entry> + <entry>U+03A5</entry> + <entry>GREEK CAPITAL LETTER UPSILON</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07D6</entry> + <entry>U+03A6</entry> + <entry>GREEK CAPITAL LETTER PHI</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07D7</entry> + <entry>U+03A7</entry> + <entry>GREEK CAPITAL LETTER CHI</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07D8</entry> + <entry>U+03A8</entry> + <entry>GREEK CAPITAL LETTER PSI</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07D9</entry> + <entry>U+03A9</entry> + <entry>GREEK CAPITAL LETTER OMEGA</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07E1</entry> + <entry>U+03B1</entry> + <entry>GREEK SMALL LETTER ALPHA</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07E2</entry> + <entry>U+03B2</entry> + <entry>GREEK SMALL LETTER BETA</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07E3</entry> + <entry>U+03B3</entry> + <entry>GREEK SMALL LETTER GAMMA</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07E4</entry> + <entry>U+03B4</entry> + <entry>GREEK SMALL LETTER DELTA</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07E5</entry> + <entry>U+03B5</entry> + <entry>GREEK SMALL LETTER EPSILON</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07E6</entry> + <entry>U+03B6</entry> + <entry>GREEK SMALL LETTER ZETA</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07E7</entry> + <entry>U+03B7</entry> + <entry>GREEK SMALL LETTER ETA</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07E8</entry> + <entry>U+03B8</entry> + <entry>GREEK SMALL LETTER THETA</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07E9</entry> + <entry>U+03B9</entry> + <entry>GREEK SMALL LETTER IOTA</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07EA</entry> + <entry>U+03BA</entry> + <entry>GREEK SMALL LETTER KAPPA</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07EB</entry> + <entry>U+03BB</entry> + <entry>GREEK SMALL LETTER LAMDA</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07EC</entry> + <entry>U+03BC</entry> + <entry>GREEK SMALL LETTER MU</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07ED</entry> + <entry>U+03BD</entry> + <entry>GREEK SMALL LETTER NU</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07EE</entry> + <entry>U+03BE</entry> + <entry>GREEK SMALL LETTER XI</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07EF</entry> + <entry>U+03BF</entry> + <entry>GREEK SMALL LETTER OMICRON</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07F0</entry> + <entry>U+03C0</entry> + <entry>GREEK SMALL LETTER PI</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07F1</entry> + <entry>U+03C1</entry> + <entry>GREEK SMALL LETTER RHO</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07F2</entry> + <entry>U+03C3</entry> + <entry>GREEK SMALL LETTER SIGMA</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07F3</entry> + <entry>U+03C2</entry> + <entry>GREEK SMALL LETTER FINAL SIGMA</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07F4</entry> + <entry>U+03C4</entry> + <entry>GREEK SMALL LETTER TAU</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07F5</entry> + <entry>U+03C5</entry> + <entry>GREEK SMALL LETTER UPSILON</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07F6</entry> + <entry>U+03C6</entry> + <entry>GREEK SMALL LETTER PHI</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07F7</entry> + <entry>U+03C7</entry> + <entry>GREEK SMALL LETTER CHI</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07F8</entry> + <entry>U+03C8</entry> + <entry>GREEK SMALL LETTER PSI</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x07F9</entry> + <entry>U+03C9</entry> + <entry>GREEK SMALL LETTER OMEGA</entry> + <entry>Greek</entry> + </row> + <row rowsep="0"> + <entry>#x08A1</entry> + <entry>U+23B7</entry> + <entry>LEFT RADICAL</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08A2</entry> + <entry>-</entry> + <entry>TOP LEFT RADICAL</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08A3</entry> + <entry>-</entry> + <entry>HORIZONTAL CONNECTOR</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08A4</entry> + <entry>U+2320</entry> + <entry>TOP INTEGRAL</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08A5</entry> + <entry>U+2321</entry> + <entry>BOTTOM INTEGRAL</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08A6</entry> + <entry>-</entry> + <entry>VERTICAL CONNECTOR</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08A7</entry> + <entry>U+23A1</entry> + <entry>TOP LEFT SQUARE BRACKET</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08A8</entry> + <entry>U+23A3</entry> + <entry>BOTTOM LEFT SQUARE BRACKET</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08A9</entry> + <entry>U+23A4</entry> + <entry>TOP RIGHT SQUARE BRACKET</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08AA</entry> + <entry>U+23A6</entry> + <entry>BOTTOM RIGHT SQUARE BRACKET</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08AB</entry> + <entry>U+239B</entry> + <entry>TOP LEFT PARENTHESIS</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08AC</entry> + <entry>U+239D</entry> + <entry>BOTTOM LEFT PARENTHESIS</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08AD</entry> + <entry>U+239E</entry> + <entry>TOP RIGHT PARENTHESIS</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08AE</entry> + <entry>U+23A0</entry> + <entry>BOTTOM RIGHT PARENTHESIS</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08AF</entry> + <entry>U+23A8</entry> + <entry>LEFT MIDDLE CURLY BRACE</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08B0</entry> + <entry>U+23AC</entry> + <entry>RIGHT MIDDLE CURLY BRACE</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08B1</entry> + <entry>-</entry> + <entry>TOP LEFT SUMMATION</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08B2</entry> + <entry>-</entry> + <entry>BOTTOM LEFT SUMMATION</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08B3</entry> + <entry>-</entry> + <entry>TOP VERTICAL SUMMATION CONNECTOR</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08B4</entry> + <entry>-</entry> + <entry>BOTTOM VERTICAL SUMMATION CONNECTOR</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08B5</entry> + <entry>-</entry> + <entry>TOP RIGHT SUMMATION</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08B6</entry> + <entry>-</entry> + <entry>BOTTOM RIGHT SUMMATION</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08B7</entry> + <entry>-</entry> + <entry>RIGHT MIDDLE SUMMATION</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08BC</entry> + <entry>U+2264</entry> + <entry>LESS THAN OR EQUAL SIGN</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08BD</entry> + <entry>U+2260</entry> + <entry>NOT EQUAL SIGN</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08BE</entry> + <entry>U+2265</entry> + <entry>GREATER THAN OR EQUAL SIGN</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08BF</entry> + <entry>U+222B</entry> + <entry>INTEGRAL</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08C0</entry> + <entry>U+2234</entry> + <entry>THEREFORE</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08C1</entry> + <entry>U+221D</entry> + <entry>VARIATION, PROPORTIONAL TO</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08C2</entry> + <entry>U+221E</entry> + <entry>INFINITY</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08C5</entry> + <entry>U+2207</entry> + <entry>NABLA, DEL</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08C8</entry> + <entry>U+223C</entry> + <entry>IS APPROXIMATE TO</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08C9</entry> + <entry>U+2243</entry> + <entry>SIMILAR OR EQUAL TO</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08CD</entry> + <entry>U+21D4</entry> + <entry>IF AND ONLY IF</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08CE</entry> + <entry>U+21D2</entry> + <entry>IMPLIES</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08CF</entry> + <entry>U+2261</entry> + <entry>IDENTICAL TO</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08D6</entry> + <entry>U+221A</entry> + <entry>RADICAL</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08DA</entry> + <entry>U+2282</entry> + <entry>IS INCLUDED IN</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08DB</entry> + <entry>U+2283</entry> + <entry>INCLUDES</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08DC</entry> + <entry>U+2229</entry> + <entry>INTERSECTION</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08DD</entry> + <entry>U+222A</entry> + <entry>UNION</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08DE</entry> + <entry>U+2227</entry> + <entry>LOGICAL AND</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08DF</entry> + <entry>U+2228</entry> + <entry>LOGICAL OR</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08EF</entry> + <entry>U+2202</entry> + <entry>PARTIAL DERIVATIVE</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08F6</entry> + <entry>U+0192</entry> + <entry>FUNCTION</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08FB</entry> + <entry>U+2190</entry> + <entry>LEFT ARROW</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08FC</entry> + <entry>U+2191</entry> + <entry>UPWARD ARROW</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08FD</entry> + <entry>U+2192</entry> + <entry>RIGHT ARROW</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x08FE</entry> + <entry>U+2193</entry> + <entry>DOWNWARD ARROW</entry> + <entry>Technical</entry> + </row> + <row rowsep="0"> + <entry>#x09DF</entry> + <entry>-</entry> + <entry>BLANK</entry> + <entry>Special</entry> + </row> + <row rowsep="0"> + <entry>#x09E0</entry> + <entry>U+25C6</entry> + <entry>SOLID DIAMOND</entry> + <entry>Special</entry> + </row> + <row rowsep="0"> + <entry>#x09E1</entry> + <entry>U+2592</entry> + <entry>CHECKERBOARD</entry> + <entry>Special</entry> + </row> + <row rowsep="0"> + <entry>#x09E2</entry> + <entry>U+2409</entry> + <entry>"HT"</entry> + <entry>Special</entry> + </row> + <row rowsep="0"> + <entry>#x09E3</entry> + <entry>U+240C</entry> + <entry>"FF"</entry> + <entry>Special</entry> + </row> + <row rowsep="0"> + <entry>#x09E4</entry> + <entry>U+240D</entry> + <entry>"CR"</entry> + <entry>Special</entry> + </row> + <row rowsep="0"> + <entry>#x09E5</entry> + <entry>U+240A</entry> + <entry>"LF"</entry> + <entry>Special</entry> + </row> + <row rowsep="0"> + <entry>#x09E8</entry> + <entry>U+2424</entry> + <entry>"NL"</entry> + <entry>Special</entry> + </row> + <row rowsep="0"> + <entry>#x09E9</entry> + <entry>U+240B</entry> + <entry>"VT"</entry> + <entry>Special</entry> + </row> + <row rowsep="0"> + <entry>#x09EA</entry> + <entry>U+2518</entry> + <entry>LOWER-RIGHT CORNER</entry> + <entry>Special</entry> + </row> + <row rowsep="0"> + <entry>#x09EB</entry> + <entry>U+2510</entry> + <entry>UPPER-RIGHT CORNER</entry> + <entry>Special</entry> + </row> + <row rowsep="0"> + <entry>#x09EC</entry> + <entry>U+250C</entry> + <entry>UPPER-LEFT CORNER</entry> + <entry>Special</entry> + </row> + <row rowsep="0"> + <entry>#x09ED</entry> + <entry>U+2514</entry> + <entry>LOWER-LEFT CORNER</entry> + <entry>Special</entry> + </row> + <row rowsep="0"> + <entry>#x09EE</entry> + <entry>U+253C</entry> + <entry>CROSSING-LINES</entry> + <entry>Special</entry> + </row> + <row rowsep="0"> + <entry>#x09EF</entry> + <entry>U+23BA</entry> + <entry>HORIZONTAL LINE, SCAN 1</entry> + <entry>Special</entry> + </row> + <row rowsep="0"> + <entry>#x09F0</entry> + <entry>U+23BB</entry> + <entry>HORIZONTAL LINE, SCAN 3</entry> + <entry>Special</entry> + </row> + <row rowsep="0"> + <entry>#x09F1</entry> + <entry>U+2500</entry> + <entry>HORIZONTAL LINE, SCAN 5</entry> + <entry>Special</entry> + </row> + <row rowsep="0"> + <entry>#x09F2</entry> + <entry>U+23BC</entry> + <entry>HORIZONTAL LINE, SCAN 7</entry> + <entry>Special</entry> + </row> + <row rowsep="0"> + <entry>#x09F3</entry> + <entry>U+23BD</entry> + <entry>HORIZONTAL LINE, SCAN 9</entry> + <entry>Special</entry> + </row> + <row rowsep="0"> + <entry>#x09F4</entry> + <entry>U+251C</entry> + <entry>LEFT "T"</entry> + <entry>Special</entry> + </row> + <row rowsep="0"> + <entry>#x09F5</entry> + <entry>U+2524</entry> + <entry>RIGHT "T"</entry> + <entry>Special</entry> + </row> + <row rowsep="0"> + <entry>#x09F6</entry> + <entry>U+2534</entry> + <entry>BOTTOM "T"</entry> + <entry>Special</entry> + </row> + <row rowsep="0"> + <entry>#x09F7</entry> + <entry>U+252C</entry> + <entry>TOP "T"</entry> + <entry>Special</entry> + </row> + <row rowsep="0"> + <entry>#x09F8</entry> + <entry>U+2502</entry> + <entry>VERTICAL BAR</entry> + <entry>Special</entry> + </row> + <row rowsep="0"> + <entry>#x0AA1</entry> + <entry>U+2003</entry> + <entry>EM SPACE</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AA2</entry> + <entry>U+2002</entry> + <entry>EN SPACE</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AA3</entry> + <entry>U+2004</entry> + <entry>3/EM SPACE</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AA4</entry> + <entry>U+2005</entry> + <entry>4/EM SPACE</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AA5</entry> + <entry>U+2007</entry> + <entry>DIGIT SPACE</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AA6</entry> + <entry>U+2008</entry> + <entry>PUNCTUATION SPACE</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AA7</entry> + <entry>U+2009</entry> + <entry>THIN SPACE</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AA8</entry> + <entry>U+200A</entry> + <entry>HAIR SPACE</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AA9</entry> + <entry>U+2014</entry> + <entry>EM DASH</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AAA</entry> + <entry>U+2013</entry> + <entry>EN DASH</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AAC</entry> + <entry>-</entry> + <entry>SIGNIFICANT BLANK SYMBOL</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AAE</entry> + <entry>U+2026</entry> + <entry>ELLIPSIS</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AAF</entry> + <entry>U+2025</entry> + <entry>DOUBLE BASELINE DOT</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AB0</entry> + <entry>U+2153</entry> + <entry>VULGAR FRACTION ONE THIRD</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AB1</entry> + <entry>U+2154</entry> + <entry>VULGAR FRACTION TWO THIRDS</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AB2</entry> + <entry>U+2155</entry> + <entry>VULGAR FRACTION ONE FIFTH</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AB3</entry> + <entry>U+2156</entry> + <entry>VULGAR FRACTION TWO FIFTHS</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AB4</entry> + <entry>U+2157</entry> + <entry>VULGAR FRACTION THREE FIFTHS</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AB5</entry> + <entry>U+2158</entry> + <entry>VULGAR FRACTION FOUR FIFTHS</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AB6</entry> + <entry>U+2159</entry> + <entry>VULGAR FRACTION ONE SIXTH</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AB7</entry> + <entry>U+215A</entry> + <entry>VULGAR FRACTION FIVE SIXTHS</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AB8</entry> + <entry>U+2105</entry> + <entry>CARE OF</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0ABB</entry> + <entry>U+2012</entry> + <entry>FIGURE DASH</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0ABC</entry> + <entry>-</entry> + <entry>LEFT ANGLE BRACKET</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0ABD</entry> + <entry>-</entry> + <entry>DECIMAL POINT</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0ABE</entry> + <entry>-</entry> + <entry>RIGHT ANGLE BRACKET</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0ABF</entry> + <entry>-</entry> + <entry>MARKER</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AC3</entry> + <entry>U+215B</entry> + <entry>VULGAR FRACTION ONE EIGHTH</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AC4</entry> + <entry>U+215C</entry> + <entry>VULGAR FRACTION THREE EIGHTHS</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AC5</entry> + <entry>U+215D</entry> + <entry>VULGAR FRACTION FIVE EIGHTHS</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AC6</entry> + <entry>U+215E</entry> + <entry>VULGAR FRACTION SEVEN EIGHTHS</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AC9</entry> + <entry>U+2122</entry> + <entry>TRADEMARK SIGN</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0ACA</entry> + <entry>-</entry> + <entry>SIGNATURE MARK</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0ACB</entry> + <entry>-</entry> + <entry>TRADEMARK SIGN IN CIRCLE</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0ACC</entry> + <entry>-</entry> + <entry>LEFT OPEN TRIANGLE</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0ACD</entry> + <entry>-</entry> + <entry>RIGHT OPEN TRIANGLE</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0ACE</entry> + <entry>-</entry> + <entry>EM OPEN CIRCLE</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0ACF</entry> + <entry>-</entry> + <entry>EM OPEN RECTANGLE</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AD0</entry> + <entry>U+2018</entry> + <entry>LEFT SINGLE QUOTATION MARK</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AD1</entry> + <entry>U+2019</entry> + <entry>RIGHT SINGLE QUOTATION MARK</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AD2</entry> + <entry>U+201C</entry> + <entry>LEFT DOUBLE QUOTATION MARK</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AD3</entry> + <entry>U+201D</entry> + <entry>RIGHT DOUBLE QUOTATION MARK</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AD4</entry> + <entry>U+211E</entry> + <entry>PRESCRIPTION, TAKE, RECIPE</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AD6</entry> + <entry>U+2032</entry> + <entry>MINUTES</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AD7</entry> + <entry>U+2033</entry> + <entry>SECONDS</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AD9</entry> + <entry>U+271D</entry> + <entry>LATIN CROSS</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0ADA</entry> + <entry>-</entry> + <entry>HEXAGRAM</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0ADB</entry> + <entry>-</entry> + <entry>FILLED RECTANGLE BULLET</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0ADC</entry> + <entry>-</entry> + <entry>FILLED LEFT TRIANGLE BULLET</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0ADD</entry> + <entry>-</entry> + <entry>FILLED RIGHT TRIANGLE BULLET</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0ADE</entry> + <entry>-</entry> + <entry>EM FILLED CIRCLE</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0ADF</entry> + <entry>-</entry> + <entry>EM FILLED RECTANGLE</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AE0</entry> + <entry>-</entry> + <entry>EN OPEN CIRCLE BULLET</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AE1</entry> + <entry>-</entry> + <entry>EN OPEN SQUARE BULLET</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AE2</entry> + <entry>-</entry> + <entry>OPEN RECTANGULAR BULLET</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AE3</entry> + <entry>-</entry> + <entry>OPEN TRIANGULAR BULLET UP</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AE4</entry> + <entry>-</entry> + <entry>OPEN TRIANGULAR BULLET DOWN</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AE5</entry> + <entry>-</entry> + <entry>OPEN STAR</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AE6</entry> + <entry>-</entry> + <entry>EN FILLED CIRCLE BULLET</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AE7</entry> + <entry>-</entry> + <entry>EN FILLED SQUARE BULLET</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AE8</entry> + <entry>-</entry> + <entry>FILLED TRIANGULAR BULLET UP</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AE9</entry> + <entry>-</entry> + <entry>FILLED TRIANGULAR BULLET DOWN</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AEA</entry> + <entry>-</entry> + <entry>LEFT POINTER</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AEB</entry> + <entry>-</entry> + <entry>RIGHT POINTER</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AEC</entry> + <entry>U+2663</entry> + <entry>CLUB</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AED</entry> + <entry>U+2666</entry> + <entry>DIAMOND</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AEE</entry> + <entry>U+2665</entry> + <entry>HEART</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AF0</entry> + <entry>U+2720</entry> + <entry>MALTESE CROSS</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AF1</entry> + <entry>U+2020</entry> + <entry>DAGGER</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AF2</entry> + <entry>U+2021</entry> + <entry>DOUBLE DAGGER</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AF3</entry> + <entry>U+2713</entry> + <entry>CHECK MARK, TICK</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AF4</entry> + <entry>U+2717</entry> + <entry>BALLOT CROSS</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AF5</entry> + <entry>U+266F</entry> + <entry>MUSICAL SHARP</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AF6</entry> + <entry>U+266D</entry> + <entry>MUSICAL FLAT</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AF7</entry> + <entry>U+2642</entry> + <entry>MALE SYMBOL</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AF8</entry> + <entry>U+2640</entry> + <entry>FEMALE SYMBOL</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AF9</entry> + <entry>U+260E</entry> + <entry>TELEPHONE SYMBOL</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AFA</entry> + <entry>U+2315</entry> + <entry>TELEPHONE RECORDER SYMBOL</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AFB</entry> + <entry>U+2117</entry> + <entry>PHONOGRAPH COPYRIGHT SIGN</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AFC</entry> + <entry>U+2038</entry> + <entry>CARET</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AFD</entry> + <entry>U+201A</entry> + <entry>SINGLE LOW QUOTATION MARK</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AFE</entry> + <entry>U+201E</entry> + <entry>DOUBLE LOW QUOTATION MARK</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0AFF</entry> + <entry>-</entry> + <entry>CURSOR</entry> + <entry>Publish</entry> + </row> + <row rowsep="0"> + <entry>#x0BA3</entry> + <entry>-</entry> + <entry>LEFT CARET</entry> + <entry>APL</entry> + </row> + <row rowsep="0"> + <entry>#x0BA6</entry> + <entry>-</entry> + <entry>RIGHT CARET</entry> + <entry>APL</entry> + </row> + <row rowsep="0"> + <entry>#x0BA8</entry> + <entry>-</entry> + <entry>DOWN CARET</entry> + <entry>APL</entry> + </row> + <row rowsep="0"> + <entry>#x0BA9</entry> + <entry>-</entry> + <entry>UP CARET</entry> + <entry>APL</entry> + </row> + <row rowsep="0"> + <entry>#x0BC0</entry> + <entry>-</entry> + <entry>OVERBAR</entry> + <entry>APL</entry> + </row> + <row rowsep="0"> + <entry>#x0BC2</entry> + <entry>U+22A5</entry> + <entry>DOWN TACK</entry> + <entry>APL</entry> + </row> + <row rowsep="0"> + <entry>#x0BC3</entry> + <entry>-</entry> + <entry>UP SHOE (CAP)</entry> + <entry>APL</entry> + </row> + <row rowsep="0"> + <entry>#x0BC4</entry> + <entry>U+230A</entry> + <entry>DOWN STILE</entry> + <entry>APL</entry> + </row> + <row rowsep="0"> + <entry>#x0BC6</entry> + <entry>-</entry> + <entry>UNDERBAR</entry> + <entry>APL</entry> + </row> + <row rowsep="0"> + <entry>#x0BCA</entry> + <entry>U+2218</entry> + <entry>JOT</entry> + <entry>APL</entry> + </row> + <row rowsep="0"> + <entry>#x0BCC</entry> + <entry>U+2395</entry> + <entry>QUAD</entry> + <entry>APL</entry> + </row> + <row rowsep="0"> + <entry>#x0BCE</entry> + <entry>U+22A4</entry> + <entry>UP TACK</entry> + <entry>APL</entry> + </row> + <row rowsep="0"> + <entry>#x0BCF</entry> + <entry>U+25CB</entry> + <entry>CIRCLE</entry> + <entry>APL</entry> + </row> + <row rowsep="0"> + <entry>#x0BD3</entry> + <entry>U+2308</entry> + <entry>UP STILE</entry> + <entry>APL</entry> + </row> + <row rowsep="0"> + <entry>#x0BD6</entry> + <entry>-</entry> + <entry>DOWN SHOE (CUP)</entry> + <entry>APL</entry> + </row> + <row rowsep="0"> + <entry>#x0BD8</entry> + <entry>-</entry> + <entry>RIGHT SHOE</entry> + <entry>APL</entry> + </row> + <row rowsep="0"> + <entry>#x0BDA</entry> + <entry>-</entry> + <entry>LEFT SHOE</entry> + <entry>APL</entry> + </row> + <row rowsep="0"> + <entry>#x0BDC</entry> + <entry>U+22A2</entry> + <entry>LEFT TACK</entry> + <entry>APL</entry> + </row> + <row rowsep="0"> + <entry>#x0BFC</entry> + <entry>U+22A3</entry> + <entry>RIGHT TACK</entry> + <entry>APL</entry> + </row> + <row rowsep="0"> + <entry>#x0CDF</entry> + <entry>U+2017</entry> + <entry>DOUBLE LOW LINE</entry> + <entry>Hebrew</entry> + </row> + <row rowsep="0"> + <entry>#x0CE0</entry> + <entry>U+05D0</entry> + <entry>HEBREW LETTER ALEF</entry> + <entry>Hebrew</entry> + </row> + <row rowsep="0"> + <entry>#x0CE1</entry> + <entry>U+05D1</entry> + <entry>HEBREW LETTER BET</entry> + <entry>Hebrew</entry> + </row> + <row rowsep="0"> + <entry>#x0CE2</entry> + <entry>U+05D2</entry> + <entry>HEBREW LETTER GIMEL</entry> + <entry>Hebrew</entry> + </row> + <row rowsep="0"> + <entry>#x0CE3</entry> + <entry>U+05D3</entry> + <entry>HEBREW LETTER DALET</entry> + <entry>Hebrew</entry> + </row> + <row rowsep="0"> + <entry>#x0CE4</entry> + <entry>U+05D4</entry> + <entry>HEBREW LETTER HE</entry> + <entry>Hebrew</entry> + </row> + <row rowsep="0"> + <entry>#x0CE5</entry> + <entry>U+05D5</entry> + <entry>HEBREW LETTER VAV</entry> + <entry>Hebrew</entry> + </row> + <row rowsep="0"> + <entry>#x0CE6</entry> + <entry>U+05D6</entry> + <entry>HEBREW LETTER ZAYIN</entry> + <entry>Hebrew</entry> + </row> + <row rowsep="0"> + <entry>#x0CE7</entry> + <entry>U+05D7</entry> + <entry>HEBREW LETTER HET</entry> + <entry>Hebrew</entry> + </row> + <row rowsep="0"> + <entry>#x0CE8</entry> + <entry>U+05D8</entry> + <entry>HEBREW LETTER TET</entry> + <entry>Hebrew</entry> + </row> + <row rowsep="0"> + <entry>#x0CE9</entry> + <entry>U+05D9</entry> + <entry>HEBREW LETTER YOD</entry> + <entry>Hebrew</entry> + </row> + <row rowsep="0"> + <entry>#x0CEA</entry> + <entry>U+05DA</entry> + <entry>HEBREW LETTER FINAL KAF</entry> + <entry>Hebrew</entry> + </row> + <row rowsep="0"> + <entry>#x0CEB</entry> + <entry>U+05DB</entry> + <entry>HEBREW LETTER KAF</entry> + <entry>Hebrew</entry> + </row> + <row rowsep="0"> + <entry>#x0CEC</entry> + <entry>U+05DC</entry> + <entry>HEBREW LETTER LAMED</entry> + <entry>Hebrew</entry> + </row> + <row rowsep="0"> + <entry>#x0CED</entry> + <entry>U+05DD</entry> + <entry>HEBREW LETTER FINAL MEM</entry> + <entry>Hebrew</entry> + </row> + <row rowsep="0"> + <entry>#x0CEE</entry> + <entry>U+05DE</entry> + <entry>HEBREW LETTER MEM</entry> + <entry>Hebrew</entry> + </row> + <row rowsep="0"> + <entry>#x0CEF</entry> + <entry>U+05DF</entry> + <entry>HEBREW LETTER FINAL NUN</entry> + <entry>Hebrew</entry> + </row> + <row rowsep="0"> + <entry>#x0CF0</entry> + <entry>U+05E0</entry> + <entry>HEBREW LETTER NUN</entry> + <entry>Hebrew</entry> + </row> + <row rowsep="0"> + <entry>#x0CF1</entry> + <entry>U+05E1</entry> + <entry>HEBREW LETTER SAMEKH</entry> + <entry>Hebrew</entry> + </row> + <row rowsep="0"> + <entry>#x0CF2</entry> + <entry>U+05E2</entry> + <entry>HEBREW LETTER AYIN</entry> + <entry>Hebrew</entry> + </row> + <row rowsep="0"> + <entry>#x0CF3</entry> + <entry>U+05E3</entry> + <entry>HEBREW LETTER FINAL PE</entry> + <entry>Hebrew</entry> + </row> + <row rowsep="0"> + <entry>#x0CF4</entry> + <entry>U+05E4</entry> + <entry>HEBREW LETTER PE</entry> + <entry>Hebrew</entry> + </row> + <row rowsep="0"> + <entry>#x0CF5</entry> + <entry>U+05E5</entry> + <entry>HEBREW LETTER FINAL TSADI</entry> + <entry>Hebrew</entry> + </row> + <row rowsep="0"> + <entry>#x0CF6</entry> + <entry>U+05E6</entry> + <entry>HEBREW LETTER TSADI</entry> + <entry>Hebrew</entry> + </row> + <row rowsep="0"> + <entry>#x0CF7</entry> + <entry>U+05E7</entry> + <entry>HEBREW LETTER QOF</entry> + <entry>Hebrew</entry> + </row> + <row rowsep="0"> + <entry>#x0CF8</entry> + <entry>U+05E8</entry> + <entry>HEBREW LETTER RESH</entry> + <entry>Hebrew</entry> + </row> + <row rowsep="0"> + <entry>#x0CF9</entry> + <entry>U+05E9</entry> + <entry>HEBREW LETTER SHIN</entry> + <entry>Hebrew</entry> + </row> + <row rowsep="0"> + <entry>#x0CFA</entry> + <entry>U+05EA</entry> + <entry>HEBREW LETTER TAV</entry> + <entry>Hebrew</entry> + </row> + <row rowsep="0"> + <entry>#x0DA1</entry> + <entry>U+0E01</entry> + <entry>THAI CHARACTER KO KAI</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DA2</entry> + <entry>U+0E02</entry> + <entry>THAI CHARACTER KHO KHAI</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DA3</entry> + <entry>U+0E03</entry> + <entry>THAI CHARACTER KHO KHUAT</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DA4</entry> + <entry>U+0E04</entry> + <entry>THAI CHARACTER KHO KHWAI</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DA5</entry> + <entry>U+0E05</entry> + <entry>THAI CHARACTER KHO KHON</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DA6</entry> + <entry>U+0E06</entry> + <entry>THAI CHARACTER KHO RAKHANG</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DA7</entry> + <entry>U+0E07</entry> + <entry>THAI CHARACTER NGO NGU</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DA8</entry> + <entry>U+0E08</entry> + <entry>THAI CHARACTER CHO CHAN</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DA9</entry> + <entry>U+0E09</entry> + <entry>THAI CHARACTER CHO CHING</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DAA</entry> + <entry>U+0E0A</entry> + <entry>THAI CHARACTER CHO CHANG</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DAB</entry> + <entry>U+0E0B</entry> + <entry>THAI CHARACTER SO SO</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DAC</entry> + <entry>U+0E0C</entry> + <entry>THAI CHARACTER CHO CHOE</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DAD</entry> + <entry>U+0E0D</entry> + <entry>THAI CHARACTER YO YING</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DAE</entry> + <entry>U+0E0E</entry> + <entry>THAI CHARACTER DO CHADA</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DAF</entry> + <entry>U+0E0F</entry> + <entry>THAI CHARACTER TO PATAK</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DB0</entry> + <entry>U+0E10</entry> + <entry>THAI CHARACTER THO THAN</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DB1</entry> + <entry>U+0E11</entry> + <entry>THAI CHARACTER THO NANGMONTHO</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DB2</entry> + <entry>U+0E12</entry> + <entry>THAI CHARACTER THO PHUTHAO</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DB3</entry> + <entry>U+0E13</entry> + <entry>THAI CHARACTER NO NEN</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DB4</entry> + <entry>U+0E14</entry> + <entry>THAI CHARACTER DO DEK</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DB5</entry> + <entry>U+0E15</entry> + <entry>THAI CHARACTER TO TAO</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DB6</entry> + <entry>U+0E16</entry> + <entry>THAI CHARACTER THO THUNG</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DB7</entry> + <entry>U+0E17</entry> + <entry>THAI CHARACTER THO THAHAN</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DB8</entry> + <entry>U+0E18</entry> + <entry>THAI CHARACTER THO THONG</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DB9</entry> + <entry>U+0E19</entry> + <entry>THAI CHARACTER NO NU</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DBA</entry> + <entry>U+0E1A</entry> + <entry>THAI CHARACTER BO BAIMAI</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DBB</entry> + <entry>U+0E1B</entry> + <entry>THAI CHARACTER PO PLA</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DBC</entry> + <entry>U+0E1C</entry> + <entry>THAI CHARACTER PHO PHUNG</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DBD</entry> + <entry>U+0E1D</entry> + <entry>THAI CHARACTER FO FA</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DBE</entry> + <entry>U+0E1E</entry> + <entry>THAI CHARACTER PHO PHAN</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DBF</entry> + <entry>U+0E1F</entry> + <entry>THAI CHARACTER FO FAN</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DC0</entry> + <entry>U+0E20</entry> + <entry>THAI CHARACTER PHO SAMPHAO</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DC1</entry> + <entry>U+0E21</entry> + <entry>THAI CHARACTER MO MA</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DC2</entry> + <entry>U+0E22</entry> + <entry>THAI CHARACTER YO YAK</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DC3</entry> + <entry>U+0E23</entry> + <entry>THAI CHARACTER RO RUA</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DC4</entry> + <entry>U+0E24</entry> + <entry>THAI CHARACTER RU</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DC5</entry> + <entry>U+0E25</entry> + <entry>THAI CHARACTER LO LING</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DC6</entry> + <entry>U+0E26</entry> + <entry>THAI CHARACTER LU</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DC7</entry> + <entry>U+0E27</entry> + <entry>THAI CHARACTER WO WAEN</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DC8</entry> + <entry>U+0E28</entry> + <entry>THAI CHARACTER SO SALA</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DC9</entry> + <entry>U+0E29</entry> + <entry>THAI CHARACTER SO RUSI</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DCA</entry> + <entry>U+0E2A</entry> + <entry>THAI CHARACTER SO SUA</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DCB</entry> + <entry>U+0E2B</entry> + <entry>THAI CHARACTER HO HIP</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DCC</entry> + <entry>U+0E2C</entry> + <entry>THAI CHARACTER LO CHULA</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DCD</entry> + <entry>U+0E2D</entry> + <entry>THAI CHARACTER O ANG</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DCE</entry> + <entry>U+0E2E</entry> + <entry>THAI CHARACTER HO NOKHUK</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DCF</entry> + <entry>U+0E2F</entry> + <entry>THAI CHARACTER PAIYANNOI</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DD0</entry> + <entry>U+0E30</entry> + <entry>THAI CHARACTER SARA A</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DD1</entry> + <entry>U+0E31</entry> + <entry>THAI CHARACTER MAI HAN-AKAT</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DD2</entry> + <entry>U+0E32</entry> + <entry>THAI CHARACTER SARA AA</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DD3</entry> + <entry>U+0E33</entry> + <entry>THAI CHARACTER SARA AM</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DD4</entry> + <entry>U+0E34</entry> + <entry>THAI CHARACTER SARA I</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DD5</entry> + <entry>U+0E35</entry> + <entry>THAI CHARACTER SARA II</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DD6</entry> + <entry>U+0E36</entry> + <entry>THAI CHARACTER SARA UE</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DD7</entry> + <entry>U+0E37</entry> + <entry>THAI CHARACTER SARA UEE</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DD8</entry> + <entry>U+0E38</entry> + <entry>THAI CHARACTER SARA U</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DD9</entry> + <entry>U+0E39</entry> + <entry>THAI CHARACTER SARA UU</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DDA</entry> + <entry>U+0E3A</entry> + <entry>THAI CHARACTER PHINTHU</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DDF</entry> + <entry>U+0E3F</entry> + <entry>THAI CURRENCY SYMBOL BAHT</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DE0</entry> + <entry>U+0E40</entry> + <entry>THAI CHARACTER SARA E</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DE1</entry> + <entry>U+0E41</entry> + <entry>THAI CHARACTER SARA AE</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DE2</entry> + <entry>U+0E42</entry> + <entry>THAI CHARACTER SARA O</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DE3</entry> + <entry>U+0E43</entry> + <entry>THAI CHARACTER SARA AI MAIMUAN</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DE4</entry> + <entry>U+0E44</entry> + <entry>THAI CHARACTER SARA AI MAIMALAI</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DE5</entry> + <entry>U+0E45</entry> + <entry>THAI CHARACTER LAKKHANGYAO</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DE6</entry> + <entry>U+0E46</entry> + <entry>THAI CHARACTER MAIYAMOK</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DE7</entry> + <entry>U+0E47</entry> + <entry>THAI CHARACTER MAITAIKHU</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DE8</entry> + <entry>U+0E48</entry> + <entry>THAI CHARACTER MAI EK</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DE9</entry> + <entry>U+0E49</entry> + <entry>THAI CHARACTER MAI THO</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DEA</entry> + <entry>U+0E4A</entry> + <entry>THAI CHARACTER MAI TRI</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DEB</entry> + <entry>U+0E4B</entry> + <entry>THAI CHARACTER MAI CHATTAWA</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DEC</entry> + <entry>U+0E4C</entry> + <entry>THAI CHARACTER THANTHAKHAT</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DED</entry> + <entry>U+0E4D</entry> + <entry>THAI CHARACTER NIKHAHIT</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DF0</entry> + <entry>U+0E50</entry> + <entry>THAI DIGIT ZERO</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DF1</entry> + <entry>U+0E51</entry> + <entry>THAI DIGIT ONE</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DF2</entry> + <entry>U+0E52</entry> + <entry>THAI DIGIT TWO</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DF3</entry> + <entry>U+0E53</entry> + <entry>THAI DIGIT THREE</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DF4</entry> + <entry>U+0E54</entry> + <entry>THAI DIGIT FOUR</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DF5</entry> + <entry>U+0E55</entry> + <entry>THAI DIGIT FIVE</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DF6</entry> + <entry>U+0E56</entry> + <entry>THAI DIGIT SIX</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DF7</entry> + <entry>U+0E57</entry> + <entry>THAI DIGIT SEVEN</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DF8</entry> + <entry>U+0E58</entry> + <entry>THAI DIGIT EIGHT</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0DF9</entry> + <entry>U+0E59</entry> + <entry>THAI DIGIT NINE</entry> + <entry>Thai</entry> + </row> + <row rowsep="0"> + <entry>#x0EA1</entry> + <entry>-</entry> + <entry>HANGUL KIYEOG</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EA2</entry> + <entry>-</entry> + <entry>HANGUL SSANG KIYEOG</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EA3</entry> + <entry>-</entry> + <entry>HANGUL KIYEOG SIOS</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EA4</entry> + <entry>-</entry> + <entry>HANGUL NIEUN</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EA5</entry> + <entry>-</entry> + <entry>HANGUL NIEUN JIEUJ</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EA6</entry> + <entry>-</entry> + <entry>HANGUL NIEUN HIEUH</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EA7</entry> + <entry>-</entry> + <entry>HANGUL DIKEUD</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EA8</entry> + <entry>-</entry> + <entry>HANGUL SSANG DIKEUD</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EA9</entry> + <entry>-</entry> + <entry>HANGUL RIEUL</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EAA</entry> + <entry>-</entry> + <entry>HANGUL RIEUL KIYEOG</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EAB</entry> + <entry>-</entry> + <entry>HANGUL RIEUL MIEUM</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EAC</entry> + <entry>-</entry> + <entry>HANGUL RIEUL PIEUB</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EAD</entry> + <entry>-</entry> + <entry>HANGUL RIEUL SIOS</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EAE</entry> + <entry>-</entry> + <entry>HANGUL RIEUL TIEUT</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EAF</entry> + <entry>-</entry> + <entry>HANGUL RIEUL PHIEUF</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EB0</entry> + <entry>-</entry> + <entry>HANGUL RIEUL HIEUH</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EB1</entry> + <entry>-</entry> + <entry>HANGUL MIEUM</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EB2</entry> + <entry>-</entry> + <entry>HANGUL PIEUB</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EB3</entry> + <entry>-</entry> + <entry>HANGUL SSANG PIEUB</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EB4</entry> + <entry>-</entry> + <entry>HANGUL PIEUB SIOS</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EB5</entry> + <entry>-</entry> + <entry>HANGUL SIOS</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EB6</entry> + <entry>-</entry> + <entry>HANGUL SSANG SIOS</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EB7</entry> + <entry>-</entry> + <entry>HANGUL IEUNG</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EB8</entry> + <entry>-</entry> + <entry>HANGUL JIEUJ</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EB9</entry> + <entry>-</entry> + <entry>HANGUL SSANG JIEUJ</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EBA</entry> + <entry>-</entry> + <entry>HANGUL CIEUC</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EBB</entry> + <entry>-</entry> + <entry>HANGUL KHIEUQ</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EBC</entry> + <entry>-</entry> + <entry>HANGUL TIEUT</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EBD</entry> + <entry>-</entry> + <entry>HANGUL PHIEUF</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EBE</entry> + <entry>-</entry> + <entry>HANGUL HIEUH</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EBF</entry> + <entry>-</entry> + <entry>HANGUL A</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EC0</entry> + <entry>-</entry> + <entry>HANGUL AE</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EC1</entry> + <entry>-</entry> + <entry>HANGUL YA</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EC2</entry> + <entry>-</entry> + <entry>HANGUL YAE</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EC3</entry> + <entry>-</entry> + <entry>HANGUL EO</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EC4</entry> + <entry>-</entry> + <entry>HANGUL E</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EC5</entry> + <entry>-</entry> + <entry>HANGUL YEO</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EC6</entry> + <entry>-</entry> + <entry>HANGUL YE</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EC7</entry> + <entry>-</entry> + <entry>HANGUL O</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EC8</entry> + <entry>-</entry> + <entry>HANGUL WA</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EC9</entry> + <entry>-</entry> + <entry>HANGUL WAE</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0ECA</entry> + <entry>-</entry> + <entry>HANGUL OE</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0ECB</entry> + <entry>-</entry> + <entry>HANGUL YO</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0ECC</entry> + <entry>-</entry> + <entry>HANGUL U</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0ECD</entry> + <entry>-</entry> + <entry>HANGUL WEO</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0ECE</entry> + <entry>-</entry> + <entry>HANGUL WE</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0ECF</entry> + <entry>-</entry> + <entry>HANGUL WI</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0ED0</entry> + <entry>-</entry> + <entry>HANGUL YU</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0ED1</entry> + <entry>-</entry> + <entry>HANGUL EU</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0ED2</entry> + <entry>-</entry> + <entry>HANGUL YI</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0ED3</entry> + <entry>-</entry> + <entry>HANGUL I</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0ED4</entry> + <entry>-</entry> + <entry>HANGUL JONG SEONG KIYEOG</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0ED5</entry> + <entry>-</entry> + <entry>HANGUL JONG SEONG SSANG KIYEOG</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0ED6</entry> + <entry>-</entry> + <entry>HANGUL JONG SEONG KIYEOG SIOS</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0ED7</entry> + <entry>-</entry> + <entry>HANGUL JONG SEONG NIEUN</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0ED8</entry> + <entry>-</entry> + <entry>HANGUL JONG SEONG NIEUN JIEUJ</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0ED9</entry> + <entry>-</entry> + <entry>HANGUL JONG SEONG NIEUN HIEUH</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EDA</entry> + <entry>-</entry> + <entry>HANGUL JONG SEONG DIKEUD</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EDB</entry> + <entry>-</entry> + <entry>HANGUL JONG SEONG RIEUL</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EDC</entry> + <entry>-</entry> + <entry>HANGUL JONG SEONG RIEUL KIYEOG</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EDD</entry> + <entry>-</entry> + <entry>HANGUL JONG SEONG RIEUL MIEUM</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EDE</entry> + <entry>-</entry> + <entry>HANGUL JONG SEONG RIEUL PIEUB</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EDF</entry> + <entry>-</entry> + <entry>HANGUL JONG SEONG RIEUL SIOS</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EE0</entry> + <entry>-</entry> + <entry>HANGUL JONG SEONG RIEUL TIEUT</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EE1</entry> + <entry>-</entry> + <entry>HANGUL JONG SEONG RIEUL PHIEUF</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EE2</entry> + <entry>-</entry> + <entry>HANGUL JONG SEONG RIEUL HIEUH</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EE3</entry> + <entry>-</entry> + <entry>HANGUL JONG SEONG MIEUM</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EE4</entry> + <entry>-</entry> + <entry>HANGUL JONG SEONG PIEUB</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EE5</entry> + <entry>-</entry> + <entry>HANGUL JONG SEONG PIEUB SIOS</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EE6</entry> + <entry>-</entry> + <entry>HANGUL JONG SEONG SIOS</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EE7</entry> + <entry>-</entry> + <entry>HANGUL JONG SEONG SSANG SIOS</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EE8</entry> + <entry>-</entry> + <entry>HANGUL JONG SEONG IEUNG</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EE9</entry> + <entry>-</entry> + <entry>HANGUL JONG SEONG JIEUJ</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EEA</entry> + <entry>-</entry> + <entry>HANGUL JONG SEONG CIEUC</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EEB</entry> + <entry>-</entry> + <entry>HANGUL JONG SEONG KHIEUQ</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EEC</entry> + <entry>-</entry> + <entry>HANGUL JONG SEONG TIEUT</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EED</entry> + <entry>-</entry> + <entry>HANGUL JONG SEONG PHIEUF</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EEE</entry> + <entry>-</entry> + <entry>HANGUL JONG SEONG HIEUH</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EEF</entry> + <entry>-</entry> + <entry>HANGUL RIEUL YEORIN HIEUH</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EF0</entry> + <entry>-</entry> + <entry>HANGUL SUNKYEONGEUM MIEUM</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EF1</entry> + <entry>-</entry> + <entry>HANGUL SUNKYEONGEUM PIEUB</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EF2</entry> + <entry>-</entry> + <entry>HANGUL PAN SIOS</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EF3</entry> + <entry>-</entry> + <entry>HANGUL KKOGJI DALRIN IEUNG</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EF4</entry> + <entry>-</entry> + <entry>HANGUL SUNKYEONGEUM PHIEUF</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EF5</entry> + <entry>-</entry> + <entry>HANGUL YEORIN HIEUH</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EF6</entry> + <entry>-</entry> + <entry>HANGUL ARAE A</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EF7</entry> + <entry>-</entry> + <entry>HANGUL ARAE AE</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EF8</entry> + <entry>-</entry> + <entry>HANGUL JONG SEONG PAN SIOS</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EF9</entry> + <entry>-</entry> + <entry>HANGUL JONG SEONG KKOGJI DALRIN IEUNG</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EFA</entry> + <entry>-</entry> + <entry>HANGUL JONG SEONG YEORIN HIEUH</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x0EFF</entry> + <entry>-</entry> + <entry>KOREAN WON</entry> + <entry>Korean</entry> + </row> + <row rowsep="0"> + <entry>#x13BC</entry> + <entry>U+0152</entry> + <entry>LATIN CAPITAL LIGATURE OE</entry> + <entry>Latin-9</entry> + </row> + <row rowsep="0"> + <entry>#x13BD</entry> + <entry>U+0153</entry> + <entry>LATIN SMALL LIGATURE OE</entry> + <entry>Latin-9</entry> + </row> + <row rowsep="0"> + <entry>#x13BE</entry> + <entry>U+0178</entry> + <entry>LATIN CAPITAL LETTER Y WITH DIAERESIS</entry> + <entry>Latin-9</entry> + </row> + <row rowsep="0"> + <entry>#x20A0</entry> + <entry>-</entry> + <entry>CURRENCY ECU SIGN</entry> + <entry>Currency</entry> + </row> + <row rowsep="0"> + <entry>#x20A1</entry> + <entry>-</entry> + <entry>CURRENCY COLON SIGN</entry> + <entry>Currency</entry> + </row> + <row rowsep="0"> + <entry>#x20A2</entry> + <entry>-</entry> + <entry>CURRENCY CRUZEIRO SIGN</entry> + <entry>Currency</entry> + </row> + <row rowsep="0"> + <entry>#x20A3</entry> + <entry>-</entry> + <entry>CURRENCY FRENCH FRANC SIGN</entry> + <entry>Currency</entry> + </row> + <row rowsep="0"> + <entry>#x20A4</entry> + <entry>-</entry> + <entry>CURRENCY LIRA SIGN</entry> + <entry>Currency</entry> + </row> + <row rowsep="0"> + <entry>#x20A5</entry> + <entry>-</entry> + <entry>CURRENCY MILL SIGN</entry> + <entry>Currency</entry> + </row> + <row rowsep="0"> + <entry>#x20A6</entry> + <entry>-</entry> + <entry>CURRENCY NAIRA SIGN</entry> + <entry>Currency</entry> + </row> + <row rowsep="0"> + <entry>#x20A7</entry> + <entry>-</entry> + <entry>CURRENCY PESETA SIGN</entry> + <entry>Currency</entry> + </row> + <row rowsep="0"> + <entry>#x20A8</entry> + <entry>-</entry> + <entry>CURRENCY RUPEE SIGN</entry> + <entry>Currency</entry> + </row> + <row rowsep="0"> + <entry>#x20A9</entry> + <entry>-</entry> + <entry>CURRENCY WON SIGN</entry> + <entry>Currency</entry> + </row> + <row rowsep="0"> + <entry>#x20AA</entry> + <entry>-</entry> + <entry>CURRENCY NEW SHEQEL SIGN</entry> + <entry>Currency</entry> + </row> + <row rowsep="0"> + <entry>#x20AB</entry> + <entry>-</entry> + <entry>CURRENCY DONG SIGN</entry> + <entry>Currency</entry> + </row> + <row rowsep="0"> + <entry>#x20AC</entry> + <entry>U+20AC</entry> + <entry>CURRENCY EURO SIGN</entry> + <entry>Currency</entry> + </row> + </tbody> + </tgroup> +</informaltable> + +</sect1> +</appendix> diff --git a/specs/sect1-9.xml b/specs/sect1-9.xml new file mode 100644 index 0000000..1cd3889 --- /dev/null +++ b/specs/sect1-9.xml @@ -0,0 +1,14737 @@ +<chapter> +<title>TITLE</title> +<sect1 id="acknowledgements"> +<title>Acknowledgements</title> +<para> +The primary contributers to the X11 protocol are: +</para> + +<itemizedlist> +<listitem><para>Dave Carver (Digital HPW)</para></listitem> +<listitem><para>Branko Gerovac (Digital HPW)</para></listitem> +<listitem><para>Jim Gettys (MIT/Project Athena, Digital)</para></listitem> +<listitem><para>Phil Karlton (Digital WSL)</para></listitem> +<listitem><para>Scott McGregor (Digital SSG)</para></listitem> +<listitem><para>Ram Rao (Digital UEG)</para></listitem> +<listitem><para>David Rosenthal (Sun)</para></listitem> +<listitem><para>Dave Winchell (Digital UEG)</para></listitem> +</itemizedlist> + +<para> +The implementors of initial server who provided useful +input are: +</para> + +<itemizedlist> +<listitem><para>Susan Angebranndt (Digital)</para></listitem> +<listitem><para>Raymond Drewry (Digital)</para></listitem> +<listitem><para>Todd Newman (Digital)</para></listitem> +</itemizedlist> + +<para> +The invited reviewers who provided useful input are: +</para> + +<itemizedlist> +<listitem><para>Andrew Cherenson (Berkeley)</para></listitem> +<listitem><para>Burns Fisher (Digital)</para></listitem> +<listitem><para>Dan Garfinkel (HP)</para></listitem> +<listitem><para>Leo Hourvitz (Next)</para></listitem> +<listitem><para>Brock Krizan (HP)</para></listitem> +<listitem><para>David Laidlaw (Stellar)</para></listitem> +<listitem><para>Dave Mellinger (Interleaf)</para></listitem> +<listitem><para>Ron Newman (MIT)</para></listitem> +<listitem><para>John Ousterhout (Berkeley)</para></listitem> +<listitem><para>Andrew Palay (ITC CMU)</para></listitem> +<listitem><para>Ralph Swick (MIT)</para></listitem> +<listitem><para>Craig Taylor (Sun)</para></listitem> +<listitem><para>Jeffery Vroom (Stellar)</para></listitem> +</itemizedlist> + +<para> +Thanks go to Al Mento of Digital's UEG Documentation Group for +formatting this document. +</para> + +<para> +This document does not attempt to provide the rationale or pragmatics required +to fully understand the protocol or to place it in perspective within a +complete system. +</para> + +<para> +The protocol contains many management mechanisms that are not intended for +normal applications. +Not all mechanisms are needed to build a particular user interface. +It is important to keep in mind that the protocol is intended to +provide mechanism, not policy. +</para> + +<para> +Robert W. Scheifler +</para> +<para> +X Consortium, Inc. +</para> +</sect1> + +<sect1 id="protocol_formats"> +<title>Protocol Formats</title> +<!-- .XS --> +<!-- (SN Protocol Formats --> +<!-- .XE --> +<!-- .SH --> +<para> +<emphasis role="bold">Request Format</emphasis> +</para> +<para> +Every request contains an 8-bit major opcode and a 16-bit length field +expressed in units of four bytes. +Every request consists of four bytes of a header +(containing the major opcode, the length field, and a data byte) +followed by zero or more additional bytes of data. +The length field defines the total length of the request, including the header. +The length field in a request must equal the minimum length required to contain +the request. +If the specified length is smaller or larger than the required length, +an error is generated. +Unused bytes in a request are not required to be zero. +Major opcodes 128 through 255 are reserved for extensions. +Extensions are intended to contain multiple requests, +so extension requests typically have an additional minor opcode encoded +in the second data byte in the request header. +However, the placement and interpretation of this minor opcode and of all +other fields in extension requests are not defined by the core protocol. +Every request on a given connection is implicitly assigned a sequence number, +starting with one, that is used in replies, errors, and events. +</para> +<para> +<emphasis role="bold">Reply Format</emphasis> +</para> +<para> +Every reply contains a 32-bit length field expressed in units of four bytes. +Every reply consists of 32 bytes followed by zero or more additional bytes of +data, as specified in the length field. +Unused bytes within a reply are not guaranteed to be zero. +Every reply also contains the least significant 16 bits of the sequence number +of the corresponding request. +</para> +<!-- .SH --> +<para> +<emphasis role="bold">Error Format</emphasis> +</para> +<para> +Error reports are 32 bytes long. +Every error includes an 8-bit error code. +Error codes 128 through 255 are reserved for extensions. +Every error also includes the major and minor opcodes of the failed request +and the least significant 16 bits of the sequence number of the request. +For the following errors (see section 4), +the failing resource ID is also returned: +<emphasis role='bold'>Colormap</emphasis>, +<emphasis role='bold'>Cursor</emphasis>, +<emphasis role='bold'>Drawable</emphasis>, +<emphasis role='bold'>Font</emphasis>, +<emphasis role='bold'>GContext</emphasis>, +<emphasis role='bold'>IDChoice</emphasis>, +<emphasis role='bold'>Pixmap</emphasis> +and +<emphasis role='bold'>Window</emphasis>. +For +<emphasis role='bold'>Atom</emphasis> +errors, the failing atom is returned. +For +<emphasis role='bold'>Value</emphasis> +errors, the failing value is returned. +Other core errors return no additional data. +Unused bytes within an error are not guaranteed to be zero. +</para> + +<para> +<emphasis role="bold">Event Format</emphasis> +</para> +<para> +<!-- .LP --> +Events are 32 bytes long. +Unused bytes within an event are not guaranteed to be zero. +Every event contains an 8-bit type code. +The most significant bit in this code is set if the event was generated from a +<emphasis role='bold'>SendEvent </emphasis> +request. +Event codes 64 through 127 are reserved for extensions, although the core +protocol does not define a mechanism for selecting interest in such events. +Every core event (with the exception of +<emphasis role='bold'>KeymapNotify ) </emphasis> +also contains the least significant 16 bits of the sequence number of the last +request issued by the client that was (or is currently being) processed by +the server. +</para> +</sect1> + +<sect1 id="syntactic_conventions"> +<title>Syntactic Conventions</title> +<!-- .XS --> +<!-- (SN Syntactic Conventions --> +<!-- .XE --> +<para> +<!-- .LP --> +The rest of this document uses the following syntactic conventions. +</para> +<itemizedlist> + <listitem> + <para> +The syntax {...} encloses a set of alternatives. + </para> + </listitem> + <listitem> + <para> +The syntax [...] encloses a set of structure components. + </para> + </listitem> + <listitem> + <para> +In general, TYPEs are in uppercase and +<emphasis role='bold'>AlternativeValues </emphasis> +are capitalized. + </para> + </listitem> + <listitem> + <para> +Requests in section 9 are described in the following format: <!-- xref --> + </para> + </listitem> + <listitem> + <para> +<literallayout class="monospaced"> +<emphasis role='bold'>RequestName</emphasis> + <emphasis remap='I'>arg1</emphasis>: type1 + ... + <emphasis remap='I'>argN</emphasis>: typeN + -> + result1: type1 + ... + resultM: typeM + + Errors: kind1, ..., kindK + + Description. +</literallayout> + </para> + </listitem> + <listitem> + <para> +If no -> is present in the description, +then the request has no reply (it is asynchronous), +although errors may still be reported. +If ->+ is used, +then one or more replies can be generated for a single request. + </para> + </listitem> + <listitem> + <para> +Events in section 11 are described in the following format: + </para> <!-- xref --> + </listitem> + <listitem> + <para> +<literallayout class="monospaced"> +<emphasis role='bold'>EventName</emphasis> + <emphasis remap='I'>value1</emphasis>: type1 + ... + <emphasis remap='I'>valueN</emphasis>: typeN + + Description. +</literallayout> + </para> + </listitem> +</itemizedlist> +</sect1> + +<sect1 id="common_types"> +<title>Common Types</title> +<!-- .XS --> +<!-- (SN Common Types --> +<!-- .XE --> +<informaltable frame="none"> + <tgroup cols='2' align='left'> + <colspec colname='c1' colwidth='1*' colsep="0"/> + <colspec colname='c2' colwidth='2*' colsep="0"/> + <thead> + <row rowsep="0"> + <entry>Name</entry> + <entry>Value</entry> + </row> + </thead> + <tbody> + <row rowsep="0"> + <entry>LISTofFOO</entry> + <entry> +A type name of the form LISTofFOO means a counted list of elements of type +FOO. +The size of the length field may vary (it is not necessarily the same +size as a FOO), and in some cases, it may be implicit. +It is fully specified in Appendix B. +Except where explicitly noted, +zero-length lists are legal. + </entry> + </row> + <row rowsep="0"> + <entry><para>BITMASK</para><para>LISTofVALUE</para></entry> + <entry> +<para> +The types BITMASK and LISTofVALUE are somewhat special. +Various requests contain arguments of the form: +</para> +<para> +<emphasis remap='I'>value-mask</emphasis>: BITMASK +</para> +<para> +<emphasis remap='I'>value-list</emphasis>: LISTofVALUE +</para> +<para> +These are used to allow the client to specify a subset of a heterogeneous +collection of optional arguments. +The value-mask specifies which arguments are to be provided; +each such argument is assigned a unique bit position. +The representation of the BITMASK will typically contain more bits than +there are defined arguments. +The unused bits in the value-mask must be zero (or the server generates a +<emphasis role='bold'>Value </emphasis> +error). +The value-list contains one value for each bit set to 1 in the mask, +from least significant to most significant bit in the mask. +Each value is represented with four bytes, +but the actual value occupies only the least significant bytes as required. +The values of the unused bytes do not matter. +</para> + </entry> + </row> + <row rowsep="0"> + <entry>OR</entry> + <entry> +A type of the form "T1 or ... or Tn" means the union of the indicated types. +A single-element type is given as the element without enclosing braces. + </entry> + </row> + <row rowsep="0"> + <entry>WINDOW</entry> + <entry>32-bit value (top three bits guaranteed to be zero)</entry> + </row> + <row rowsep="0"> + <entry>PIXMAP</entry> + <entry>32-bit value (top three bits guaranteed to be zero)</entry> + </row> + <row rowsep="0"> + <entry>CURSOR</entry> + <entry>32-bit value (top three bits guaranteed to be zero)</entry> + </row> + <row rowsep="0"> + <entry>FONT</entry> + <entry>32-bit value (top three bits guaranteed to be zero)</entry> + </row> + <row rowsep="0"> + <entry>GCONTEXT</entry> + <entry>32-bit value (top three bits guaranteed to be zero)</entry> + </row> + <row rowsep="0"> + <entry>COLORMAP</entry> + <entry>32-bit value (top three bits guaranteed to be zero)</entry> + </row> + <row rowsep="0"> + <entry>DRAWABLE</entry> + <entry>WINDOW or PIXMAP</entry> + </row> + <row rowsep="0"> + <entry>FONTABLE</entry> + <entry>FONT or GCONTEXT</entry> + </row> + <row rowsep="0"> + <entry>ATOM</entry> + <entry>32-bit value (top three bits guaranteed to be zero)</entry> + </row> + <row rowsep="0"> + <entry>VISUALID</entry> + <entry>32-bit value (top three bits guaranteed to be zero)</entry> + </row> + <row rowsep="0"> + <entry>VALUE</entry> + <entry>32-bit quantity (used only in LISTofVALUE)</entry> + </row> + <row rowsep="0"> + <entry>BYTE</entry> + <entry>8-bit value</entry> + </row> + <row rowsep="0"> + <entry>INT8</entry> + <entry>8-bit signed integer</entry> + </row> + <row rowsep="0"> + <entry>INT16</entry> + <entry>16-bit signed integer</entry> + </row> + <row rowsep="0"> + <entry>INT32</entry> + <entry>32-bit signed integer</entry> + </row> + <row rowsep="0"> + <entry>CARD8</entry> + <entry>8-bit unsigned integer</entry> + </row> + <row rowsep="0"> + <entry>CARD16</entry> + <entry>16-bit unsigned integer</entry> + </row> + <row rowsep="0"> + <entry>CARD32</entry> + <entry>32-bit unsigned integer</entry> + </row> + <row rowsep="0"> + <entry>TIMESTAMP</entry> + <entry>CARD32</entry> + </row> + <row rowsep="0"> + <entry>BITGRAVITY</entry> + <entry> +{ <emphasis role='bold'>Forget</emphasis>, +<emphasis role='bold'>Static</emphasis>, +<emphasis role='bold'>NorthWest</emphasis>, +<emphasis role='bold'>North</emphasis>, +<emphasis role='bold'>NorthEast</emphasis>, +<emphasis role='bold'>West</emphasis>, +<emphasis role='bold'>Center</emphasis>, +<emphasis role='bold'>East</emphasis>, +<emphasis role='bold'>SouthWest</emphasis>, +<emphasis role='bold'>South</emphasis>, +<emphasis role='bold'>SouthEast</emphasis> } + </entry> + </row> + <row rowsep="0"> + <entry>WINGRAVITY</entry> + <entry> +{ <emphasis role='bold'>Unmap</emphasis>, +<emphasis role='bold'>Static</emphasis>, +<emphasis role='bold'>NorthWest</emphasis>, +<emphasis role='bold'>North</emphasis>, +<emphasis role='bold'>NorthEast</emphasis>, +<emphasis role='bold'>West</emphasis>, +<emphasis role='bold'>Center</emphasis>, +<emphasis role='bold'>East</emphasis>, +<emphasis role='bold'>SouthWest</emphasis>, +<emphasis role='bold'>South</emphasis>, +<emphasis role='bold'>SouthEast</emphasis> } + </entry> + </row> + <row rowsep="0"> + <entry>BOOL</entry> + <entry> +{ <emphasis role='bold'>True</emphasis>, +<emphasis role='bold'>False</emphasis> } + </entry> + </row> + <row rowsep="0"> + <entry>EVENT</entry> + <entry> +{ <emphasis role='bold'>KeyPress</emphasis>, +<emphasis role='bold'>KeyRelease</emphasis>, +<emphasis role='bold'>OwnerGrabButton</emphasis>, +<emphasis role='bold'>ButtonPress</emphasis>, +<emphasis role='bold'>ButtonRelease</emphasis>, +<emphasis role='bold'>EnterWindow</emphasis>, +<emphasis role='bold'>LeaveWindow</emphasis>, +<emphasis role='bold'>PointerMotion</emphasis>, +<emphasis role='bold'>PointerMotionHint</emphasis>, +<emphasis role='bold'>Button1Motion</emphasis>, +<emphasis role='bold'>Button2Motion</emphasis>, +<emphasis role='bold'>Button3Motion</emphasis>, +<emphasis role='bold'>Button4Motion</emphasis>, +<emphasis role='bold'>Button5Motion</emphasis>, +<emphasis role='bold'>ButtonMotion</emphasis>, +<emphasis role='bold'>Exposure</emphasis>, +<emphasis role='bold'>VisibilityChange</emphasis>, +<emphasis role='bold'>StructureNotify</emphasis>, +<emphasis role='bold'>ResizeRedirect</emphasis>, +<emphasis role='bold'>SubstructureNotify</emphasis>, +<emphasis role='bold'>SubstructureRedirect</emphasis>, +<emphasis role='bold'>FocusChange</emphasis>, +<emphasis role='bold'>PropertyChange</emphasis>, +<emphasis role='bold'>ColormapChange</emphasis>, +<emphasis role='bold'>KeymapState</emphasis> } + </entry> + </row> + <row rowsep="0"> + <entry>POINTEREVENT</entry> + <entry> +{ <emphasis role='bold'>ButtonPress</emphasis>, +<emphasis role='bold'>ButtonRelease</emphasis>, +<emphasis role='bold'>EnterWindow</emphasis>, +<emphasis role='bold'>LeaveWindow</emphasis>, +<emphasis role='bold'>PointerMotion</emphasis>, +<emphasis role='bold'>PointerMotionHint</emphasis>, +<emphasis role='bold'>Button1Motion</emphasis>, +<emphasis role='bold'>Button2Motion</emphasis>, +<emphasis role='bold'>Button3Motion</emphasis>, +<emphasis role='bold'>Button4Motion</emphasis>, +<emphasis role='bold'>Button5Motion</emphasis>, +<emphasis role='bold'>ButtonMotion</emphasis>, +<emphasis role='bold'>KeymapState</emphasis> } + </entry> + </row> + <row rowsep="0"> + <entry>DEVICEEVENT</entry> + <entry> +{ <emphasis role='bold'>KeyPress</emphasis>, +<emphasis role='bold'>KeyRelease</emphasis>, +<emphasis role='bold'>ButtonPress</emphasis>, +<emphasis role='bold'>ButtonRelease</emphasis>, +<emphasis role='bold'>PointerMotion</emphasis>, +<emphasis role='bold'>Button1Motion</emphasis>, +<emphasis role='bold'>Button2Motion</emphasis>, +<emphasis role='bold'>Button3Motion</emphasis>, +<emphasis role='bold'>Button4Motion</emphasis>, +<emphasis role='bold'>Button5Motion</emphasis>, +<emphasis role='bold'>ButtonMotion</emphasis> } + </entry> + </row> + <row rowsep="0"> + <entry>KEYSYM</entry> + <entry>32-bit value (top three bits guaranteed to be zero)</entry> + </row> + <row rowsep="0"> + <entry>KEYCODE</entry> + <entry>CARD8</entry> + </row> + <row rowsep="0"> + <entry>BUTTON</entry> + <entry>CARD8</entry> + </row> + <row rowsep="0"> + <entry>KEYMASK</entry> + <entry> +{ <emphasis role='bold'>Shift</emphasis>, +<emphasis role='bold'>Lock</emphasis>, +<emphasis role='bold'>Control</emphasis>, +<emphasis role='bold'>Mod1</emphasis>, +<emphasis role='bold'>Mod2</emphasis>, +<emphasis role='bold'>Mod3</emphasis>, +<emphasis role='bold'>Mod4</emphasis>, +<emphasis role='bold'>Mod5</emphasis> } + </entry> + </row> + <row rowsep="0"> + <entry>BUTMASK</entry> + <entry> +{ <emphasis role='bold'>Button1</emphasis>, +<emphasis role='bold'>Button2</emphasis>, +<emphasis role='bold'>Button3</emphasis>, +<emphasis role='bold'>Button4</emphasis>, +<emphasis role='bold'>Button5</emphasis> } + </entry> + </row> + <row rowsep="0"> + <entry>KEYBUTMASK</entry> + <entry>KEYMASK or BUTMASK</entry> + </row> + <row rowsep="0"> + <entry>STRING8</entry> + <entry>LISTofCARD8</entry> + </row> + <row rowsep="0"> + <entry>STRING16</entry> + <entry>LISTofCHAR2B</entry> + </row> + <row rowsep="0"> + <entry>CHAR2B</entry> + <entry>[byte1, byte2: CARD8]</entry> + </row> + <row rowsep="0"> + <entry>POINT</entry> + <entry>[x, y: INT16]</entry> + </row> + <row rowsep="0"> + <entry>RECTANGLE</entry> + <entry> +<para>[x, y: INT16,</para> +<para>width, height: CARD16]</para> + </entry> + </row> + <row rowsep="0"> + <entry>ARC</entry> + <entry> +<para>[x, y: INT16,</para> +<para>width, height: CARD16,</para> +<para>angle1, angle2: INT16]</para> + </entry> + </row> + <row rowsep="0"> + <entry>HOST</entry> + <entry> +<para> +[family: +{ <emphasis role='bold'>Internet</emphasis>, +<emphasis role='bold'>InternetV6</emphasis>, +<emphasis role='bold'>ServerInterpreted</emphasis>, +<emphasis role='bold'>DECnet</emphasis>, +<emphasis role='bold'>Chaos</emphasis> } +</para> +<para>address: LISTofBYTE]</para> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> + +<para> +The [x,y] coordinates of a RECTANGLE specify the upper-left corner. +</para> + +<para> +The primary interpretation of large characters in a STRING16 is that they +are composed of two bytes used to index a two-dimensional matrix, +hence, the use of CHAR2B rather than CARD16. +This corresponds to the JIS/ISO method of indexing 2-byte characters. +It is expected that most large fonts will be defined with 2-byte +matrix indexing. +For large fonts constructed with linear indexing, +a CHAR2B can be interpreted as a 16-bit number by treating byte1 as +the most significant byte. +This means that clients should always transmit such +16-bit character values most significant byte first, as the server will never +byte-swap CHAR2B quantities. +</para> + +<para> +The length, format, and interpretation of a HOST address are specific to the +family (see +<emphasis role='bold'>ChangeHosts </emphasis> +request). +</para> +</sect1> + +<sect1 id="errors"> +<title>Errors</title> +<!-- .XS --> +<!-- (SN Errors --> +<!-- .XE --> +<para> +<!-- .LP --> +In general, when a request terminates with an error, +the request has no side effects (that is, there is no partial execution). +The only requests for which this is not true are +<emphasis role='bold'>ChangeWindowAttributes</emphasis> +<emphasis role='bold'>ChangeGC</emphasis>, +<emphasis role='bold'>PolyText8</emphasis>, +<emphasis role='bold'>PolyText16</emphasis>, +<emphasis role='bold'>FreeColors</emphasis>, +<emphasis role='bold'>StoreColors</emphasis> +and +<emphasis role='bold'>ChangeKeyboardControl</emphasis>. +</para> + +<para> +The following error codes result from various requests as follows: +</para> + +<informaltable frame="none"> + <tgroup cols='2' align='left'> + <colspec colname='c1' colwidth='1*' colsep="0"/> + <colspec colname='c2' colwidth='2*' colsep="0"/> + <thead> + <row rowsep="0"> + <entry>Error</entry> + <entry>Description</entry> + </row> + </thead> + <tbody> + <row rowsep="0"> + <entry><emphasis role='bold'>Access</emphasis></entry> + <entry> +An attempt is made to grab a key/button combination already grabbed by another +client. +An attempt is made to free a colormap entry not allocated by the client +or to free an entry in a colormap that was created with all entries writable. +An attempt is made to store into a read-only or an unallocated colormap entry. +An attempt is made to modify the access control list from other than the local +host (or otherwise authorized client). +An attempt is made to select an event type that only one client can +select at a time when another client has already selected it. + </entry> + </row> + <row rowsep="0"> + <entry><emphasis role='bold'>Alloc</emphasis></entry> + <entry> +The server failed to allocate the requested resource. +Note that the explicit listing of +<emphasis role='bold'>Alloc</emphasis> +errors in request only covers allocation errors at a very coarse level +and is not intended to cover all cases +of a server running out of allocation space in the middle of service. +The semantics when a server runs out of allocation space are left unspecified, +but a server may generate an +<emphasis role='bold'>Alloc</emphasis> +error on any request for this reason, +and clients should be prepared to receive such errors and handle +or discard them. + </entry> + </row> + <row rowsep="0"> + <entry><emphasis role='bold'>Atom</emphasis></entry> + <entry> +A value for an ATOM argument does not name a defined ATOM. + </entry> + </row> + <row rowsep="0"> + <entry><emphasis role='bold'>Colormap</emphasis></entry> + <entry> +A value for a COLORMAP argument does not name a defined COLORMAP. + </entry> + </row> + <row rowsep="0"> + <entry><emphasis role='bold'>Cursor</emphasis></entry> + <entry> +A value for a CURSOR argument does not name a defined CURSOR. + </entry> + </row> + <row rowsep="0"> + <entry><emphasis role='bold'>Drawable</emphasis></entry> + <entry> +A value for a DRAWABLE argument does not name a defined WINDOW +or PIXMAP. + </entry> + </row> + <row rowsep="0"> + <entry><emphasis role='bold'>Font</emphasis></entry> + <entry> +A value for a FONT argument does not name a defined FONT. +A value for a FONTABLE argument does not name a defined FONT or a +defined GCONTEXT. + </entry> + </row> + <row rowsep="0"> + <entry><emphasis role='bold'>GContext</emphasis></entry> + <entry> +A value for a GCONTEXT argument does not name a defined GCONTEXT. + </entry> + </row> + <row rowsep="0"> + <entry><emphasis role='bold'>IDChoice</emphasis></entry> + <entry> +The value chosen for a resource identifier either is not included +in the range assigned to the client or is already in use. + </entry> + </row> + <row rowsep="0"> + <entry><emphasis role='bold'>Implementation</emphasis></entry> + <entry> +The server does not implement some aspect of the request. +A server that generates this error for a core request is deficient. +As such, this error is not listed for any of the requests, +but clients should be prepared to receive such errors +and handle or discard them. + </entry> + </row> + <row rowsep="0"> + <entry><emphasis role='bold'>Length</emphasis></entry> + <entry> +The length of a request is shorter or longer than that required +to minimally contain the arguments. +The length of a request exceeds the maximum length accepted by the +server. + </entry> + </row> + <row rowsep="0"> + <entry><emphasis role='bold'>Match</emphasis></entry> + <entry> +An +<emphasis role='bold'>InputOnly </emphasis> +window is used as a DRAWABLE. +In a graphics request, the GCONTEXT argument does not have the same +root and depth as the destination DRAWABLE argument. +Some argument (or pair of arguments) has the correct type and range, +but it fails to match in some other way required by the request. + </entry> + </row> + <row rowsep="0"> + <entry><emphasis role='bold'>Name</emphasis></entry> + <entry> +A font or color of the specified name does not exist. + </entry> + </row> + <row rowsep="0"> + <entry><emphasis role='bold'>Pixmap</emphasis></entry> + <entry> +A value for a PIXMAP argument does not name a defined PIXMAP. + </entry> + </row> + <row rowsep="0"> + <entry><emphasis role='bold'>Request</emphasis></entry> + <entry> +The major or minor opcode does not specify a valid request. + </entry> + </row> + <row rowsep="0"> + <entry><emphasis role='bold'>Value</emphasis></entry> + <entry> +Some numeric value falls outside the range of values accepted by the request. +Unless a specific range is specified for an argument, +the full range defined by the argument's type is accepted. +Any argument defined as a set of alternatives typically can generate +this error (due to the encoding). + </entry> + </row> + <row rowsep="0"> + <entry><emphasis role='bold'>Window</emphasis></entry> + <entry> +A value for a WINDOW argument does not name a defined WINDOW. + </entry> + </row> + </tbody> + </tgroup> +</informaltable> + +<note><para> +The +<emphasis role='bold'>Atom</emphasis>, +<emphasis role='bold'>Colormap</emphasis>, +<emphasis role='bold'>Cursor</emphasis>, +<emphasis role='bold'>Drawable</emphasis>, +<emphasis role='bold'>Font</emphasis>, +<emphasis role='bold'>GContext</emphasis>, +<emphasis role='bold'>Pixmap</emphasis> +and +<emphasis role='bold'>Window</emphasis> +errors are also used when the argument type is extended by union with a +set of fixed alternatives, for example, <WINDOW or +<emphasis role='bold'>PointerRoot</emphasis> +or +<emphasis role='bold'>None ></emphasis>. +</para></note> +</sect1> + +<sect1 id="keyboards"> +<title>Keyboards</title> +<!-- .XS --> +<!-- (SN Keyboards --> +<!-- .XE --> +<para> +A KEYCODE represents a physical (or logical) key. +Keycodes lie in the inclusive range [8,255]. +A keycode value carries no intrinsic information, +although server implementors may attempt to encode geometry information +(for example, matrix) to be interpreted in a server-dependent fashion. +The mapping between keys and keycodes cannot be changed using the +protocol. +</para> +<para> +A KEYSYM is an encoding of a symbol on the cap of a key. +The set of defined KEYSYMs include the character sets Latin-1, Latin-2, +Latin-3, Latin-4, Kana, Arabic, Cyrillic, Greek, Tech, Special, Publish, APL, +Hebrew, Thai, and Korean as well as a set of symbols common on keyboards +(Return, Help, Tab, +and so on). +KEYSYMs with the most significant bit (of the 29 bits) set are reserved +as vendor-specific. +</para> +<para> +A list of KEYSYMs is associated with each KEYCODE. +The list is intended to convey the set of symbols on the corresponding key. +If the list (ignoring trailing +<emphasis role='bold'>NoSymbol</emphasis> +entries) is a single KEYSYM "<emphasis remap='I'>K</emphasis>", +then the list is treated as if it were +the list "<emphasis remap='I'>K</emphasis> NoSymbol +<emphasis remap='I'>K</emphasis> NoSymbol". +If the list (ignoring trailing NoSymbol entries) is a pair of KEYSYMs +"<emphasis remap='I'>K1 K2</emphasis>", then the list is treated as +if it were the list +"<emphasis remap='I'>K1 K2 K1 K2</emphasis>". +If the list (ignoring trailing +<emphasis role='bold'>NoSymbol </emphasis> +entries) is +a triple of KEYSYMs "<emphasis remap='I'>K1 K2 K3</emphasis>", +then the list is treated as if it were the list " +<emphasis remap='I'>K1 K2 K3</emphasis> NoSymbol". +When an explicit "void" element is desired in the list, +the value +<emphasis role='bold'>VoidSymbol </emphasis> +can be used. +</para> +<para> +<!-- .LP --> +The first four elements of the list are split into two groups of KEYSYMs. +Group 1 contains the first and second KEYSYMs, Group 2 contains the third and +fourth KEYSYMs. +Within each group, +if the second element of the group is +<emphasis role='bold'>NoSymbol , </emphasis> +then the group should be treated as if the second element were the +same as the first element, except when the first element is an alphabetic +KEYSYM "<emphasis remap='I'>K</emphasis>" for which both lowercase +and uppercase forms are defined. +In that case, the group should be treated as if the first element were the +lowercase form of "<emphasis remap='I'>K</emphasis>" and the second +element were the uppercase form +of "<emphasis remap='I'>K</emphasis>". +</para> + +<para> +The standard rules for obtaining a KEYSYM from a +<emphasis role='bold'>KeyPress </emphasis> +event make use of only the Group 1 and Group 2 KEYSYMs; no interpretation of +other KEYSYMs in the list is defined. The modifier state determines which +group to use. Switching between groups is controlled by the KEYSYM named +MODE SWITCH, by attaching that KEYSYM to some KEYCODE and attaching that +KEYCODE to any one of the modifiers +<emphasis role='bold'>Mod1 </emphasis> +through +<emphasis role='bold'>Mod5 . </emphasis> +This modifier is +called the "group modifier". For any KEYCODE, Group 1 is used when the +group modifier is off, and Group 2 is used when the group modifier is on. +</para> + +<para> +The +<emphasis role='bold'>Lock </emphasis> +modifier is interpreted as CapsLock when the KEYSYM named CAPS +LOCK is attached to some KEYCODE and that KEYCODE is attached to the +<emphasis role='bold'>Lock </emphasis> +modifier. The +<emphasis role='bold'>Lock </emphasis> +modifier is interpreted as ShiftLock when the KEYSYM +named SHIFT LOCK is attached to some KEYCODE and that KEYCODE is attached +to the +<emphasis role='bold'>Lock </emphasis> +modifier. If the +<emphasis role='bold'>Lock </emphasis> +modifier could be interpreted as both +CapsLock and ShiftLock, the CapsLock interpretation is used. +</para> + +<para> +<!-- .LP --> +The operation of "keypad" keys is controlled by the KEYSYM named NUM LOCK, +by attaching that KEYSYM to some KEYCODE and attaching that KEYCODE to any +one of the modifiers +<emphasis role='bold'>Mod1 </emphasis> +through +<emphasis role='bold'>Mod5 . </emphasis> +This modifier is called the +"numlock modifier". The standard KEYSYMs with the prefix KEYPAD in their +name are called "keypad" KEYSYMs; these are KEYSYMS with numeric value in +the hexadecimal range #xFF80 to #xFFBD inclusive. In addition, +vendor-specific KEYSYMS in the hexadecimal range #x11000000 to #x1100FFFF +are also keypad KEYSYMs. +</para> +<para> +<!-- .LP --> +Within a group, the choice of KEYSYM is determined by applying the first +rule that is satisfied from the following list: +</para> + +<itemizedlist> + <listitem> + <para> +The numlock modifier is on and the second KEYSYM is a keypad KEYSYM. In +this case, if the +<emphasis role='bold'>Shift </emphasis> +modifier is on, or if the +<emphasis role='bold'>Lock </emphasis> +modifier is on and +is interpreted as ShiftLock, then the first KEYSYM is used; otherwise, the +second KEYSYM is used. + </para> + </listitem> + <listitem> + <para> +The +<emphasis role='bold'>Shift </emphasis> +and +<emphasis role='bold'>Lock </emphasis> +modifiers are both off. In this case, the first +KEYSYM is used. + </para> + </listitem> + <listitem> + <para> +The +<emphasis role='bold'>Shift </emphasis> +modifier is off, and the +<emphasis role='bold'>Lock </emphasis> +modifier is on and is +interpreted as CapsLock. In this case, the first KEYSYM is used, but if +that KEYSYM is lowercase alphabetic, then the corresponding uppercase +KEYSYM is used instead. + </para> + </listitem> + <listitem> + <para> +The +<emphasis role='bold'>Shift </emphasis> +modifier is on, and the +<emphasis role='bold'>Lock </emphasis> +modifier is on and is interpreted +as CapsLock. In this case, the second KEYSYM is used, but if that KEYSYM +is lowercase alphabetic, then the corresponding uppercase KEYSYM is used +instead. + </para> + </listitem> + <listitem> + <para> +The +<emphasis role='bold'>Shift </emphasis> +modifier is on, or the +<emphasis role='bold'>Lock </emphasis> +modifier is on and is interpreted +as ShiftLock, or both. In this case, the second KEYSYM is used. + </para> + </listitem> +</itemizedlist> + +<para> +<!-- .LP --> +The mapping between KEYCODEs and KEYSYMs is not used directly by the server; +it is merely stored for reading and writing by clients. +</para> +</sect1> + +<sect1 id="pointers"> +<title>Pointers</title> +<!-- .XS --> +<!-- (SN Pointers --> +<!-- .XE --> +<para> +Buttons are always numbered starting with one. +</para> +</sect1> + +<sect1 id="predefined_atoms"> +<title>Predefined Atoms</title> +<!-- .XS --> +<!-- (SN Predefined Atoms --> +<!-- .XE --> +<para> +<!-- .LP --> +Predefined atoms are not strictly necessary and may not be useful in all +environments, but they will eliminate many +<emphasis role='bold'>InternAtom </emphasis> +requests in most applications. +Note that they are predefined only in the sense of having numeric values, +not in the sense of having required semantics. +The core protocol imposes no semantics on these names, +but semantics are specified in other X Window System standards, +such as the +<emphasis remap='I'>Inter-Client Communication Conventions Manual</emphasis> +and the <emphasis remap='I'>X Logical Font Description Conventions</emphasis>. +</para> + +<para> +The following names have predefined atom values. +Note that uppercase and lowercase matter. +</para> + +<informaltable frame="none"> + <tgroup cols='3' align='left'> + <colspec colname='c1' colsep="0"/> + <colspec colname='c2' colsep="0"/> + <colspec colname='c3' colsep="0"/> + <tbody> + <row rowsep="0"> + <entry>ARC</entry> + <entry>ITALIC_ANGLE</entry> + <entry>STRING</entry> + </row> + <row rowsep="0"> + <entry>ATOM</entry> + <entry>MAX_SPACE</entry> + <entry>SUBSCRIPT_X</entry> + </row> + <row rowsep="0"> + <entry>BITMAP</entry> + <entry>MIN_SPACE</entry> + <entry>SUBSCRIPT_Y</entry> + </row> + <row rowsep="0"> + <entry>CAP_HEIGHT</entry> + <entry>NORM_SPACE</entry> + <entry>SUPERSCRIPT_X</entry> + </row> + <row rowsep="0"> + <entry>CARDINAL</entry> + <entry>NOTICE</entry> + <entry>SUPERSCRIPT_Y</entry> + </row> + <row rowsep="0"> + <entry>COLORMAP</entry> + <entry>PIXMAP</entry> + <entry>UNDERLINE_POSITION</entry> + </row> + <row rowsep="0"> + <entry>COPYRIGHT</entry> + <entry>POINT</entry> + <entry>UNDERLINE_THICKNESS</entry> + </row> + <row rowsep="0"> + <entry>CURSOR</entry> + <entry>POINT_SIZE</entry> + <entry>VISUALID</entry> + </row> + <row rowsep="0"> + <entry>CUT_BUFFER0</entry> + <entry>PRIMARY</entry> + <entry>WEIGHT</entry> + </row> + <row rowsep="0"> + <entry>CUT_BUFFER1</entry> + <entry>QUAD_WIDTH</entry> + <entry>WINDOW</entry> + </row> + <row rowsep="0"> + <entry>CUT_BUFFER2</entry> + <entry>RECTANGLE</entry> + <entry>WM_CLASS</entry> + </row> + <row rowsep="0"> + <entry>CUT_BUFFER3</entry> + <entry>RESOLUTION</entry> + <entry>WM_CLIENT_MACHINE</entry> + </row> + <row rowsep="0"> + <entry>CUT_BUFFER4</entry> + <entry>RESOURCE_MANAGER</entry> + <entry>WM_COMMAND</entry> + </row> + <row rowsep="0"> + <entry>CUT_BUFFER5</entry> + <entry>RGB_BEST_MAP</entry> + <entry>WM_HINTS</entry> + </row> + <row rowsep="0"> + <entry>CUT_BUFFER6</entry> + <entry>RGB_BLUE_MAP</entry> + <entry>WM_ICON_NAME</entry> + </row> + <row rowsep="0"> + <entry>CUT_BUFFER7</entry> + <entry>RGB_COLOR_MAP</entry> + <entry>WM_ICON_SIZE</entry> + </row> + <row rowsep="0"> + <entry>DRAWABLE</entry> + <entry>RGB_DEFAULT_MAP</entry> + <entry>WM_NAME</entry> + </row> + <row rowsep="0"> + <entry>END_SPACE</entry> + <entry>RGB_GRAY_MAP</entry> + <entry>WM_NORMAL_HINTS</entry> + </row> + <row rowsep="0"> + <entry>FAMILY_NAME</entry> + <entry>RGB_GREEN_MAP</entry> + <entry>WM_SIZE_HINTS</entry> + </row> + <row rowsep="0"> + <entry>FONT</entry> + <entry>RGB_RED_MAP</entry> + <entry>WM_TRANSIENT_FOR</entry> + </row> + <row rowsep="0"> + <entry>FONT_NAME</entry> + <entry>SECONDARY</entry> + <entry>WM_ZOOM_HINTS</entry> + </row> + <row rowsep="0"> + <entry>FULL_NAME</entry> + <entry>STRIKEOUT_ASCENT</entry> + <entry>X_HEIGHT</entry> + </row> + <row rowsep="0"> + <entry>INTEGER</entry> + <entry></entry> + <entry>STRIKEOUT_DESCENT</entry> + </row> + </tbody> + </tgroup> +</informaltable> + +<para> +<!-- .LP --> +To avoid conflicts with possible future names for which semantics might be +imposed (either at the protocol level or in terms of higher level user +interface models), +names beginning with an underscore should be used for atoms +that are private to a particular vendor or organization. +To guarantee no conflicts between vendors and organizations, +additional prefixes need to be used. +However, the protocol does not define the mechanism for choosing such prefixes. +For names private to a single application or end user but stored in globally +accessible locations, +it is suggested that two leading underscores be used to avoid conflicts with +other names. +</para> +</sect1> + +<sect1 id="connection_setup"> +<title>Connection Setup</title> +<!-- .XS --> +<!-- (SN Connection Setup --> +<!-- .XE --> +<para> +For remote clients, +the X protocol can be built on top of any reliable byte stream. +</para> + +<para> +<emphasis role="bold">Connection Initiation</emphasis> +</para> + +<para> +<!-- .LP --> +The client must send an initial byte of data to identify the byte order to be +employed. +The value of the byte must be octal 102 or 154. +The value 102 (ASCII uppercase B) means values are transmitted most significant +byte first, and value 154 (ASCII lowercase l) means values are transmitted +least significant byte first. +Except where explicitly noted in the protocol, +all 16-bit and 32-bit quantities sent by the client must be transmitted with +this byte order, +and all 16-bit and 32-bit quantities returned by the server will be transmitted +with this byte order. +</para> +<para> +Following the byte-order byte, +the client sends the following information at connection setup: +</para> +<blockquote> + <para> +protocol-major-version: CARD16 + </para> + <para> +protocol-minor-version: CARD16 + </para> + <para> +authorization-protocol-name: STRING8 + </para> + <para> +authorization-protocol-data: STRING8 + </para> +</blockquote> +<para> +The version numbers indicate what version of the protocol the client +expects the server to implement. +</para> +<para> +The authorization name indicates what authorization (and authentication) +protocol the client +expects the server to use, and the data is specific to that protocol. +Specification of valid authorization mechanisms is not part of the core +X protocol. +A server that does not implement the protocol the client expects +or that only implements the host-based mechanism may simply ignore this +information. +If both name and data strings are empty, +this is to be interpreted as "no explicit authorization." +</para> +<para> +<emphasis role="bold">Server Response</emphasis> +</para> + +<para> +The client receives the following information at connection setup: +</para> + +<itemizedlist> + <listitem> + <para> +success: +{ <emphasis role='bold'>Failed</emphasis>, +<emphasis role='bold'>Success</emphasis>, +<emphasis role='bold'>Authenticate</emphasis>} + </para> + </listitem> +</itemizedlist> + +<para> +The client receives the following additional data if the returned success +value is +<emphasis role='bold'>Failed</emphasis>, +and the connection is not successfully established: +</para> + +<blockquote> + <para> +protocol-major-version: CARD16 + </para> + <para> +protocol-minor-version: CARD16 + </para> + <para> +reason: STRING8 + </para> +</blockquote> + +<para> +The client receives the following additional data if the returned success +value is +<emphasis role='bold'>Authenticate</emphasis>, +and further authentication negotiation is required: +</para> + +<blockquote> + <para> +reason: STRING8 + </para> +</blockquote> + +<para> +The contents of the reason string are specific to the authorization +protocol in use. The semantics of this authentication negotiation are +not constrained, except that the negotiation must eventually terminate +with a reply from the server containing a success value of +<emphasis role='bold'>Failed</emphasis> +or +<emphasis role='bold'>Success</emphasis>. +</para> + +<para> +The client receives the following additional data if the returned success +value is +<emphasis role='bold'>Success ,</emphasis> +and the connection is successfully established: +</para> + +<blockquote> + <para> +protocol-major-version: CARD16 + </para> + <para> +<!-- .br --> +protocol-minor-version: CARD16 + </para> + <para> +<!-- .br --> +vendor: STRING8 + </para> + <para> +<!-- .br --> +release-number: CARD32 + </para> + <para> +<!-- .br --> +resource-id-base, resource-id-mask: CARD32 + </para> + <para> +<!-- .br --> +image-byte-order: +{ <emphasis role='bold'>LSBFirst</emphasis>, +<emphasis role='bold'>MSBFirst</emphasis> } + </para> + <para> +<!-- .br --> +bitmap-scanline-unit: {8, 16, 32} + </para> + <para> +<!-- .br --> +bitmap-scanline-pad: {8, 16, 32} + </para> + <para> +<!-- .br --> +bitmap-bit-order: +{ <emphasis role='bold'>LeastSignificant</emphasis>, +<emphasis role='bold'>MostSignificant</emphasis> } + </para> + <para> +<!-- .br --> +pixmap-formats: LISTofFORMAT + </para> + <para> +<!-- .br --> +roots: LISTofSCREEN + </para> + <para> +<!-- .br --> +motion-buffer-size: CARD32 + </para> + <para> +<!-- .br --> +maximum-request-length: CARD16 + </para> + <para> +<!-- .br --> +min-keycode, max-keycode: KEYCODE + </para> + <para> +where: + </para> + <blockquote> +<informaltable frame="none"> + <tgroup cols='2' align='left'> + <colspec colname='c1' colwidth='1*' colsep="0"/> + <colspec colname='c2' colwidth='2*' colsep="0"/> + <tbody> + <row rowsep="0"> + <entry>FORMAT:</entry> + <entry>[depth: CARD8,</entry> + </row> + <row rowsep="0"> + <entry></entry> + <entry> +bits-per-pixel: {1, 4, 8, 16, 24, 32} + </entry> + </row> + <row rowsep="0"> + <entry></entry> + <entry> +scanline-pad: {8, 16, 32}] + </entry> + </row> + <row rowsep="0"> + <entry>SCREEN:</entry> + <entry>[root: WINDOW</entry> + </row> + <row rowsep="0"> + <entry></entry> + <entry>width-in-pixels, height-in-pixels: CARD16</entry> + </row> + <row rowsep="0"> + <entry></entry> + <entry>width-in-millimeters, height-in-millimeters: CARD16</entry> + </row> + <row rowsep="0"> + <entry></entry> + <entry>allowed-depths: LISTofDEPTH</entry> + </row> + <row rowsep="0"> + <entry></entry> + <entry>root-depth: CARD8</entry> + </row> + <row rowsep="0"> + <entry></entry> + <entry>root-visual: VISUALID</entry> + </row> + <row rowsep="0"> + <entry></entry> + <entry>default-colormap: COLORMAP</entry> + </row> + <row rowsep="0"> + <entry></entry> + <entry>white-pixel, black-pixel: CARD32</entry> + </row> + <row rowsep="0"> + <entry></entry> + <entry>min-installed-maps, max-installed-maps: CARD16</entry> + </row> + <row rowsep="0"> + <entry></entry> + <entry>backing-stores: {Never, WhenMapped, Always}</entry> + </row> + <row rowsep="0"> + <entry></entry> + <entry>save-unders: BOOL</entry> + </row> + <row rowsep="0"> + <entry></entry> + <entry>current-input-masks: SETofEVENT]</entry> + </row> + <row rowsep="0"> + <entry>DEPTH:</entry> + <entry>[depth: CARD8</entry> + </row> + <row rowsep="0"> + <entry></entry> + <entry>visuals: LISTofVISUALTYPE]</entry> + </row> + <row rowsep="0"> + <entry>VISUALTYPE:</entry> + <entry>[visual-id: VISUALID</entry> + </row> + <row rowsep="0"> + <entry></entry> + <entry> +class: {StaticGray, StaticColor, TrueColor, GrayScale, +PseudoColor, DirectColor} + </entry> + </row> + <row rowsep="0"> + <entry></entry> + <entry>red-mask, green-mask, blue-mask: CARD32</entry> + </row> + <row rowsep="0"> + <entry></entry> + <entry>bits-per-rgb-value: CARD8</entry> + </row> + <row rowsep="0"> + <entry></entry> + <entry>colormap-entries: CARD16]</entry> + </row> + </tbody> + </tgroup> +</informaltable> + </blockquote> +</blockquote> + +<para> +Server Information +</para> + +<para> +The information that is global to the server is: +</para> + +<para> +<!-- .LP --> +The protocol version numbers are an escape hatch in case future revisions of +the protocol are necessary. +In general, +the major version would increment for incompatible changes, +and the minor version would increment for small upward compatible changes. +Barring changes, +the major version will be 11, and the minor version will be 0. +The protocol version numbers returned indicate the protocol the server +actually supports. +This might not equal the version sent by the client. +The server can (but need not) refuse connections from clients that offer a +different version than the server supports. +A server can (but need not) support more than one version simultaneously. +</para> +<para> +<!-- .LP --> +The vendor string gives some identification of the owner of the server +implementation. +The vendor controls the semantics of the release number. +</para> +<para> +<!-- .LP --> +The resource-id-mask contains a single contiguous set of bits (at least 18). +The client allocates resource IDs for types WINDOW, PIXMAP, +CURSOR, FONT, GCONTEXT, and COLORMAP by choosing a value with only +some subset of these bits set and ORing it with resource-id-base. +Only values constructed in this way can be used to name newly created +resources over this connection. +Resource IDs never have the top three bits set. +The client is not restricted to linear or contiguous allocation +of resource IDs. +Once an ID has been freed, +it can be reused. +An ID must be unique with respect to the IDs of all other resources, +not just other resources of the same type. +However, note that the value spaces of resource identifiers, +atoms, visualids, and keysyms are distinguished by context, and +as such, are not required to be disjoint; for example, a given numeric value +might be both a valid window ID, a valid atom, and a valid keysym. +</para> +<para> +<!-- .LP --> +Although the server is in general responsible for byte-swapping data to +match the client, +images are always transmitted and received in formats (including byte order) +specified by the server. +The byte order for images is given by image-byte-order and applies to each +scanline unit in XY format (bitmap format) and to each pixel value in Z format. +</para> +<para> +<!-- .LP --> +A bitmap is represented in scanline order. +Each scanline is padded to a multiple of bits as given by bitmap-scanline-pad. +The pad bits are of arbitrary value. +The scanline is quantized in multiples of bits as given by bitmap-scanline-unit. +The bitmap-scanline-unit is always less than or equal to the +bitmap-scanline-pad. +Within each unit, +the leftmost bit in the bitmap is either the least significant +or most significant bit in the unit, as given by bitmap-bit-order. +If a pixmap is represented in XY format, +each plane is represented as a bitmap, and the planes appear from +most significant to least significant in bit order with no padding +between planes. +</para> +<para> +<!-- .LP --> +Pixmap-formats contains one entry for each depth value. +The entry describes the Z format used to represent images of that depth. +An entry for a depth is included if any screen supports that depth, +and all screens supporting that depth must support only that Z format for that +depth. +In Z format, +the pixels are in scanline order, left to right within a scanline. +The number of bits used to hold each pixel is given by bits-per-pixel. +Bits-per-pixel may be larger than strictly required by the depth, +in which case the least significant bits are used to hold +the pixmap data, and the values of the unused high-order bits are +undefined. +When the bits-per-pixel is 4, +the order of nibbles in the byte is the same as the image byte-order. +When the bits-per-pixel is 1, +the format is identical for bitmap format. +Each scanline is padded to a multiple of bits as given by scanline-pad. +When bits-per-pixel is 1, +this will be identical to bitmap-scanline-pad. +</para> +<para> +<!-- .LP --> +How a pointing device roams the screens is up to the server +implementation and is transparent to the protocol. +No geometry is defined among screens. +</para> +<para> +<!-- .LP --> +The server may retain the recent history of pointer motion and do so to a +finer granularity than is reported by +<emphasis role='bold'>MotionNotify </emphasis> +events. +The +<emphasis role='bold'>GetMotionEvents </emphasis> +request makes such history available. +The motion-buffer-size gives the approximate maximum number +of elements in the history buffer. +</para> +<para> +<!-- .LP --> +Maximum-request-length specifies the maximum length of a request +accepted by the server, in 4-byte units. +That is, length is the maximum value that can appear in the length field of a +request. +Requests larger than this maximum generate a +<emphasis role='bold'>Length </emphasis> +error, +and the server will read and simply discard the entire request. +Maximum-request-length will always be at least 4096 +(that is, requests of length up to and including 16384 bytes +will be accepted by all servers). +</para> +<para> +<!-- .LP --> +Min-keycode and max-keycode specify the smallest and largest keycode +values transmitted by the server. +Min-keycode is never less than 8, +and max-keycode is never greater than 255. +Not all keycodes in this range are required to have corresponding keys. +</para> +<para> +<emphasis role="bold">Screen Information</emphasis> +</para> +<para> +The information that applies per screen is: +</para> + +<para> +<!-- .LP --> +The allowed-depths specifies what pixmap and window depths are supported. +Pixmaps are supported for each depth listed, +and windows of that depth are supported if at least one visual type is listed +for the depth. +A pixmap depth of one is always supported and listed, +but windows of depth one might not be supported. +A depth of zero is never listed, +but zero-depth +<emphasis role='bold'>InputOnly </emphasis> +windows are always supported. +</para> +<para> +<!-- .LP --> +Root-depth and root-visual specify the depth and visual type of the +root window. +Width-in-pixels and height-in-pixels specify the size of +the root window (which cannot be changed). +The class of the root window is always +<emphasis role='bold'>InputOutput .</emphasis> +Width-in-millimeters and height-in-millimeters can be used to determine the +physical size and the aspect ratio. +</para> +<para> +<!-- .LP --> +The default-colormap is the one initially associated with the root window. +Clients with minimal color requirements creating windows of +the same depth as the root may want to allocate from this map by +default. +</para> +<para> +<!-- .LP --> +Black-pixel and white-pixel can be used in implementing a monochrome +application. +These pixel values are for permanently allocated entries in the +default-colormap. +The actual RGB values may be settable on some screens +and, in any case, may not actually be black and white. +The names are intended to convey the expected relative intensity of the colors. +</para> +<para> +<!-- .LP --> +The border of the root window is initially a pixmap filled with the black-pixel. +The initial background of the root window is a pixmap filled with some +unspecified two-color pattern using black-pixel and white-pixel. +</para> +<para> +<!-- .LP --> +Min-installed-maps specifies the number of maps that can be guaranteed +to be installed simultaneously (with +<emphasis role='bold'>InstallColormap ), </emphasis> +regardless of the number of entries allocated in each map. +Max-installed-maps specifies the maximum number of maps that might possibly be +installed simultaneously, depending on their allocations. +Multiple static-visual colormaps with identical contents but differing in +resource ID should be considered as a single map for the purposes of this +number. +For the typical case of a single hardware colormap, both values will be 1. +</para> +<para> +<!-- .LP --> +Backing-stores indicates when the server supports backing stores for +this screen, although it may be storage limited in the number of +windows it can support at once. +If save-unders is +<emphasis role='bold'>True , </emphasis> +the server can support the save-under mode in +<emphasis role='bold'>CreateWindow </emphasis> +and +<emphasis role='bold'>ChangeWindowAttributes , </emphasis> +although again it may be storage limited. +</para> +<para> +<!-- .LP --> +The current-input-events is what +<emphasis role='bold'>GetWindowAttributes </emphasis> +would return for the all-event-masks for the root window. +<!-- .SH --> +</para> +<para> +<emphasis role="bold">Visual Information</emphasis> +</para> +<para> +<!-- .LP --> +The information that applies per visual-type is: +</para> +<para> +<!-- .LP --> +A given visual type might be listed for more than one depth or for +more than one screen. +</para> +<para> +<!-- .LP --> +For +<emphasis role='bold'>PseudoColor , </emphasis> +a pixel value indexes a colormap to produce independent RGB values; +the RGB values can be changed dynamically. +<emphasis role='bold'>GrayScale </emphasis> +is treated in the same way as +<emphasis role='bold'>PseudoColor </emphasis> +except which primary drives the screen is undefined; +thus, the client should always store the +same value for red, green, and blue in colormaps. +For +<emphasis role='bold'>DirectColor , </emphasis> +a pixel value is decomposed into separate RGB subfields, +and each subfield separately indexes the colormap for the corresponding value. +The RGB values can be changed dynamically. +<emphasis role='bold'>TrueColor </emphasis> +is treated in the same way as +<emphasis role='bold'>DirectColor </emphasis> +except the colormap has predefined read-only RGB values. +These values are server-dependent but provide linear or near-linear +increasing ramps in each primary. +<emphasis role='bold'>StaticColor </emphasis> +is treated in the same way as +<emphasis role='bold'>PseudoColor </emphasis> +except the colormap has predefined read-only RGB values, +which are server-dependent. +<emphasis role='bold'>StaticGray </emphasis> +is treated in the same way as +<emphasis role='bold'>StaticColor </emphasis> +except the red, green, and blue values are equal for any +single pixel value, resulting in shades of gray. +<emphasis role='bold'>StaticGray </emphasis> +with a two-entry colormap can be thought of as monochrome. +</para> +<para> +<!-- .LP --> +The red-mask, green-mask, and blue-mask are only defined for +<emphasis role='bold'>DirectColor </emphasis> +and +<emphasis role='bold'>TrueColor .</emphasis> +Each has one contiguous set of bits set to 1 with no intersections. +Usually each mask has the same number of bits set to 1. +</para> +<para> +<!-- .LP --> +The bits-per-rgb-value specifies the log base 2 of the number of +distinct color intensity values (individually) of red, green, and blue. +This number need not bear any relation to the number of colormap entries. +Actual RGB values are always passed in the protocol within a +16-bit spectrum, with 0 being minimum intensity and 65535 being the +maximum intensity. +On hardware that provides a linear zero-based intensity ramp, +the following relationship exists: +</para> +<para> +<!-- .LP --> +<!-- .RS --> +<literallayout class="monospaced"> + hw-intensity = protocol-intensity / (65536 / total-hw-intensities) +</literallayout> +<!-- .RE --> +</para> +<para> +<!-- .LP --> +Colormap entries are indexed from 0. +The colormap-entries defines the number of available colormap entries in a +newly created colormap. +For +<emphasis role='bold'>DirectColor </emphasis> +and +<emphasis role='bold'>TrueColor , </emphasis> +this will usually be 2 to the power of the maximum number of bits set to 1 in +red-mask, green-mask, and blue-mask. + +</para> +</sect1> +<sect1 id="requests"> +<title>Requests</title> +<!-- .XS --> +<!-- \*(SN Requests --> +<!-- .XE --> +<para> +<emphasis role='bold'>CreateWindow</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>wid</emphasis>, <emphasis remap='I'>parent</emphasis>: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>class</emphasis>: +<emphasis role='bold'>{ InputOutput , </emphasis> +<emphasis role='bold'>InputOnly , </emphasis> +<emphasis role='bold'>CopyFromParent }</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>depth</emphasis>: CARD8 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>visual</emphasis>: VISUALID or +<emphasis role='bold'>CopyFromParent</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>x</emphasis>, <emphasis remap='I'>y</emphasis>: INT16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>width</emphasis>, <emphasis remap='I'>height</emphasis>, <emphasis remap='I'>border-width</emphasis>: CARD16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>value-mask</emphasis>: BITMASK + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>value-list</emphasis>: LISTofVALUE +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Alloc ,</emphasis> +<emphasis role='bold'>Colormap , </emphasis> +<emphasis role='bold'>Cursor , </emphasis> +<emphasis role='bold'>IDChoice , </emphasis> +<emphasis role='bold'>Match , </emphasis> +<emphasis role='bold'>Pixmap , </emphasis> +<emphasis role='bold'>Value , </emphasis> +<emphasis role='bold'>Window</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request creates an unmapped window and assigns the identifier wid to it. +</para> +<para> +A class of +<emphasis role='bold'>CopyFromParent </emphasis> +means the class is taken from the parent. +A depth of zero for class +<emphasis role='bold'>InputOutput </emphasis> +or +<emphasis role='bold'>CopyFromParent </emphasis> +means the depth is taken from the parent. +A visual of +<emphasis role='bold'>CopyFromParent </emphasis> +means the visual type is taken from the parent. +For class +<emphasis role='bold'>InputOutput ,</emphasis> +the visual type and depth must be a combination supported for the screen +(or a +<emphasis role='bold'>Match </emphasis> +error results). +The depth need not be the same as the parent, +but the parent must not be of class +<emphasis role='bold'>InputOnly </emphasis> +(or a +<emphasis role='bold'>Match </emphasis> +error results). +For class +<emphasis role='bold'>InputOnly ,</emphasis> +the depth must be zero (or a +<emphasis role='bold'>Match </emphasis> +error results), and the visual must be one supported for the screen (or a +<emphasis role='bold'>Match </emphasis> +error results). +However, the parent can have any depth and class. +</para> +<para> +The server essentially acts as if +<emphasis role='bold'>InputOnly </emphasis> +windows do not exist for the purposes of graphics requests, +exposure processing, and +<emphasis role='bold'>VisibilityNotify </emphasis> +events. +An +<emphasis role='bold'>InputOnly </emphasis> +window cannot be used as a drawable (as a source or destination for graphics +requests). +<emphasis role='bold'>InputOnly </emphasis> +and +<emphasis role='bold'>InputOutput </emphasis> +windows act identically in other respects-properties, +grabs, input control, and so on. +</para> +<para> +The coordinate system has the X axis horizontal and the Y axis vertical +with the origin [0, 0] at the upper-left corner. +Coordinates are integral, +in terms of pixels, +and coincide with pixel centers. +Each window and pixmap has its own coordinate system. +For a window, +the origin is inside the border at the inside, upper-left corner. +</para> +<para> +The x and y coordinates +for the window are relative to the parent's origin +and specify the position of the upper-left outer corner of the window +(not the origin). +The width and height specify the inside size (not including the border) +and must be nonzero (or a +<emphasis role='bold'>Value </emphasis> +error results). +The border-width for an +<emphasis role='bold'>InputOnly </emphasis> +window must be zero (or a +<emphasis role='bold'>Match </emphasis> +error results). +</para> +<para> +The window is placed on top in the stacking order with respect to siblings. +</para> +<para> +The value-mask and value-list specify attributes of the window that are +to be explicitly initialized. +The possible values are: +</para> +<informaltable frame='topbot'> + <tgroup cols='2' align='left'> + <colspec colname='c1' colsep='0'/> + <colspec colname='c2' colsep='0'/> + <thead> + <row> + <entry>Attribute</entry> + <entry>Type</entry> + </row> + </thead> + <tbody> + <row rowsep='0'> + <entry>background-pixmap</entry> + <entry> +PIXMAP or +<emphasis role='bold'>None </emphasis> +or +<emphasis role='bold'>ParentRelative</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry>background-pixel</entry> + <entry>CARD32</entry> + </row> + <row rowsep='0'> + <entry>border-pixmap</entry> + <entry> +PIXMAP or +<emphasis role='bold'>CopyFromParent</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry>border-pixel</entry> + <entry>CARD32</entry> + </row> + <row rowsep='0'> + <entry>bit-gravity</entry> + <entry>BITGRAVITY</entry> + </row> + <row rowsep='0'> + <entry>win-gravity</entry> + <entry>WINGRAVITY</entry> + </row> + <row rowsep='0'> + <entry>backing-store</entry> + <entry> +{ <emphasis role='bold'>NotUseful</emphasis>, +<emphasis role='bold'>WhenMapped</emphasis>, +<emphasis role='bold'>Always</emphasis> } + </entry> + </row> + <row rowsep='0'> + <entry>backing-planes</entry> + <entry>CARD32</entry> + </row> + <row rowsep='0'> + <entry>backing-pixel</entry> + <entry>CARD32</entry> + </row> + <row rowsep='0'> + <entry>save-under</entry> + <entry>BOOL</entry> + </row> + <row rowsep='0'> + <entry>event-mask</entry> + <entry>SETofEVENT</entry> + </row> + <row rowsep='0'> + <entry>do-not-propagate-mask</entry> + <entry>SETofDEVICEEVENT</entry> + </row> + <row rowsep='0'> + <entry>override-redirect</entry> + <entry>BOOL</entry> + </row> + <row rowsep='0'> + <entry>colormap</entry> + <entry> +COLORMAP or +<emphasis role='bold'>CopyFromParent</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry>cursor</entry> + <entry> +CURSOR or +<emphasis role='bold'>None</emphasis> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> + +<para> +The default values when attributes are not explicitly initialized +are: +</para> + +<informaltable frame='topbot'> + <tgroup cols='2' align='left'> + <colspec colname='c1' colsep='0'/> + <colspec colname='c2' colsep='0'/> + <thead> + <row> + <entry>Attribute</entry> + <entry>Default</entry> + </row> + </thead> + <tbody> + <row rowsep='0'> + <entry>background-pixmap</entry> + <entry> +<emphasis role='bold'>None</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry>border-pixmap</entry> + <entry> +<emphasis role='bold'>CopyFromParent</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry>bit-gravity</entry> + <entry> +<emphasis role='bold'>Forget</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry>win-gravity</entry> + <entry> +<emphasis role='bold'>NorthWest</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry>backing-store</entry> + <entry> +<emphasis role='bold'>NotUseful</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry>backing-planes</entry> + <entry>all ones</entry> + </row> + <row rowsep='0'> + <entry>backing-pixel</entry> + <entry>zero</entry> + </row> + <row rowsep='0'> + <entry>save-under</entry> + <entry> +<emphasis role='bold'>False</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry>event-mask</entry> + <entry>{} (empty set)</entry> + </row> + <row rowsep='0'> + <entry>do-not-propagate-mask</entry> + <entry>{} (empty set)</entry> + </row> + <row rowsep='0'> + <entry>override-redirect</entry> + <entry> +<emphasis role='bold'>False</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry>colormap</entry> + <entry> +<emphasis role='bold'>CopyFromParent</emphasis> + </entry> + </row> + <row rowsep='1'> + <entry>cursor</entry> + <entry> +<emphasis role='bold'>None</emphasis> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> + +<para> +Only the following attributes are defined for +<emphasis role='bold'>InputOnly</emphasis> +windows: +</para> + +<itemizedlist> + <listitem> + <para> +win-gravity + </para> + </listitem> + <listitem> + <para> +event-mask + </para> + </listitem> + <listitem> + <para> +do-not-propagate-mask + </para> + </listitem> + <listitem> + <para> +override-redirect + </para> + </listitem> + <listitem> + <para> +cursor + </para> + </listitem> +</itemizedlist> + +<para> +It is a +<emphasis role='bold'>Match </emphasis> +error to specify any other attributes for +<emphasis role='bold'>InputOnly </emphasis> +windows. +</para> +<para> +If background-pixmap is given, +it overrides the default background-pixmap. +The background pixmap and the window must have the +same root and the same depth (or a +<emphasis role='bold'>Match </emphasis> +error results). +Any size pixmap can be used, although some sizes may be faster than others. +If background +<emphasis role='bold'>None </emphasis> +is specified, the window has no defined background. +If background +<emphasis role='bold'>ParentRelative </emphasis> +is specified, the parent's background is used, +but the window must have the same depth as the parent (or a +<emphasis role='bold'>Match </emphasis> +error results). +If the parent has background +<emphasis role='bold'>None , </emphasis> +then the window will also have background +<emphasis role='bold'>None .</emphasis> +A copy of the parent's background is not made. +The parent's background is reexamined each time the window background is +required. +If background-pixel is given, it overrides the default +background-pixmap and any background-pixmap given explicitly, +and a pixmap of undefined size filled with background-pixel is used for the +background. +Range checking is not performed on the background-pixel value; +it is simply truncated to the appropriate number of bits. +For a +<emphasis role='bold'>ParentRelative </emphasis> +background, +the background tile origin always aligns with the parent's background tile +origin. +Otherwise, the background tile origin is always the window origin. +</para> +<para> +When no valid contents are available for regions of a window +and the regions are either visible or the server is maintaining backing store, +the server automatically tiles the regions with the window's background +unless the window has a background of +<emphasis role='bold'>None .</emphasis> +If the background is +<emphasis role='bold'>None , </emphasis> +the previous screen contents from other windows of the same depth as the window +are simply left in place if the contents come from the parent of the window +or an inferior of the parent; +otherwise, the initial contents of the exposed regions are undefined. +Exposure events are then generated for the regions, even if the background is +<emphasis role='bold'>None .</emphasis> +</para> +<para> +The border tile origin is always the same as the background tile origin. +If border-pixmap is given, +it overrides the default border-pixmap. +The border pixmap and the window must have the same root +and the same depth (or a +<emphasis role='bold'>Match </emphasis> +error results). +Any size pixmap can be used, +although some sizes may be faster than others. +If +<emphasis role='bold'>CopyFromParent </emphasis> +is given, the parent's border pixmap is copied (subsequent changes to +the parent's border attribute do not affect the child), +but the window must have the same depth as the parent (or a +<emphasis role='bold'>Match </emphasis> +error results). +The pixmap might be copied by sharing the same pixmap object between the +child and parent or by making a complete copy of the pixmap contents. +If border-pixel is given, +it overrides the default border-pixmap and any border-pixmap given explicitly, +and a pixmap of undefined size filled with border-pixel is used for the border. +Range checking is not performed on the border-pixel value; +it is simply truncated to the appropriate number of bits. +</para> +<para> +Output to a window is always clipped to the inside of the window, +so that the border is never affected. +</para> +<para> +The bit-gravity defines which region of the window should be retained +if the window is resized, and win-gravity defines how the window should +be repositioned if the parent is resized (see +<emphasis role='bold'>ConfigureWindow </emphasis> +request). +</para> +<para> +A backing-store of +<emphasis role='bold'>WhenMapped </emphasis> +advises the server that maintaining contents of obscured regions +when the window is mapped would be beneficial. +A backing-store of +<emphasis role='bold'>Always </emphasis> +advises the server that maintaining contents even when the window is +unmapped would be beneficial. +In this case, +the server may generate an exposure event when the window is created. +A value of +<emphasis role='bold'>NotUseful </emphasis> +advises the server that maintaining contents is unnecessary, +although a server may still choose to maintain contents while the window +is mapped. +Note that if the server maintains contents, +then the server should maintain complete contents +not just the region within the parent boundaries, +even if the window is larger than its parent. +While the server maintains contents, +exposure events will not normally be generated, +but the server may stop maintaining contents at any time. +</para> +<para> +If save-under is +<emphasis role='bold'>True , </emphasis> +the server is advised that when this window is +mapped, saving the contents of windows it obscures would be beneficial. +</para> +<para> +When the contents of obscured regions of a window are being maintained, +regions obscured by noninferior windows are included in the +destination (and source, when the window is the source) of graphics +requests, but regions obscured by inferior windows are not included. +</para> +<para> +The backing-planes indicates (with bits set to 1) which bit planes +of the window hold dynamic data that must be preserved in backing-stores +and during save-unders. +The backing-pixel specifies what value to use in planes not +covered by backing-planes. +The server is free to save only the specified bit planes in the backing-store +or save-under and regenerate the remaining planes with the specified pixel +value. +Any bits beyond the specified depth of the window in these +values are simply ignored. +</para> +<para> +The event-mask defines which events the client is interested in for +this window (or for some event types, inferiors of the window). +The do-not-propagate-mask defines which events should not be propagated to +ancestor windows when no client has the event type selected in this +window. +</para> +<para> +The override-redirect specifies whether map and configure requests on this +window should override a +<emphasis role='bold'>SubstructureRedirect</emphasis> +on the parent, typically to inform a window manager not to tamper with +the window. +</para> +<para> +The colormap specifies the colormap that best reflects the true +colors of the window. +Servers capable of supporting multiple hardware colormaps may use this +information, and window managers may use it for +<emphasis role='bold'>InstallColormap </emphasis> +requests. +The colormap must have the same visual type and root as the window (or a +<emphasis role='bold'>Match</emphasis> +error results). +If +<emphasis role='bold'>CopyFromParent </emphasis> +is specified, +the parent's colormap is copied (subsequent changes to the parent's +colormap attribute do not affect the child). +However, the window must have the same visual type as the parent (or a +<emphasis role='bold'>Match </emphasis> +error results), and the parent must not have a colormap of +<emphasis role='bold'>None </emphasis> +(or a +<emphasis role='bold'>Match </emphasis> +error results). +For an explanation of +<emphasis role='bold'>None ,</emphasis> +see +<emphasis role='bold'>FreeColormap </emphasis> +request. +The colormap is copied by sharing the colormap object between the child +and the parent, +not by making a complete copy of the colormap contents. +</para> +<para> +If a cursor is specified, +it will be used whenever the pointer is in the window. +If +<emphasis role='bold'>None </emphasis> +is specified, +the parent's cursor will be used when the pointer is in the window, +and any change in the parent's cursor will cause an immediate change +in the displayed cursor. +</para> +<para> +This request generates a +<emphasis role='bold'>CreateNotify </emphasis> +event. +</para> +<para> +The background and border pixmaps and the cursor may be freed +immediately if no further explicit references to them are to be made. +</para> +<para> +Subsequent drawing into the background or border pixmap has an +undefined effect on the window state. +The server might or might not make a copy of the pixmap. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>ChangeWindowAttributes</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>window</emphasis>: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>value-mask</emphasis>: BITMASK + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>value-list</emphasis>: LISTofVALUE +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Access ,</emphasis> +<emphasis role='bold'>Colormap , </emphasis> +<emphasis role='bold'>Cursor , </emphasis> +<emphasis role='bold'>Match , </emphasis> +<emphasis role='bold'>Pixmap , </emphasis> +<emphasis role='bold'>Value , </emphasis> +<emphasis role='bold'>Window</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +The value-mask and value-list specify which attributes are to be changed. +The values and restrictions are the same as for +<emphasis role='bold'>CreateWindow .</emphasis> +</para> +<para> +Setting a new background, whether by background-pixmap or +background-pixel, overrides any previous background. +Setting a new border, whether by border-pixel or border-pixmap, +overrides any previous border. +</para> +<para> +Changing the background does not cause the window contents to be changed. +Setting the border or changing the background such that the +border tile origin changes causes the border to be repainted. +Changing the background of a root window to +<emphasis role='bold'>None </emphasis> +or +<emphasis role='bold'>ParentRelative </emphasis> +restores the default background pixmap. +Changing the border of a root window to +<emphasis role='bold'>CopyFromParent </emphasis> +restores the default border pixmap. +</para> +<para> +Changing the win-gravity does not affect the current position of the +window. +</para> +<para> +Changing the backing-store of an obscured window to +<emphasis role='bold'>WhenMapped </emphasis> +or +<emphasis role='bold'>Always </emphasis> +or changing the backing-planes, backing-pixel, or save-under of +a mapped window may have no immediate effect. +</para> +<para> +Multiple clients can select input on the same window; +their event-masks are disjoint. +When an event is generated, +it will be reported to all interested clients. +However, only one client at a time can select for +<emphasis role='bold'>SubstructureRedirect , </emphasis> +only one client at a time can select for +<emphasis role='bold'>ResizeRedirect , </emphasis> +and only one client at a time can select for +<emphasis role='bold'>ButtonPress .</emphasis> +An attempt to violate these restrictions results in an +<emphasis role='bold'>Access </emphasis> +error. +</para> +<para> +There is only one do-not-propagate-mask for a window, not one per +client. +</para> +<para> +Changing the colormap of a window (by defining a new map, not by +changing the contents of the existing map) generates a +<emphasis role='bold'>ColormapNotify </emphasis> +event. +Changing the colormap of a visible window might have no immediate effect +on the screen (see +<emphasis role='bold'>InstallColormap </emphasis> +request). +</para> +<para> +Changing the cursor of a root window to +<emphasis role='bold'>None </emphasis> +restores the default cursor. +</para> +<para> +The order in which attributes are verified and altered is server-dependent. +If an error is generated, +a subset of the attributes may have been altered. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>GetWindowAttributes</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>window</emphasis>: WINDOW +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> + -> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +visual: VISUALID + </entry> + </row> + <row rowsep='0'> + <entry> +class: +<emphasis role='bold'>{ InputOutput , </emphasis> +<emphasis role='bold'>InputOnly }</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +bit-gravity: BITGRAVITY + </entry> + </row> + <row rowsep='0'> + <entry> +win-gravity: WINGRAVITY + </entry> + </row> + <row rowsep='0'> + <entry> +backing-store: +<emphasis role='bold'>{ NotUseful , </emphasis> +<emphasis role='bold'>WhenMapped , </emphasis> +<emphasis role='bold'>Always }</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +backing-planes: CARD32 + </entry> + </row> + <row rowsep='0'> + <entry> +backing-pixel: CARD32 + </entry> + </row> + <row rowsep='0'> + <entry> +save-under: BOOL + </entry> + </row> + <row rowsep='0'> + <entry> +colormap: COLORMAP or +<emphasis role='bold'>None</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +map-is-installed: BOOL + </entry> + </row> + <row rowsep='0'> + <entry> +map-state: +<emphasis role='bold'>{ Unmapped , </emphasis> +<emphasis role='bold'>Unviewable , </emphasis> +<emphasis role='bold'>Viewable }</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +all-event-masks, your-event-mask: SETofEVENT + </entry> + </row> + <row rowsep='0'> + <entry> +do-not-propagate-mask: SETofDEVICEEVENT + </entry> + </row> + <row rowsep='0'> + <entry> +override-redirect: BOOL +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Window</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request returns the current attributes of the window. +A window is +<emphasis role='bold'>Unviewable </emphasis> +if it is mapped but some ancestor is unmapped. +All-event-masks is the inclusive-OR of all event masks selected on the window +by clients. +Your-event-mask is the event mask selected by the querying client. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>DestroyWindow</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>window</emphasis>: WINDOW +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Window</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +If the argument window is mapped, +an +<emphasis role='bold'>UnmapWindow </emphasis> +request is performed automatically. +The window and all inferiors are then destroyed, and a +<emphasis role='bold'>DestroyNotify </emphasis> +event is generated for each window. +The ordering of the +<emphasis role='bold'>DestroyNotify </emphasis> +events is such that for any given window, +<emphasis role='bold'>DestroyNotify </emphasis> +is generated on all inferiors of the window before being generated on +the window itself. +The ordering among siblings and across subhierarchies is not otherwise +constrained. +</para> +<para> +Normal exposure processing on formerly obscured windows is performed. +</para> +<para> +If the window is a root window, +this request has no effect. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>DestroySubwindows</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>window</emphasis>: WINDOW +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Window</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request performs a +<emphasis role='bold'>DestroyWindow </emphasis> +request on all children of the window, in bottom-to-top stacking order. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>ChangeSaveSet</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>window</emphasis>: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>mode</emphasis>: +<emphasis role='bold'>{ Insert , </emphasis> +<emphasis role='bold'>Delete }</emphasis> +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +Errors: +<!-- .in +.2i --> +<emphasis role='bold'>Match , </emphasis> +<emphasis role='bold'>Value ,</emphasis> +<emphasis role='bold'>Window</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request adds or removes the specified window from the client's +save-set. +The window must have been created by some other client (or a +<emphasis role='bold'>Match </emphasis> +error results). +For further information about the use of the save-set, +see section 10. +</para> +<para> +When windows are destroyed, +the server automatically removes them from the save-set. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>ReparentWindow</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>window</emphasis>, <emphasis remap='I'>parent</emphasis>: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>x</emphasis>, <emphasis remap='I'>y</emphasis>: INT16 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Match ,</emphasis> +<emphasis role='bold'>Window</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +If the window is mapped, +an +<emphasis role='bold'>UnmapWindow </emphasis> +request is performed automatically first. +The window is then removed from its current position in the hierarchy +and is inserted as a child of the specified parent. +The x and y coordinates are relative to the parent's origin +and specify the new position of the upper-left outer corner of the +window. +The window is placed on top in the stacking order with respect +to siblings. +A +<emphasis role='bold'>ReparentNotify </emphasis> +event is then generated. +The override-redirect attribute of the window is passed on in this event; +a value of +<emphasis role='bold'>True </emphasis> +indicates that a window manager should not tamper with this window. +Finally, if the window was originally mapped, a +<emphasis role='bold'>MapWindow </emphasis> +request is performed automatically. +</para> +<para> +Normal exposure processing on formerly obscured windows is performed. +The server might not generate exposure events for regions from the +initial unmap that are immediately obscured by the final map. +</para> +<para> +A +<emphasis role='bold'>Match </emphasis> +error is generated if: +<!-- .IP bu 5 --> +The new parent is not on the same screen as the old parent. +<!-- .IP bu 5 --> +The new parent is the window itself or an inferior of the window. +<!-- .IP bu 5 --> +The new parent is +<emphasis role='bold'>InputOnly , </emphasis> +and the window is not. +<!-- .IP bu 5 --> +The window has a +<emphasis role='bold'>ParentRelative </emphasis> +background, and the new parent is not the same depth as the window. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>MapWindow</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>window</emphasis>: WINDOW +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Window</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +If the window is already mapped, this request has no effect. +</para> +<para> +If the override-redirect attribute of the window is +<emphasis role='bold'>False </emphasis> +and some other client has selected +<emphasis role='bold'>SubstructureRedirect </emphasis> +on the parent, then a +<emphasis role='bold'>MapRequest </emphasis> +event is generated, but the window remains unmapped. +Otherwise, the window is mapped, +and a +<emphasis role='bold'>MapNotify </emphasis> +event is generated. +</para> +<para> +If the window is now viewable and its contents have been discarded, +the window is tiled with its background (if no background is defined, +the existing screen contents are not altered), and zero or more exposure +events are generated. +If a backing-store has been maintained while the window was unmapped, +no exposure events are generated. +If a backing-store will now be maintained, +a full-window exposure is always generated. +Otherwise, only visible regions may be reported. +Similar tiling and exposure take place for any newly viewable inferiors. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>MapSubwindows</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>window</emphasis>: WINDOW +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Window</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request performs a +<emphasis role='bold'>MapWindow </emphasis> +request on all unmapped children of the window, +in top-to-bottom stacking order. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>UnmapWindow</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>window</emphasis>: WINDOW +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Window</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +If the window is already unmapped, this request has no effect. +Otherwise, the window is unmapped, and an +<emphasis role='bold'>UnmapNotify </emphasis> +event is generated. +Normal exposure processing on formerly obscured windows is performed. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>UnmapSubwindows</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>window</emphasis>: WINDOW +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Window</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request performs an +<emphasis role='bold'>UnmapWindow </emphasis> +request on all mapped children of the window, +in bottom-to-top stacking order. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>ConfigureWindow</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>window</emphasis>: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>value-mask</emphasis>: BITMASK + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>value-list</emphasis>: LISTofVALUE +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Match , </emphasis> +<emphasis role='bold'>Value ,</emphasis> +<emphasis role='bold'>Window</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request changes the configuration of the window. +The value-mask and value-list specify which values are to be given. +The possible values are: +</para> + +<informaltable frame='topbot'> + <tgroup cols='2' align='left'> + <colspec colname='c1' colsep='0'/> + <colspec colname='c2' colsep='0'/> + <thead> + <row> + <entry>Attribute</entry> + <entry>Type</entry> + </row> + </thead> + <tbody> + <row rowsep='0'> + <entry>x</entry> + <entry>INT16</entry> + </row> + <row rowsep='0'> + <entry>y</entry> + <entry>INT16</entry> + </row> + <row rowsep='0'> + <entry>width</entry> + <entry>CARD16</entry> + </row> + <row rowsep='0'> + <entry>height</entry> + <entry>CARD16</entry> + </row> + <row rowsep='0'> + <entry>border-width</entry> + <entry>CARD16</entry> + </row> + <row rowsep='0'> + <entry>sibling</entry> + <entry>WINDOW</entry> + </row> + <row rowsep='0'> + <entry>stack-mode</entry> + <entry> +{ <emphasis role='bold'>Above</emphasis>, +<emphasis role='bold'>Below</emphasis>, +<emphasis role='bold'>TopIf</emphasis>, +<emphasis role='bold'>BottomIf</emphasis>, +<emphasis role='bold'>Opposite</emphasis> } + </entry> + </row> + </tbody> + </tgroup> +</informaltable> + +<para> +The x and y coordinates are relative to the parent's origin +and specify the position of the upper-left outer corner of the window. +The width and height specify the inside size, not including the border, and +must be nonzero (or a +<emphasis role='bold'>Value </emphasis> +error results). +Those values not specified are taken from the existing geometry of the window. +Note that changing just the border-width leaves the outer-left corner +of the window in a fixed position but moves the absolute position of the +window's origin. +It is a +<emphasis role='bold'>Match </emphasis> +error to attempt to make the border-width of an +<emphasis role='bold'>InputOnly </emphasis> +window nonzero. +</para> +<para> +If the override-redirect attribute of the window is +<emphasis role='bold'>False </emphasis> +and some other client has selected +<emphasis role='bold'>SubstructureRedirect </emphasis> +on the parent, a +<emphasis role='bold'>ConfigureRequest </emphasis> +event is generated, and no further processing is performed. +Otherwise, the following is performed: +</para> +<para> +If some other client has selected +<emphasis role='bold'>ResizeRedirect </emphasis> +on the window and the inside width or height of the window is being changed, +a +<emphasis role='bold'>ResizeRequest </emphasis> +event is generated, +and the current inside width and height are used instead. +Note that the override-redirect attribute of the window has no effect on +<emphasis role='bold'>ResizeRedirect </emphasis> +and that +<emphasis role='bold'>SubstructureRedirect </emphasis> +on the parent has precedence over +<emphasis role='bold'>ResizeRedirect </emphasis> +on the window. +</para> +<para> +The geometry of the window is changed as specified, +the window is restacked among siblings, and a +<emphasis role='bold'>ConfigureNotify </emphasis> +event is generated if the state of the window actually changes. +If the inside width or height of the window has actually changed, +then children of the window are affected, +according to their win-gravity. +Exposure processing is performed on formerly obscured windows +(including the window itself and its inferiors if regions of them were +obscured but now are not). +Exposure processing is also performed on any new regions of the window +(as a result of increasing the width or height) +and on any regions where window contents are lost. +</para> +<para> +If the inside width or height of a window is not changed +but the window is moved or its border is changed, +then the contents of the window are not lost but move with the window. +Changing the inside width or height of the window causes its contents to be +moved or lost, depending on the bit-gravity of the window. +It also causes children to be reconfigured, depending on their win-gravity. +For a change of width and height of W and H, +we define the [x, y] pairs as: +</para> + +<informaltable frame='topbot'> + <tgroup cols='2' align='left'> + <colspec colname='c1' colsep='0'/> + <colspec colname='c2' colsep='0'/> + <thead> + <row> + <entry>Direction</entry> + <entry>Deltas</entry> + </row> + </thead> + <tbody> + <row rowsep='0'> + <entry> +<emphasis role='bold'>NorthWest</emphasis> + </entry> + <entry>[0, 0]</entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>North</emphasis> + </entry> + <entry>[W/2, 0]</entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>NorthEast</emphasis> + </entry> + <entry>[W, 0]</entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>West</emphasis> + </entry> + <entry>[0, H/2]</entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>Center</emphasis> + </entry> + <entry>[W/2, H/2]</entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>East</emphasis> + </entry> + <entry>[W, H/2]</entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>SouthWest</emphasis> + </entry> + <entry>[0, H]</entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>South</emphasis> + </entry> + <entry>[W/2, H]</entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>SouthEast</emphasis> + </entry> + <entry>[W, H]</entry> + </row> + </tbody> + </tgroup> +</informaltable> + +<para> +When a window with one of these bit-gravities is resized, +the corresponding pair defines the change in position of each pixel in the +window. +When a window with one of these win-gravities has its parent window resized, +the corresponding pair defines the change in position +of the window within the parent. +This repositioning generates a +<emphasis role='bold'>GravityNotify </emphasis> +event. +<emphasis role='bold'>GravityNotify </emphasis> +events are generated after the +<emphasis role='bold'>ConfigureNotify </emphasis> +event is generated. +</para> +<para> +A gravity of +<emphasis role='bold'>Static </emphasis> +indicates that the contents or origin should not move relative to the origin +of the root window. +If the change in size of the window is coupled with a change +in position of [X, Y], +then for bit-gravity the change in position of each pixel is [-X, -Y] and for +win-gravity the change in position of a child when its parent is so +resized is [-X, -Y]. +Note that +<emphasis role='bold'>Static </emphasis> +gravity still only takes effect when the width or height of the +window is changed, not when the window is simply moved. +</para> +<para> +A bit-gravity of +<emphasis role='bold'>Forget </emphasis> +indicates that the window contents are always discarded after a size change, +even if backing-store or save-under has been requested. +The window is tiled with its background (except, if no background is defined, +the existing screen contents are not altered) +and zero or more exposure events are generated. +</para> +<para> +The contents and borders of inferiors are not affected by their parent's +bit-gravity. +A server is permitted to ignore the specified bit-gravity and use +<emphasis role='bold'>Forget </emphasis> +instead. +</para> +<para> +A win-gravity of +<emphasis role='bold'>Unmap </emphasis> +is like +<emphasis role='bold'>NorthWest , </emphasis> +but the child is also unmapped when the parent is resized, +and an +<emphasis role='bold'>UnmapNotify </emphasis> +event is generated. +<emphasis role='bold'>UnmapNotify </emphasis> +events are generated after the +<emphasis role='bold'>ConfigureNotify </emphasis> +event is generated. +</para> +<para> +If a sibling and a stack-mode are specified, +the window is restacked as follows: +</para> + +<informaltable frame='none'> + <tgroup cols='2' align='left'> + <colspec colname='c1' colsep='0'/> + <colspec colname='c2' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<emphasis role='bold'>Above</emphasis> + </entry> + <entry> +The window is placed just above the sibling. + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>Below</emphasis> + </entry> + <entry> +The window is placed just below the sibling. + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>TopIf</emphasis> + </entry> + <entry> +If the sibling occludes the window, +then the window is placed at the top of the stack. + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>BottomIf</emphasis> + </entry> + <entry> +If the window occludes the sibling, +then the window is placed at the bottom of the stack. + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>Opposite</emphasis> + </entry> + <entry> +If the sibling occludes the window, +then the window is placed at the top of the stack. +Otherwise, if the window occludes the sibling, +then the window is placed at the bottom of the stack. + </entry> + </row> + </tbody> + </tgroup> +</informaltable> + +<para> +If a stack-mode is specified but no sibling is specified, +the window is restacked as follows: +</para> + +<informaltable frame='none'> + <tgroup cols='2' align='left'> + <colspec colname='c1' colsep='0'/> + <colspec colname='c2' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<emphasis role='bold'>Above</emphasis> + </entry> + <entry> +The window is placed at the top of the stack. + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>Below</emphasis> + </entry> + <entry> +The window is placed at the bottom of the stack. + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>TopIf</emphasis> + </entry> + <entry> +If any sibling occludes the window, +then the window is placed at the top of the stack. + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>BottomIf</emphasis> + </entry> + <entry> +If the window occludes any sibling, +then the window is placed at the bottom of the stack. + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>Opposite</emphasis> + </entry> + <entry> +If any sibling occludes the window, +then the window is placed at the top of the stack. +Otherwise, if the window occludes any sibling, +then the window is placed at the bottom of the stack. + </entry> + </row> + </tbody> + </tgroup> +</informaltable> + +<para> +It is a +<emphasis role='bold'>Match </emphasis> +error if a sibling is specified without a stack-mode +or if the window is not actually a sibling. +</para> +<para> +Note that the computations for +<emphasis role='bold'>BottomIf</emphasis>, +<emphasis role='bold'>TopIf</emphasis>, +and +<emphasis role='bold'>Opposite </emphasis> +are performed with respect to the window's final geometry (as controlled by +the other arguments to the request), not to its initial geometry. +</para> +<para> +Attempts to configure a root window have no effect. +</para> + +<para> +<emphasis role='bold'>CirculateWindow</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>window</emphasis>: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>direction</emphasis>: +<emphasis role='bold'>{ RaiseLowest , </emphasis> +<emphasis role='bold'>LowerHighest }</emphasis> +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Value ,</emphasis> +<emphasis role='bold'>Window</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +If some other client has selected +<emphasis role='bold'>SubstructureRedirect </emphasis> +on the window, then a +<emphasis role='bold'>CirculateRequest </emphasis> +event is generated, and no further processing is performed. +Otherwise, the following is performed, and then a +<emphasis role='bold'>CirculateNotify </emphasis> +event is generated if the window is actually restacked. +</para> +<para> +For +<emphasis role='bold'>RaiseLowest , </emphasis> +<emphasis role='bold'>CirculateWindow </emphasis> +raises the lowest mapped child (if any) that is +occluded by another child to the top of the stack. +For +<emphasis role='bold'>LowerHighest ,</emphasis> +<emphasis role='bold'>CirculateWindow </emphasis> +lowers the highest mapped child (if any) that occludes another child to +the bottom of the stack. +Exposure processing is performed on formerly obscured windows. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>GetGeometry</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>drawable</emphasis>: DRAWABLE +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> + -> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +root: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +depth: CARD8 + </entry> + </row> + <row rowsep='0'> + <entry> +x, y: INT16 + </entry> + </row> + <row rowsep='0'> + <entry> +width, height, border-width: CARD16 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Drawable</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request returns the root and current geometry of the drawable. +The depth is the number of bits per pixel for the object. +The x, y, and border-width will always be zero for pixmaps. +For a window, +the x and y coordinates specify the upper-left outer corner of the window +relative to its parent's origin, +and the width and height specify the inside size, not including the border. +</para> +<para> +It is legal to pass an +<emphasis role='bold'>InputOnly </emphasis> +window as a drawable to this request. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>QueryTree</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>window</emphasis>: WINDOW +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> + -> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +root: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +parent: WINDOW or +<emphasis role='bold'>None</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +children: LISTofWINDOW +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Window</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request returns the root, the parent, and the children of the window. +The children are listed in bottom-to-top stacking order. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>InternAtom</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>name</emphasis>: STRING8 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>only-if-exists</emphasis>: BOOL +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> + -> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +atom: ATOM or +<emphasis role='bold'>None</emphasis> +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Alloc ,</emphasis> +<emphasis role='bold'>Value</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request returns the atom for the given name. +If only-if-exists is +<emphasis role='bold'>False , </emphasis> +then the atom is created if it does not exist. +The string should use the ISO Latin-1 encoding. +Uppercase and lowercase matter. +</para> +<para> +The lifetime of an atom is not tied to the interning client. +Atoms remain defined until server reset (see section 10). +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>GetAtomName</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>atom</emphasis>: ATOM +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> + -> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +name: STRING8 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Atom</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request returns the name for the given atom. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>ChangeProperty</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>window</emphasis>: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>property</emphasis>, <emphasis remap='I'>type</emphasis>: ATOM + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>format</emphasis>: {8, 16, 32} + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>mode</emphasis>: +<emphasis role='bold'>{ Replace , </emphasis> +<emphasis role='bold'>Prepend , </emphasis> +<emphasis role='bold'>Append }</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>data</emphasis>: LISTofINT8 or LISTofINT16 or LISTofINT32 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Alloc ,</emphasis> +<emphasis role='bold'>Atom , </emphasis> +<emphasis role='bold'>Match , </emphasis> +<emphasis role='bold'>Value , </emphasis> +<emphasis role='bold'>Window</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request alters the property for the specified window. +The type is uninterpreted by the server. +The format specifies whether the data should be viewed as a list of 8-bit, +16-bit, or 32-bit quantities so that the server can correctly byte-swap +as necessary. +</para> +<para> +If the mode is +<emphasis role='bold'>Replace , </emphasis> +the previous property value is discarded. +If the mode is +<emphasis role='bold'>Prepend </emphasis> +or +<emphasis role='bold'>Append , </emphasis> +then the type and format must match the existing property value (or a +<emphasis role='bold'>Match </emphasis> +error results). +If the property is undefined, +it is treated as defined with the correct type +and format with zero-length data. +For +<emphasis role='bold'>Prepend , </emphasis> +the data is tacked on to the beginning of the existing data, and for +<emphasis role='bold'>Append ,</emphasis> +it is tacked on to the end of the existing data. +</para> +<para> +This request generates a +<emphasis role='bold'>PropertyNotify </emphasis> +event on the window. +</para> +<para> +The lifetime of a property is not tied to the storing client. +Properties remain until explicitly deleted, until the window is destroyed, +or until server reset (see section 10). +</para> +<para> +The maximum size of a property is server-dependent and may vary dynamically. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>DeleteProperty</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>window</emphasis>: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>property</emphasis>: ATOM +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Atom ,</emphasis> +<emphasis role='bold'>Window</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request deletes the property from the specified window +if the property exists and generates a +<emphasis role='bold'>PropertyNotify </emphasis> +event on the window unless the property does not exist. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>GetProperty</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>window</emphasis>: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>property</emphasis>: ATOM + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>type</emphasis>: ATOM or +<emphasis role='bold'>AnyPropertyType</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>long-offset</emphasis>, <emphasis remap='I'>long-length</emphasis>: CARD32 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>delete</emphasis>: BOOL +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> + -> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +type: ATOM or +<emphasis role='bold'>None</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +format: {0, 8, 16, 32} + </entry> + </row> + <row rowsep='0'> + <entry> +bytes-after: CARD32 + </entry> + </row> + <row rowsep='0'> + <entry> +value: LISTofINT8 or LISTofINT16 or LISTofINT32 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Atom , </emphasis> +<emphasis role='bold'>Value ,</emphasis> +<emphasis role='bold'>Window</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +If the specified property does not exist for the specified window, +then the return type is +<emphasis role='bold'>None , </emphasis> +the format and bytes-after are zero, +and the value is empty. +The delete argument is ignored in this case. +If the specified property exists but its type does not match the specified type, +then the return type is the actual type of the property, +the format is the actual format of the property (never zero), +the bytes-after is the length of the property in bytes +(even if the format is 16 or 32), +and the value is empty. +The delete argument is ignored in this case. +If the specified property exists and either +<emphasis role='bold'>AnyPropertyType </emphasis> +is specified or the specified type matches the actual type of the property, +then the return type is the actual type of the property, +the format is the actual format of the property (never zero), +and the bytes-after and value are as follows, given: +<!-- .DS --> +N = actual length of the stored property in bytes +\ \ \ \ (even if the format is 16 or 32) +I = 4 * long-offset +T = N - I +L = MINIMUM(T, 4 * long-length) +A = N - (I + L) +<!-- .DE --> +</para> +<para> +The returned value starts at byte index I in the property (indexing from 0), +and its length in bytes is L. +However, it is a +<emphasis role='bold'>Value </emphasis> +error if long-offset is given such that L is negative. +The value of bytes-after is A, +giving the number of trailing unread bytes in the stored +property. +If delete is +<emphasis role='bold'>True </emphasis> +and the bytes-after is zero, +the property is also deleted from the window, +and a +<emphasis role='bold'>PropertyNotify </emphasis> +event is generated on the window. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>RotateProperties</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>window</emphasis>: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>delta</emphasis>: INT16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>properties</emphasis>: LISTofATOM +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Atom , </emphasis> +<emphasis role='bold'>Match ,</emphasis> +<emphasis role='bold'>Window</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +If the property names in the list are viewed as being numbered starting +from zero, and there are N property names in the list, +then the value associated with property name I becomes the value +associated with property name (I + delta) mod N, for all I from zero to N - 1. +The effect is to rotate the states by delta places around the virtual ring +of property names (right for positive delta, left for negative delta). +</para> +<para> +If delta mod N is nonzero, +a +<emphasis role='bold'>PropertyNotify </emphasis> +event is generated for each property in the order listed. +</para> +<para> +If an atom occurs more than once in the list or no property with that +name is defined for the window, +a +<emphasis role='bold'>Match </emphasis> +error is generated. +If an +<emphasis role='bold'>Atom </emphasis> +or +<emphasis role='bold'>Match </emphasis> +error is generated, no properties are changed. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>ListProperties</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>window</emphasis>: WINDOW +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> + -> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +atoms: LISTofATOM +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Window</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request returns the atoms of properties currently defined on the window. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>SetSelectionOwner</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>selection</emphasis>: ATOM + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>owner</emphasis>: WINDOW or +<emphasis role='bold'>None</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>time</emphasis>: TIMESTAMP or +<emphasis role='bold'>CurrentTime</emphasis> +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Atom , </emphasis> +<emphasis role='bold'>Window</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request changes the owner, owner window, +and last-change time of the specified selection. +This request has no effect if the specified time is earlier +than the current last-change time of the specified selection or is +later than the current server time. +Otherwise, the last-change time is set to the specified time +with +<emphasis role='bold'>CurrentTime </emphasis> +replaced by the current server time. +If the owner window is specified as +<emphasis role='bold'>None , </emphasis> +then the owner of the selection becomes +<emphasis role='bold'>None </emphasis> +(that is, no owner). +Otherwise, the owner of the selection becomes the client executing the request. +If the new owner (whether a client or +<emphasis role='bold'>None ) </emphasis> +is not the same as the current owner +and the current owner is not +<emphasis role='bold'>None , </emphasis> +then the current owner is sent a +<emphasis role='bold'>SelectionClear </emphasis> +event. +</para> +<para> +If the client that is the owner of a selection is later terminated +(that is, its connection is closed) or if the owner window it has +specified in the request is later destroyed, +then the owner of the selection automatically reverts to +<emphasis role='bold'>None , </emphasis> +but the last-change time is not affected. +</para> +<para> +The selection atom is uninterpreted by the server. +The owner window is returned by the +<emphasis role='bold'>GetSelectionOwner </emphasis> +request and is reported in +<emphasis role='bold'>SelectionRequest </emphasis> +and +<emphasis role='bold'>SelectionClear </emphasis> +events. +</para> +<para> +Selections are global to the server. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>GetSelectionOwner</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>selection</emphasis>: ATOM +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> + -> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +owner: WINDOW or +<emphasis role='bold'>None</emphasis> +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Atom</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request returns the current owner window of the specified selection, +if any. +If +<emphasis role='bold'>None </emphasis> +is returned, then there is no owner for the selection. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>ConvertSelection</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>selection</emphasis>, <emphasis remap='I'>target</emphasis>: ATOM + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>property</emphasis>: ATOM or +<emphasis role='bold'>None</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>requestor</emphasis>: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>time</emphasis>: TIMESTAMP or +<emphasis role='bold'>CurrentTime</emphasis> +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Atom , </emphasis> +<emphasis role='bold'>Window</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +If the specified selection has an owner, +the server sends a +<emphasis role='bold'>SelectionRequest </emphasis> +event to that owner. +If no owner for the specified selection exists, +the server generates a +<emphasis role='bold'>SelectionNotify </emphasis> +event to the requestor with property +<emphasis role='bold'>None .</emphasis> +The arguments are passed on unchanged in either of the events. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>SendEvent</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>destination</emphasis>: WINDOW or +<emphasis role='bold'>PointerWindow </emphasis> +or +<emphasis role='bold'>InputFocus</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>propagate</emphasis>: BOOL + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>event-mask</emphasis>: SETofEVENT + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>event</emphasis>: <normal-event-format> +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Value ,</emphasis> +<emphasis role='bold'>Window</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +If +<emphasis role='bold'>PointerWindow </emphasis> +is specified, +destination is replaced with the window that the pointer is in. +If +<emphasis role='bold'>InputFocus </emphasis> +is specified and the focus window contains the pointer, +destination is replaced with the window that the pointer is in. +Otherwise, destination is replaced with the focus window. +</para> +<para> +If the event-mask is the empty set, +then the event is sent to the client that created the destination window. +If that client no longer exists, no event is sent. +</para> +<para> +If propagate is +<emphasis role='bold'>False , </emphasis> +then the event is sent to every client selecting +on destination any of the event types in event-mask. +</para> +<para> +If propagate is +<emphasis role='bold'>True </emphasis> +and no clients have selected on destination any +of the event types in event-mask, +then destination is replaced with the +closest ancestor of destination for which some client has selected a +type in event-mask and no intervening window has that type in its +do-not-propagate-mask. +If no such window exists or if the window is an ancestor of the focus window +and +<emphasis role='bold'>InputFocus </emphasis> +was originally specified as the destination, +then the event is not sent to any clients. +Otherwise, the event is reported to every client selecting on the final +destination any of the types specified in event-mask. +</para> +<para> +The event code must be one of the core events or one of the events +defined by an extension (or a +<emphasis role='bold'>Value </emphasis> +error results) so that the server can correctly byte-swap the +contents as necessary. +The contents of the event are otherwise unaltered and unchecked +by the server except to force on the most significant bit of the event code +and to set the sequence number in the event correctly. +</para> +<para> +Active grabs are ignored for this request. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>GrabPointer</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>grab-window</emphasis>: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>owner-events</emphasis>: BOOL + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>event-mask</emphasis>: SETofPOINTEREVENT + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>pointer-mode</emphasis>, <emphasis remap='I'>keyboard-mode</emphasis>: +<emphasis role='bold'>{ Synchronous , </emphasis> +<emphasis role='bold'>Asynchronous }</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>confine-to</emphasis>: WINDOW or +<emphasis role='bold'>None</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>cursor</emphasis>: CURSOR or +<emphasis role='bold'>None</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>time</emphasis>: TIMESTAMP or +<emphasis role='bold'>CurrentTime</emphasis> +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> + -> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +status: +<emphasis role='bold'>{ Success , </emphasis> +<emphasis role='bold'>AlreadyGrabbed , </emphasis> +<emphasis role='bold'>Frozen , </emphasis> +<emphasis role='bold'>InvalidTime , </emphasis> +<emphasis role='bold'>NotViewable }</emphasis> +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Cursor , </emphasis> +<emphasis role='bold'>Value ,</emphasis> +<emphasis role='bold'>Window</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request actively grabs control of the pointer. +Further pointer events are only reported to the grabbing client. +The request overrides any active pointer grab by this client. +</para> +<para> +If owner-events is +<emphasis role='bold'>False , </emphasis> +all generated pointer events are reported with respect to grab-window +and are only reported if selected by event-mask. +If owner-events is +<emphasis role='bold'>True </emphasis> +and a generated pointer event would normally be reported to this client, +it is reported normally. +Otherwise, the event is reported with respect to the grab-window and is +only reported if selected by event-mask. +For either value of owner-events, +unreported events are simply discarded. +</para> +<para> +If pointer-mode is +<emphasis role='bold'>Asynchronous , </emphasis> +pointer event processing continues normally. +If the pointer is currently frozen by this client, +then processing of pointer events is resumed. +If pointer-mode is +<emphasis role='bold'>Synchronous , </emphasis> +the state of the pointer (as seen by means of the protocol) appears to freeze, +and no further pointer events are generated by the server until the +grabbing client issues a releasing +<emphasis role='bold'>AllowEvents </emphasis> +request or until the pointer grab is released. +Actual pointer changes are not lost while the pointer is frozen. +They are simply queued for later processing. +</para> +<para> +If keyboard-mode is +<emphasis role='bold'>Asynchronous , </emphasis> +keyboard event processing is unaffected by activation of the grab. +If keyboard-mode is +<emphasis role='bold'>Synchronous ,</emphasis> +the state of the keyboard (as seen by means of the protocol) appears to freeze, +and no further keyboard events are generated by the server until the grabbing +client issues a releasing +<emphasis role='bold'>AllowEvents </emphasis> +request or until the pointer grab is released. +Actual keyboard changes are not lost while the keyboard is frozen. +They are simply queued for later processing. +</para> +<para> +If a cursor is specified, +then it is displayed regardless of what window the pointer is in. +If no cursor is specified, +then when the pointer is in grab-window or one of its subwindows, +the normal cursor for that window is displayed. +Otherwise, the cursor for grab-window is displayed. +</para> +<para> +If a confine-to window is specified, +then the pointer will be restricted to stay contained in that window. +The confine-to window need have no relationship to the grab-window. +If the pointer is not initially in the confine-to window, +then it is warped automatically to the closest edge +(and enter/leave events are generated normally) just before the grab activates. +If the confine-to window is subsequently reconfigured, +the pointer will be warped automatically as necessary to +keep it contained in the window. +</para> +<para> +This request generates +<emphasis role='bold'>EnterNotify </emphasis> +and +<emphasis role='bold'>LeaveNotify </emphasis> +events. +</para> +<para> +The request fails with status +<emphasis role='bold'>AlreadyGrabbed </emphasis> +if the pointer is actively grabbed by some other client. +The request fails with status +<emphasis role='bold'>Frozen </emphasis> +if the pointer is frozen by an active grab of another client. +The request fails with status +<emphasis role='bold'>NotViewable </emphasis> +if grab-window or confine-to window is not viewable +or if the confine-to window lies completely outside the boundaries +of the root window. +The request fails with status +<emphasis role='bold'>InvalidTime </emphasis> +if the specified time is earlier than the last-pointer-grab time or later than +the current server time. +Otherwise, the last-pointer-grab time is set to the specified time, with +<emphasis role='bold'>CurrentTime </emphasis> +replaced by the current server time. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>UngrabPointer</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>time</emphasis>: TIMESTAMP or +<emphasis role='bold'>CurrentTime</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request releases the pointer if this client has it actively grabbed (from +either +<emphasis role='bold'>GrabPointer </emphasis> +or +<emphasis role='bold'>GrabButton </emphasis> +or from a normal button press) and releases any queued events. +The request has no effect if the specified time is earlier than +the last-pointer-grab time or is later than the current server time. +</para> +<para> +This request generates +<emphasis role='bold'>EnterNotify </emphasis> +and +<emphasis role='bold'>LeaveNotify </emphasis> +events. +</para> +<para> +An +<emphasis role='bold'>UngrabPointer </emphasis> +request is performed automatically if the event window or +confine-to window for an active pointer grab becomes not viewable +or if window reconfiguration causes the confine-to window to lie +completely outside the boundaries of the root window. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>GrabButton</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>modifiers</emphasis>: SETofKEYMASK or +<emphasis role='bold'>AnyModifier</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>button</emphasis>: BUTTON or +<emphasis role='bold'>AnyButton</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>grab-window</emphasis>: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>owner-events</emphasis>: BOOL + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>event-mask</emphasis>: SETofPOINTEREVENT + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>pointer-mode</emphasis>, <emphasis remap='I'>keyboard-mode</emphasis>: +<emphasis role='bold'>{ Synchronous , </emphasis> +<emphasis role='bold'>Asynchronous }</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>confine-to</emphasis>: WINDOW or +<emphasis role='bold'>None</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>cursor</emphasis>: CURSOR or +<emphasis role='bold'>None</emphasis> +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Access ,</emphasis> +<emphasis role='bold'>Cursor , </emphasis> +<emphasis role='bold'>Value , </emphasis> +<emphasis role='bold'>Window</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request establishes a passive grab. +In the future, +the pointer is actively grabbed as described in +<emphasis role='bold'>GrabPointer ,</emphasis> +the last-pointer-grab time is set to the time at which the button was +pressed (as transmitted in the +<emphasis role='bold'>ButtonPress </emphasis> +event), and the +<emphasis role='bold'>ButtonPress </emphasis> +event is reported if all of the following conditions are true: +<!-- .IP bu 5 --> +The pointer is not grabbed and the specified button is logically pressed +when the specified modifier keys are logically down, +and no other buttons or modifier keys are logically down. +<!-- .IP bu 5 --> +The grab-window contains the pointer. +<!-- .IP bu 5 --> +The confine-to window (if any) is viewable. +<!-- .IP bu 5 --> +A passive grab on the same button/key combination does not exist +on any ancestor of grab-window. +</para> +<para> +The interpretation of the remaining arguments is the same as for +<emphasis role='bold'>GrabPointer .</emphasis> +The active grab is terminated automatically when +the logical state of the pointer has all buttons released, +independent of the logical state of modifier keys. +Note that the logical state of a device (as seen by means of the protocol) +may lag the physical state if device event processing is frozen. +</para> +<para> +This request overrides all previous passive grabs by the same client on +the same button/key combinations on the same window. +A modifier of +<emphasis role='bold'>AnyModifier </emphasis> +is equivalent to issuing the request for all possible modifier combinations +(including the combination of no modifiers). +It is not required that all specified modifiers have currently assigned +keycodes. +A button of +<emphasis role='bold'>AnyButton </emphasis> +is equivalent to issuing the request for all possible buttons. +Otherwise, it is not required that the button specified currently be assigned +to a physical button. +</para> +<para> +An +<emphasis role='bold'>Access </emphasis> +error is generated if some other client has already issued a +<emphasis role='bold'>GrabButton </emphasis> +request with the same button/key combination on the same window. +When using +<emphasis role='bold'>AnyModifier </emphasis> +or +<emphasis role='bold'>AnyButton , </emphasis> +the request fails completely (no grabs are established), and an +<emphasis role='bold'>Access </emphasis> +error is generated if there is a conflicting grab for any combination. +The request has no effect on an active grab. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>UngrabButton</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>modifiers</emphasis>: SETofKEYMASK or +<emphasis role='bold'>AnyModifier</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>button</emphasis>: BUTTON or +<emphasis role='bold'>AnyButton</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>grab-window</emphasis>: WINDOW +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Value ,</emphasis> +<emphasis role='bold'>Window</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request releases the passive button/key combination +on the specified window if it was grabbed by this client. +A modifiers argument of +<emphasis role='bold'>AnyModifier </emphasis> +is equivalent to issuing the request for all possible modifier +combinations (including the combination of no modifiers). +A button of +<emphasis role='bold'>AnyButton </emphasis> +is equivalent to issuing the request for all possible buttons. +The request has no effect on an active grab. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>ChangeActivePointerGrab</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>event-mask</emphasis>: SETofPOINTEREVENT + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>cursor</emphasis>: CURSOR or +<emphasis role='bold'>None</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>time</emphasis>: TIMESTAMP or +<emphasis role='bold'>CurrentTime</emphasis> +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Cursor ,</emphasis> +<emphasis role='bold'>Value</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request changes the specified dynamic parameters if the pointer is +actively grabbed by the client and the specified time is no earlier than the +last-pointer-grab time and no later than the current server time. +The interpretation of event-mask and cursor are the same as in +<emphasis role='bold'>GrabPointer .</emphasis> +This request has no effect on the parameters of any passive grabs established +with +<emphasis role='bold'>GrabButton .</emphasis> +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>GrabKeyboard</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>grab-window</emphasis>: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>owner-events</emphasis>: BOOL + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>pointer-mode</emphasis>, <emphasis remap='I'>keyboard-mode</emphasis>: +<emphasis role='bold'>{ Synchronous , </emphasis> +<emphasis role='bold'>Asynchronous }</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>time</emphasis>: TIMESTAMP or +<emphasis role='bold'>CurrentTime</emphasis> +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> + -> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +status: +<emphasis role='bold'>{ Success , </emphasis> +<emphasis role='bold'>AlreadyGrabbed , </emphasis> +<emphasis role='bold'>Frozen ,</emphasis> +<emphasis role='bold'>InvalidTime , </emphasis> +<emphasis role='bold'>NotViewable }</emphasis> +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Value ,</emphasis> +<emphasis role='bold'>Window</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request actively grabs control of the keyboard. +Further key events are reported only to the grabbing client. +This request overrides any active keyboard grab by this client. +</para> +<para> +If owner-events is +<emphasis role='bold'>False , </emphasis> +all generated key events are reported with respect to grab-window. +If owner-events is +<emphasis role='bold'>True </emphasis> +and if a generated key event would normally be reported to this client, +it is reported normally. +Otherwise, the event is reported with respect to the grab-window. +Both +<emphasis role='bold'>KeyPress </emphasis> +and +<emphasis role='bold'>KeyRelease </emphasis> +events are always reported, +independent of any event selection made by the client. +</para> +<para> +If keyboard-mode is +<emphasis role='bold'>Asynchronous ,</emphasis> +keyboard event processing continues normally. +If the keyboard is currently frozen by this client, +then processing of keyboard events is resumed. +If keyboard-mode is +<emphasis role='bold'>Synchronous , </emphasis> +the state of the keyboard (as seen by means of the protocol) appears to freeze. +No further keyboard events are generated by the server until the +grabbing client issues a releasing +<emphasis role='bold'>AllowEvents </emphasis> +request or until the keyboard grab is released. +Actual keyboard changes are not lost while the keyboard is frozen. +They are simply queued for later processing. +</para> +<para> +If pointer-mode is +<emphasis role='bold'>Asynchronous , </emphasis> +pointer event processing is unaffected by activation of the grab. +If pointer-mode is +<emphasis role='bold'>Synchronous , </emphasis> +the state of the pointer (as seen by means of the protocol) appears to freeze. +No further pointer events are generated by the server +until the grabbing client issues a releasing +<emphasis role='bold'>AllowEvents </emphasis> +request or until the keyboard grab is released. +Actual pointer changes are not lost while the pointer is frozen. +They are simply queued for later processing. +</para> +<para> +This request generates +<emphasis role='bold'>FocusIn </emphasis> +and +<emphasis role='bold'>FocusOut </emphasis> +events. +</para> +<para> +The request fails with status +<emphasis role='bold'>AlreadyGrabbed </emphasis> +if the keyboard is actively grabbed by some other client. +The request fails with status +<emphasis role='bold'>Frozen </emphasis> +if the keyboard is frozen by an active grab of another client. +The request fails with status +<emphasis role='bold'>NotViewable </emphasis> +if grab-window is not viewable. +The request fails with status +<emphasis role='bold'>InvalidTime </emphasis> +if the specified time is earlier than the last-keyboard-grab time +or later than the current server time. +Otherwise, the last-keyboard-grab time is set to the specified time with +<emphasis role='bold'>CurrentTime </emphasis> +replaced by the current server time. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>UngrabKeyboard</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>time</emphasis>: TIMESTAMP or +<emphasis role='bold'>CurrentTime</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request releases the keyboard if this client has it actively grabbed +(as a result of either +<emphasis role='bold'>GrabKeyboard </emphasis> +or +<emphasis role='bold'>GrabKey ) </emphasis> +and releases any queued events. +The request has no effect if the specified time is earlier than the +last-keyboard-grab time or is later than the current server time. +</para> +<para> +This request generates +<emphasis role='bold'>FocusIn </emphasis> +and +<emphasis role='bold'>FocusOut </emphasis> +events. +</para> +<para> +An +<emphasis role='bold'>UngrabKeyboard </emphasis> +is performed automatically if the event window for an active keyboard grab +becomes not viewable. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>GrabKey</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>key</emphasis>: KEYCODE or +<emphasis role='bold'>AnyKey</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>modifiers</emphasis>: SETofKEYMASK or +<emphasis role='bold'>AnyModifier</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>grab-window</emphasis>: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>owner-events</emphasis>: BOOL + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>pointer-mode</emphasis>, <emphasis remap='I'>keyboard-mode</emphasis>: +<emphasis role='bold'>{ Synchronous , </emphasis> +<emphasis role='bold'>Asynchronous }</emphasis> +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Access ,</emphasis> +<emphasis role='bold'>Value , </emphasis> +<emphasis role='bold'>Window</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request establishes a passive grab on the keyboard. +In the future, +the keyboard is actively grabbed as described in +<emphasis role='bold'>GrabKeyboard , </emphasis> +the last-keyboard-grab time is set to the time at which the key was pressed +(as transmitted in the +<emphasis role='bold'>KeyPress </emphasis> +event), and the +<emphasis role='bold'>KeyPress </emphasis> +event is reported if all of the following conditions are true: +<!-- .IP bu 5 --> +The keyboard is not grabbed and the specified key +(which can itself be a modifier key) is logically pressed +when the specified modifier keys are logically down, +and no other modifier keys are logically down. +<!-- .IP bu 5 --> +Either the grab-window is an ancestor of (or is) the focus window, +or the grab-window is a descendent of the focus window and contains the pointer. +<!-- .IP bu 5 --> +A passive grab on the same key combination does not exist +on any ancestor of grab-window. +</para> +<para> +The interpretation of the remaining arguments is the same as for +<emphasis role='bold'>GrabKeyboard .</emphasis> +The active grab is terminated automatically when the logical state +of the keyboard has the specified key released, +independent of the logical state of modifier keys. +Note that the logical state of a device (as seen by means of the protocol) +may lag the physical state if device event processing is frozen. +</para> +<para> +This request overrides all previous passive grabs by the same client +on the same key combinations on the same window. +A modifier of +<emphasis role='bold'>AnyModifier </emphasis> +is equivalent to issuing the request for all possible modifier combinations +(including the combination of no modifiers). +It is not required that all modifiers specified have +currently assigned keycodes. +A key of +<emphasis role='bold'>AnyKey </emphasis> +is equivalent to issuing the request for all possible keycodes. +Otherwise, the key must be in the range specified by min-keycode +and max-keycode in the connection setup (or a +<emphasis role='bold'>Value </emphasis> +error results). +</para> +<para> +An +<emphasis role='bold'>Access </emphasis> +error is generated if some other client has issued a +<emphasis role='bold'>GrabKey </emphasis> +with the same key combination on the same window. +When using +<emphasis role='bold'>AnyModifier </emphasis> +or +<emphasis role='bold'>AnyKey , </emphasis> +the request fails completely (no grabs are established), +and an +<emphasis role='bold'>Access </emphasis> +error is generated if there is a conflicting grab for any combination. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>UngrabKey</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>key</emphasis>: KEYCODE or +<emphasis role='bold'>AnyKey</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>modifiers</emphasis>: SETofKEYMASK or +<emphasis role='bold'>AnyModifier</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>grab-window</emphasis>: WINDOW +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Value ,</emphasis> +<emphasis role='bold'>Window</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request releases the key combination on the specified window +if it was grabbed by this client. +A modifiers argument of +<emphasis role='bold'>AnyModifier </emphasis> +is equivalent to issuing the request for all possible modifier combinations +(including the combination of no modifiers). +A key of +<emphasis role='bold'>AnyKey </emphasis> +is equivalent to issuing the request for all possible keycodes. +This request has no effect on an active grab. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>AllowEvents</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>mode</emphasis>: +<emphasis role='bold'>{ AsyncPointer , </emphasis> +<emphasis role='bold'>SyncPointer , </emphasis> +<emphasis role='bold'>ReplayPointer ,</emphasis> +<emphasis role='bold'>AsyncKeyboard , </emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>SyncKeyboard , </emphasis> +<emphasis role='bold'>ReplayKeyboard ,</emphasis> +<emphasis role='bold'>AsyncBoth , </emphasis> +<emphasis role='bold'>SyncBoth }</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>time</emphasis>: TIMESTAMP or +<emphasis role='bold'>CurrentTime</emphasis> +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Value</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request releases some queued events if the client has caused a device to +freeze. +The request has no effect if the specified time is earlier +than the last-grab time of the most recent active grab for the client +or if the specified time is later than the current server time. +</para> +<para> +For +<emphasis role='bold'>AsyncPointer , </emphasis> +if the pointer is frozen by the client, +pointer event processing continues normally. +If the pointer is frozen twice by the client on behalf of two separate grabs, +<emphasis role='bold'>AsyncPointer </emphasis> +thaws for both. +<emphasis role='bold'>AsyncPointer </emphasis> +has no effect if the pointer is not frozen by the client, +but the pointer need not be grabbed by the client. +</para> +<para> +For +<emphasis role='bold'>SyncPointer , </emphasis> +if the pointer is frozen and actively grabbed by the client, +pointer event processing continues normally until the next +<emphasis role='bold'>ButtonPress </emphasis> +or +<emphasis role='bold'>ButtonRelease </emphasis> +event is reported to the client, +at which time the pointer again appears to freeze. +However, if the reported event causes the pointer grab to be released, +then the pointer does not freeze. +<emphasis role='bold'>SyncPointer </emphasis> +has no effect if the pointer is not frozen by the +client or if the pointer is not grabbed by the client. +</para> +<para> +For +<emphasis role='bold'>ReplayPointer , </emphasis> +if the pointer is actively grabbed by the client and +is frozen as the result of an event having been sent to the client +(either from the activation of a +<emphasis role='bold'>GrabButton </emphasis> +or from a previous +<emphasis role='bold'>AllowEvents </emphasis> +with mode +<emphasis role='bold'>SyncPointer </emphasis> +but not from a +<emphasis role='bold'>GrabPointer ), </emphasis> +then the pointer grab is released and that event is completely reprocessed, +this time ignoring any passive grabs at or above (towards the root) +the grab-window of the grab just released. +The request has no effect if the pointer is not grabbed by the client +or if the pointer is not frozen as the result of an event. +</para> +<para> +For +<emphasis role='bold'>AsyncKeyboard , </emphasis> +if the keyboard is frozen by the client, +keyboard event processing continues normally. +If the keyboard is frozen twice by the client on behalf of two separate grabs, +<emphasis role='bold'>AsyncKeyboard </emphasis> +thaws for both. +<emphasis role='bold'>AsyncKeyboard </emphasis> +has no effect if the keyboard is not frozen by the client, +but the keyboard need not be grabbed by the client. +</para> +<para> +For +<emphasis role='bold'>SyncKeyboard ,</emphasis> +if the keyboard is frozen and actively grabbed by the client, +keyboard event processing continues normally until the next +<emphasis role='bold'>KeyPress </emphasis> +or +<emphasis role='bold'>KeyRelease </emphasis> +event is reported to the client, +at which time the keyboard again appears to freeze. +However, if the reported event causes the keyboard grab to be released, +then the keyboard does not freeze. +<emphasis role='bold'>SyncKeyboard </emphasis> +has no effect if the keyboard is not frozen by the client or +if the keyboard is not grabbed by the client. +</para> +<para> +For +<emphasis role='bold'>ReplayKeyboard , </emphasis> +if the keyboard is actively grabbed by the client +and is frozen as the result of an event having been sent to the client +(either from the activation of a +<emphasis role='bold'>GrabKey </emphasis> +or from a previous +<emphasis role='bold'>AllowEvents </emphasis> +with mode +<emphasis role='bold'>SyncKeyboard </emphasis> +but not from a +<emphasis role='bold'>GrabKeyboard ), </emphasis> +then the keyboard grab is released and that event is completely reprocessed, +this time ignoring any passive grabs at or above (towards the root) +the grab-window of the grab just released. +The request has no effect if the keyboard is not grabbed by the client +or if the keyboard is not frozen as the result of an event. +</para> +<para> +For +<emphasis role='bold'>SyncBoth , </emphasis> +if both pointer and keyboard are frozen by the client, +event processing (for both devices) continues normally until the next +<emphasis role='bold'>ButtonPress , </emphasis> +<emphasis role='bold'>ButtonRelease , </emphasis> +<emphasis role='bold'>KeyPress , </emphasis> +or +<emphasis role='bold'>KeyRelease </emphasis> +event is reported to the client for a grabbed device +(button event for the pointer, key event for the keyboard), +at which time the devices again appear to freeze. +However, if the reported event causes the grab to be released, +then the devices do not freeze (but if the other device is still +grabbed, then a subsequent event for it will still cause both devices +to freeze). +<emphasis role='bold'>SyncBoth </emphasis> +has no effect unless both pointer and keyboard are frozen by the client. +If the pointer or keyboard is frozen twice by the client on behalf +of two separate grabs, +<emphasis role='bold'>SyncBoth </emphasis> +thaws for both (but a subsequent freeze for +<emphasis role='bold'>SyncBoth </emphasis> +will only freeze each device once). +</para> +<para> +For +<emphasis role='bold'>AsyncBoth , </emphasis> +if the pointer and the keyboard are frozen by the client, +event processing for both devices continues normally. +If a device is frozen twice by the client on behalf of two separate grabs, +<emphasis role='bold'>AsyncBoth </emphasis> +thaws for both. +<emphasis role='bold'>AsyncBoth </emphasis> +has no effect unless both pointer and keyboard are frozen by the client. +</para> +<para> +<emphasis role='bold'>AsyncPointer , </emphasis> +<emphasis role='bold'>SyncPointer , </emphasis> +and +<emphasis role='bold'>ReplayPointer </emphasis> +have no effect on processing of keyboard events. +<emphasis role='bold'>AsyncKeyboard , </emphasis> +<emphasis role='bold'>SyncKeyboard , </emphasis> +and +<emphasis role='bold'>ReplayKeyboard </emphasis> +have no effect on processing of pointer events. +</para> +<para> +It is possible for both a pointer grab and a keyboard grab to be active +simultaneously (by the same or different clients). +When a device is frozen on behalf of either grab, +no event processing is performed for the device. +It is possible for a single device to be frozen because of both grabs. +In this case, the freeze must be released on behalf of both grabs +before events can again be processed. +If a device is frozen twice by a single client, then a single +<emphasis role='bold'>AllowEvents </emphasis> +releases both. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>GrabServer</emphasis> +</para> +<para> +This request disables processing of requests and close-downs on all +connections other than the one this request arrived on. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>UngrabServer</emphasis> +</para> +<para> +This request restarts processing of requests and close-downs +on other connections. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>QueryPointer</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>window</emphasis>: WINDOW +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> + -> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +root: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +child: WINDOW or +<emphasis role='bold'>None</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +same-screen: BOOL + </entry> + </row> + <row rowsep='0'> + <entry> +root-x, root-y, win-x, win-y: INT16 + </entry> + </row> + <row rowsep='0'> + <entry> +mask: SETofKEYBUTMASK +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Window</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +The root window the pointer is logically on and the pointer coordinates +relative to the root's origin are returned. +If same-screen is +<emphasis role='bold'>False ,</emphasis> +then the pointer is not on the same screen as the argument window, +child is +<emphasis role='bold'>None ,</emphasis> +and win-x and win-y are zero. +If same-screen is +<emphasis role='bold'>True ,</emphasis> +then win-x and win-y are the pointer coordinates relative to the +argument window's origin, and child is the child containing the +pointer, if any. +The current logical state of the modifier keys and the buttons +are also returned. +Note that the logical state of a device (as seen by means of the protocol) +may lag the physical state if device event processing is frozen. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>GetMotionEvents</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>start</emphasis>, +<emphasis remap='I'>stop</emphasis>: TIMESTAMP or +<emphasis role='bold'>CurrentTime</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>window</emphasis>: WINDOW +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> + -> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +events: LISTofTIMECOORD +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +where: + </entry> + </row> + <row rowsep='0'> + <entry> +TIMECOORD: [x, y: INT16 + </entry> + </row> + <row rowsep='0'> + <entry> + time: TIMESTAMP] +<!-- .TE --> +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Window</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request returns all events in the motion history buffer that fall +between the specified start and stop times (inclusive) +and that have coordinates that lie within (including borders) +the specified window at its present placement. +The x and y coordinates are reported relative to the origin of the window. +</para> +<para> +If the start time is later than the stop time or if the start time is +in the future, no events are returned. +If the stop time is in the future, it is equivalent to specifying +<emphasis role='bold'>CurrentTime .</emphasis> +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>TranslateCoordinates</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>src-window</emphasis>, <emphasis remap='I'>dst-window</emphasis>: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>src-x</emphasis>, <emphasis remap='I'>src-y</emphasis>: INT16 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> + -> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +same-screen: BOOL + </entry> + </row> + <row rowsep='0'> + <entry> +child: WINDOW or +<emphasis role='bold'>None</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +dst-x, dst-y: INT16 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Window</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +The src-x and src-y coordinates are taken relative to src-window's +origin and are returned as dst-x and dst-y coordinates relative to +dst-window's origin. +If same-screen is +<emphasis role='bold'>False , </emphasis> +then src-window and dst-window are on different screens, +and dst-x and dst-y are zero. +If the coordinates are contained in a mapped child of dst-window, +then that child is returned. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>WarpPointer</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>src-window</emphasis>: WINDOW or +<emphasis role='bold'>None</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>dst-window</emphasis>: WINDOW or +<emphasis role='bold'>None</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>src-x</emphasis>, <emphasis remap='I'>src-y</emphasis>: INT16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>src-width</emphasis>, <emphasis remap='I'>src-height</emphasis>: CARD16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>dst-x</emphasis>, <emphasis remap='I'>dst-y</emphasis>: INT16 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Window</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +If dst-window is +<emphasis role='bold'>None , </emphasis> +this request moves the pointer by offsets [dst-x, dst-y] +relative to the current position of the pointer. +If dst-window is a window, +this request moves the pointer to [dst-x, dst-y] relative to dst-window's +origin. +However, if src-window is not +<emphasis role='bold'>None , </emphasis> +the move only takes place if src-window contains the pointer +and the pointer is contained in the specified rectangle of src-window. +</para> +<para> +The src-x and src-y coordinates are relative to src-window's origin. +If src-height is zero, +it is replaced with the current height of src-window minus src-y. +If src-width is zero, +it is replaced with the current width of src-window minus src-x. +</para> +<para> +This request cannot be used to move the pointer outside the confine-to +window of an active pointer grab. +An attempt will only move the pointer as far as the closest edge +of the confine-to window. +</para> +<para> +This request will generate events just as if the user had instantaneously +moved the pointer. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>SetInputFocus</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>focus</emphasis>: WINDOW or +<emphasis role='bold'>PointerRoot </emphasis> +or +<emphasis role='bold'>None</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>revert-to</emphasis>: +<emphasis role='bold'>{ Parent , </emphasis> +<emphasis role='bold'>PointerRoot , </emphasis> +<emphasis role='bold'>None }</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>time</emphasis>: TIMESTAMP or +<emphasis role='bold'>CurrentTime</emphasis> +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Match ,</emphasis> +<emphasis role='bold'>Value , </emphasis> +<emphasis role='bold'>Window</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request changes the input focus and the last-focus-change time. +The request has no effect if the specified time is earlier than the current +last-focus-change time or is later than the current server time. +Otherwise, the last-focus-change time is set to the specified time +with +<emphasis role='bold'>CurrentTime </emphasis> +replaced by the current server time. +</para> +<para> +If +<emphasis role='bold'>None </emphasis> +is specified as the focus, +all keyboard events are discarded until a new focus window is set. +In this case, the revert-to argument is ignored. +</para> +<para> +If a window is specified as the focus, +it becomes the keyboard's focus window. +If a generated keyboard event would normally be reported to +this window or one of its inferiors, the event is reported normally. +Otherwise, the event is reported with respect to the focus window. +</para> +<para> +If +<emphasis role='bold'>PointerRoot </emphasis> +is specified as the focus, +the focus window is dynamically taken to be the root window of whatever screen +the pointer is on at each keyboard event. +In this case, +the revert-to argument is ignored. +</para> +<para> +This request generates +<emphasis role='bold'>FocusIn </emphasis> +and +<emphasis role='bold'>FocusOut </emphasis> +events. +</para> +<para> +The specified focus window must be viewable at the time of the request (or a +<emphasis role='bold'>Match </emphasis> +error results). +If the focus window later becomes not viewable, +the new focus window depends on the revert-to argument. +If revert-to is +<emphasis role='bold'>Parent , </emphasis> +the focus reverts to the parent (or the closest viewable ancestor) +and the new revert-to value is taken to be +<emphasis role='bold'>None .</emphasis> +If revert-to is +<emphasis role='bold'>PointerRoot </emphasis> +or +<emphasis role='bold'>None , </emphasis> +the focus reverts to that value. +When the focus reverts, +<emphasis role='bold'>FocusIn </emphasis> +and +<emphasis role='bold'>FocusOut </emphasis> +events are generated, +but the last-focus-change time is not affected. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>GetInputFocus</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> + -> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +focus: WINDOW or +<emphasis role='bold'>PointerRoot </emphasis> +or +<emphasis role='bold'>None</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +revert-to: +<emphasis role='bold'>{ Parent , </emphasis> +<emphasis role='bold'>PointerRoot , </emphasis> +<emphasis role='bold'>None }</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request returns the current focus state. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>QueryKeymap</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> + -> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +keys: LISTofCARD8 +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request returns a bit vector for the logical state of the keyboard. +Each bit set to 1 indicates that the corresponding key is currently pressed. +The vector is represented as 32 bytes. +Byte N (from 0) contains the bits for keys 8N to 8N + 7 +with the least significant bit in the byte representing key 8N. +Note that the logical state of a device (as seen by means of the protocol) +may lag the physical state if device event processing is frozen. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>OpenFont</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>fid</emphasis>: FONT + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>name</emphasis>: STRING8 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Alloc ,</emphasis> +<emphasis role='bold'>IDChoice , </emphasis> +<emphasis role='bold'>Name</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request loads the specified font, if necessary, +and associates identifier fid with it. +The font name should use the ISO Latin-1 encoding, +and uppercase and lowercase do not matter. +When the characters ``?'' and ``*'' are used in a font name, a +pattern match is performed and any matching font is used. +In the pattern, +the ``?'' character (octal value 77) will match any single character, +and the ``*'' character (octal value 52) will match any number +of characters. +A structured format for font names is specified in the +X.Org standard <emphasis remap='I'>X Logical Font Description Conventions</emphasis>. +</para> +<para> +Fonts are not associated with a particular screen +and can be stored as a component of any graphics context. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>CloseFont</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>font</emphasis>: FONT +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Font</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request deletes the association between the resource ID and the font. +The font itself will be freed when no other resource references it. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>QueryFont</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>font</emphasis>: FONTABLE +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> + -> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +font-info: FONTINFO + </entry> + </row> + <row rowsep='0'> + <entry> +char-infos: LISTofCHARINFO +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +where: +<!-- .IP --> +<!-- .TS --> +l lw(3i). +T{ +FONTINFO: +T} T{ +[draw-direction: +<emphasis role='bold'>{ LeftToRight , </emphasis> +<emphasis role='bold'>RightToLeft }</emphasis> +T} + \ min-char-or-byte2, max-char-or-byte2: CARD16 + \ min-byte1, max-byte1: CARD8 + \ all-chars-exist: BOOL + \ default-char: CARD16 + \ min-bounds: CHARINFO + \ max-bounds: CHARINFO + \ font-ascent: INT16 + \ font-descent: INT16 + \ properties: LISTofFONTPROP] +FONTPROP: [name: ATOM + \ value: <32-bit-value>] +CHARINFO: [left-side-bearing: INT16 + \ right-side-bearing: INT16 + \ character-width: INT16 + \ ascent: INT16 + \ descent: INT16 + \ attributes: CARD16] +<!-- .TE --> +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Font</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request returns logical information about a font. +If a gcontext is given for font, +the currently contained font is used. +</para> +<para> +The draw-direction is just a hint +and indicates whether most char-infos have a positive, +<emphasis role='bold'>LeftToRight ,</emphasis> +or a negative, +<emphasis role='bold'>RightToLeft ,</emphasis> +character-width metric. +The core protocol defines no support for vertical text. +</para> +<para> +If min-byte1 and max-byte1 are both zero, +then min-char-or-byte2 specifies the linear character index corresponding +to the first element of char-infos, +and max-char-or-byte2 specifies the linear character index of the last element. +If either min-byte1 or max-byte1 are nonzero, +then both min-char-or-byte2 and max-char-or-byte2 will be less than 256, +and the 2-byte character index values corresponding to char-infos element N +(counting from 0) are: +<!-- .DS --> +byte1 = N/D + min-byte1 +byte2 = N\\\\D + min-char-or-byte2 +<!-- .DE --> +</para> +<para> +where: +<!-- .DS --> +D = max-char-or-byte2 - min-char-or-byte2 + 1 +/ = integer division +\\\\ = integer modulus +<!-- .DE --> +</para> +<para> +If char-infos has length zero, +then min-bounds and max-bounds will be identical, +and the effective char-infos is one filled with this char-info, of length: +<!-- .DS --> +L = D * (max-byte1 - min-byte1 + 1) +<!-- .DE --> +</para> +<para> +That is, +all glyphs in the specified linear or matrix range have the same information, +as given by min-bounds (and max-bounds). +If all-chars-exist is +<emphasis role='bold'>True , </emphasis> +then all characters in char-infos have nonzero bounding boxes. +</para> +<para> +The default-char specifies the character that will be used when an +undefined or nonexistent character is used. +Note that default-char is a CARD16, not CHAR2B. +For a font using 2-byte matrix format, +the default-char has byte1 in the most significant byte +and byte2 in the least significant byte. +If the default-char itself specifies an undefined or nonexistent character, +then no printing is performed for an undefined or nonexistent character. +</para> +<para> +The min-bounds and max-bounds contain the minimum and maximum values of +each individual CHARINFO component over all char-infos (ignoring +nonexistent characters). +The bounding box of the font (that is, the +smallest rectangle enclosing the shape obtained by superimposing all +characters at the same origin [x,y]) has its upper-left coordinate at: +<!-- .DS --> +[x + min-bounds.left-side-bearing, y - max-bounds.ascent] +<!-- .DE --> +with a width of: +<!-- .DS --> +max-bounds.right-side-bearing - min-bounds.left-side-bearing +<!-- .DE --> +</para> +<para> +and a height of: +<!-- .DS --> +max-bounds.ascent + max-bounds.descent +<!-- .DE --> +</para> +<para> +The font-ascent is the logical extent of the font above the baseline +and is used for determining line spacing. +Specific characters may extend beyond this. +The font-descent is the logical extent of the font at or below the baseline +and is used for determining line spacing. +Specific characters may extend beyond this. +If the baseline is at Y-coordinate y, +then the logical extent of the font is inclusive +between the Y-coordinate values (y - font-ascent) and (y + font-descent - 1). +</para> +<para> +A font is not guaranteed to have any properties. +The interpretation of the property value (for example, INT32, CARD32) +must be derived from <emphasis remap='I'>a priori</emphasis> knowledge of the property. +A basic set of font properties is specified in the X.Org +standard <emphasis remap='I'>X Logical Font Description Conventions</emphasis>. +</para> +<para> +For a character origin at [x,y], +the bounding box of a character (that is, +the smallest rectangle enclosing the character's shape), described in +terms of CHARINFO components, is a rectangle with its upper-left corner at: +<!-- .DS --> +[x + left-side-bearing, y - ascent] +<!-- .DE --> +</para> +<para> +with a width of: +<!-- .DS --> +right-side-bearing - left-side-bearing +<!-- .DE --> +</para> +<para> +and a height of: +<!-- .DS --> +ascent + descent +<!-- .DE --> +</para> +<para> +and the origin for the next character is defined to be: +<!-- .DS --> +[x + character-width, y] +<!-- .DE --> +</para> +<para> +Note that the baseline is logically viewed as being just below +nondescending characters (when descent is zero, only pixels with +Y-coordinates less than y are drawn) and that the origin is logically +viewed as being coincident with the left edge of a nonkerned character +(when left-side-bearing is zero, no pixels with X-coordinate less than +x are drawn). +</para> +<para> +Note that CHARINFO metric values can be negative. +</para> +<para> +A nonexistent character is represented with all CHARINFO components +zero. +</para> +<para> +The interpretation of the per-character attributes field is +server-dependent. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>QueryTextExtents</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>font</emphasis>: FONTABLE + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>string</emphasis>: STRING16 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> + -> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +draw-direction: +<emphasis role='bold'>{ LeftToRight , </emphasis> +<emphasis role='bold'>RightToLeft }</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +font-ascent: INT16 + </entry> + </row> + <row rowsep='0'> + <entry> +font-descent: INT16 + </entry> + </row> + <row rowsep='0'> + <entry> +overall-ascent: INT16 + </entry> + </row> + <row rowsep='0'> + <entry> +overall-descent: INT16 + </entry> + </row> + <row rowsep='0'> + <entry> +overall-width: INT32 + </entry> + </row> + <row rowsep='0'> + <entry> +overall-left: INT32 + </entry> + </row> + <row rowsep='0'> + <entry> +overall-right: INT32 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Font</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request returns the logical extents of the specified string of characters +in the specified font. +If a gcontext is given for font, +the currently contained font is used. +The draw-direction, font-ascent, and font-descent are the same as +described in +<emphasis role='bold'>QueryFont .</emphasis> +The overall-ascent is the maximum of the ascent metrics of all characters +in the string, and the overall-descent is the maximum of the descent metrics. +The overall-width is the sum of the character-width metrics of all characters +in the string. +For each character in the string, +let W be the sum of the character-width metrics of all characters preceding it +in the string, +let L be the left-side-bearing metric of the character plus W, +and let R be the right-side-bearing metric of the character plus W. +The overall-left is the minimum L of all characters in the string, +and the overall-right is the maximum R. +</para> +<para> +For fonts defined with linear indexing rather than 2-byte matrix indexing, +the server will interpret each CHAR2B as a 16-bit number that +has been transmitted most significant byte first (that is, byte1 of the +CHAR2B is taken as the most significant byte). +</para> +<para> +Characters with all zero metrics are ignored. +If the font has no defined default-char, +then undefined characters in the string are also ignored. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>ListFonts</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>pattern</emphasis>: STRING8 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>max-names</emphasis>: CARD16 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> + -> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +names: LISTofSTRING8 +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request returns a list +of available font names (as controlled by the font search path; see +<emphasis role='bold'>SetFontPath </emphasis> +request) +that match the pattern. +At most, max-names names will be returned. +The pattern should use the ISO Latin-1 encoding, +and uppercase and lowercase do not matter. +In the pattern, +the ``?'' character (octal value 77) will match any single character, +and the ``*'' character (octal value 52) will match any number +of characters. +The returned names are in lowercase. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>ListFontsWithInfo</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>pattern</emphasis>: STRING8 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>max-names</emphasis>: CARD16 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> + -> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +name: STRING8 + </entry> + </row> + <row rowsep='0'> + <entry> +info FONTINFO + </entry> + </row> + <row rowsep='0'> + <entry> +replies-hint: CARD32 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +where: +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +FONTINFO: <same type definition as in +<emphasis role='bold'>QueryFont</emphasis>> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request is similar to +<emphasis role='bold'>ListFonts , </emphasis> +but it also returns information about each font. +The information returned for each font is identical to what +<emphasis role='bold'>QueryFont </emphasis> +would return except that the per-character metrics are not returned. +Note that this request can generate multiple replies. +With each reply, +replies-hint may provide an indication of how many more fonts will be returned. +This number is a hint only and may be larger or smaller than +the number of fonts actually returned. +A zero value does not guarantee that no more fonts will be returned. +After the font replies, +a reply with a zero-length name is sent to indicate the end of the reply +sequence. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>SetFontPath</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>path</emphasis>: LISTofSTRING8 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Value</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request defines the search path for font lookup. +There is only one search path per server, not one per client. +The interpretation of the strings is operating-system-dependent, +but the strings are intended to specify directories to be searched in the +order listed. +</para> +<para> +Setting the path to the empty list restores the default path defined +for the server. +</para> +<para> +As a side effect of executing this request, +the server is guaranteed to flush all cached information about fonts +for which there currently are no explicit resource IDs allocated. +</para> +<para> +The meaning of an error from this request is system specific. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>GetFontPath</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> + -> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +path: LISTofSTRING8 +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request returns the current search path for fonts. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>CreatePixmap</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>pid</emphasis>: PIXMAP + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>drawable</emphasis>: DRAWABLE + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>depth</emphasis>: CARD8 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>width</emphasis>, <emphasis remap='I'>height</emphasis>: CARD16 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Alloc ,</emphasis> +<emphasis role='bold'>Drawable , </emphasis> +<emphasis role='bold'>IDChoice , </emphasis> +<emphasis role='bold'>Value</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request creates a pixmap and assigns the identifier pid to it. +The width and height must be nonzero (or a +<emphasis role='bold'>Value </emphasis> +error results). +The depth must be one of the depths supported by the root of the specified +drawable (or a +<emphasis role='bold'>Value </emphasis> +error results). +The initial contents of the pixmap are undefined. +</para> +<para> +It is legal to pass an +<emphasis role='bold'>InputOnly </emphasis> +window as a drawable to this request. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>FreePixmap</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>pixmap</emphasis>: PIXMAP +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Pixmap</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request deletes the association between the resource ID and the pixmap. +The pixmap storage will be freed when no other resource references it. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>CreateGC</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>cid</emphasis>: GCONTEXT + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>drawable</emphasis>: DRAWABLE + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>value-mask</emphasis>: BITMASK + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>value-list</emphasis>: LISTofVALUE +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Alloc ,</emphasis> +<emphasis role='bold'>Drawable , </emphasis> +<emphasis role='bold'>Font , </emphasis> +<emphasis role='bold'>IDChoice , </emphasis> +<emphasis role='bold'>Match , </emphasis> +<emphasis role='bold'>Pixmap , </emphasis> +<emphasis role='bold'>Value</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> + +<para> +This request creates a graphics context +and assigns the identifier cid to it. +The gcontext can be used with any destination drawable having the same root +and depth as the specified drawable; +use with other drawables results in a +<emphasis role='bold'>Match </emphasis> +error. +</para> +<para> +The value-mask and value-list specify which components are to be +explicitly initialized. +The context components are: +</para> + +<informaltable frame='topbot'> + <tgroup cols='2' align='left'> + <colspec colname='c1' colsep='0'/> + <colspec colname='c2' colsep='0'/> + <thead> + <row> + <entry>Component</entry> + <entry>Type</entry> + </row> + </thead> + <tbody> + <row rowsep='0'> + <entry>function</entry> + <entry> +{ <emphasis role='bold'>Clear</emphasis>, +<emphasis role='bold'>And</emphasis>, +<emphasis role='bold'>AndReverse</emphasis>, +<emphasis role='bold'>Copy</emphasis>, +<emphasis role='bold'>AndInverted</emphasis>, +<emphasis role='bold'>NoOp</emphasis>, +<emphasis role='bold'>Xor</emphasis>, +<emphasis role='bold'>Or</emphasis>, +<emphasis role='bold'>Nor</emphasis>, +<emphasis role='bold'>Equiv</emphasis>, +<emphasis role='bold'>Invert</emphasis>, +<emphasis role='bold'>OrReverse</emphasis>, +<emphasis role='bold'>CopyInverted</emphasis>, +<emphasis role='bold'>OrInverted</emphasis>, +<emphasis role='bold'>Nand</emphasis>, +<emphasis role='bold'>Set</emphasis> } + </entry> + </row> + <row rowsep='0'> + <entry>plane-mask</entry> + <entry>CARD32</entry> + </row> + <row rowsep='0'> + <entry>foreground</entry> + <entry>CARD32</entry> + </row> + <row rowsep='0'> + <entry>background</entry> + <entry>CARD32</entry> + </row> + <row rowsep='0'> + <entry>line-width</entry> + <entry>CARD16</entry> + </row> + <row rowsep='0'> + <entry>line-style</entry> + <entry> +{ <emphasis role='bold'>Solid</emphasis>, +<emphasis role='bold'>OnOffDash</emphasis>, +<emphasis role='bold'>DoubleDash</emphasis> } + </entry> + </row> + <row rowsep='0'> + <entry>cap-style</entry> + <entry> +{ <emphasis role='bold'>NotLast</emphasis>, +<emphasis role='bold'>Butt</emphasis>, +<emphasis role='bold'>Round</emphasis>, +<emphasis role='bold'>Projecting</emphasis> } + </entry> + </row> + <row rowsep='0'> + <entry>join-style</entry> + <entry> +{ <emphasis role='bold'>Miter</emphasis>, +<emphasis role='bold'>Round</emphasis>, +<emphasis role='bold'>Bevel</emphasis> } + </entry> + </row> + <row rowsep='0'> + <entry>fill-style</entry> + <entry> +{ <emphasis role='bold'>Solid</emphasis>, +<emphasis role='bold'>Tiled</emphasis>, +<emphasis role='bold'>OpaqueStippled</emphasis>, +<emphasis role='bold'>Stippled</emphasis> } + </entry> + </row> + <row rowsep='0'> + <entry>fill-rule</entry> + <entry> +{ <emphasis role='bold'>EvenOdd</emphasis>, +<emphasis role='bold'>Winding</emphasis> } + </entry> + </row> + <row rowsep='0'> + <entry>arc-mode</entry> + <entry> +{ <emphasis role='bold'>Chord</emphasis>, +<emphasis role='bold'>PieSlice</emphasis> } + </entry> + </row> + <row rowsep='0'> + <entry>tile</entry> + <entry>PIXMAP</entry> + </row> + <row rowsep='0'> + <entry>stipple</entry> + <entry>PIXMAP</entry> + </row> + <row rowsep='0'> + <entry>tile-stipple-x-origin</entry> + <entry>INT16</entry> + </row> + <row rowsep='0'> + <entry>tile-stipple-y-origin</entry> + <entry>INT16</entry> + </row> + <row rowsep='0'> + <entry>font</entry> + <entry>FONT</entry> + </row> + <row rowsep='0'> + <entry>subwindow-mode</entry> + <entry> +{ <emphasis role='bold'>ClipByChildren</emphasis>, +<emphasis role='bold'>IncludeInferiors</emphasis> } + </entry> + </row> + <row rowsep='0'> + <entry>graphics-exposures</entry> + <entry>BOOL</entry> + </row> + <row rowsep='0'> + <entry>clip-x-origin</entry> + <entry>INT16</entry> + </row> + <row rowsep='0'> + <entry>clip-y-origin</entry> + <entry>INT16</entry> + </row> + <row rowsep='0'> + <entry>clip-mask</entry> + <entry> +PIXMAP or +<emphasis role='bold'>None</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry>dash-offset</entry> + <entry>CARD16</entry> + </row> + <row rowsep='0'> + <entry>dashes</entry> + <entry>CARD8</entry> + </row> + </tbody> + </tgroup> +</informaltable> + +<para> +In graphics operations, +given a source and destination pixel, +the result is computed bitwise on corresponding bits of the pixels; +that is, a Boolean operation is performed in each bit plane. +The plane-mask restricts the operation to a subset of planes, +so the result is: +</para> + +<literallayout class="monospaced"> +((src FUNC dst) AND plane-mask) OR (dst AND (NOT plane-mask)) +</literallayout> + +<para> +Range checking is not performed on the values for foreground, background, +or plane-mask. +They are simply truncated to the appropriate number of bits. +</para> + +<para> +The meanings of the functions are: +</para> + +<informaltable frame='none'> + <tgroup cols='2' align='left'> + <colspec colname='c1' colsep='0'/> + <colspec colname='c2' colsep='0'/> + <thead> + <row> + <entry>Function</entry> + <entry>Operation</entry> + </row> + </thead> + <tbody> + <row rowsep='0'> + <entry> +<emphasis role='bold'>Clear</emphasis> + </entry> + <entry>0</entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>And</emphasis> + </entry> + <entry>src AND dst</entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>AndReverse</emphasis> + </entry> + <entry>src AND (NOT dst)</entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>Copy</emphasis> + </entry> + <entry>src</entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>AndInverted</emphasis> + </entry> + <entry>(NOT src) AND dst</entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>NoOp</emphasis> + </entry> + <entry>dst</entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>Xor</emphasis> + </entry> + <entry>src XOR dst</entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>Or</emphasis> + </entry> + <entry>src OR dst</entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>Nor</emphasis> + </entry> + <entry>(NOT src) AND (NOT dst)</entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>Equiv</emphasis> + </entry> + <entry>(NOT src) XOR dst</entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>Invert</emphasis> + </entry> + <entry>NOT dst</entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>OrReverse</emphasis> + </entry> + <entry>src OR (NOT dst)</entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>CopyInverted</emphasis> + </entry> + <entry>NOT src</entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>OrInverted</emphasis> + </entry> + <entry>(NOT src) OR dst</entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>Nand</emphasis> + </entry> + <entry>(NOT src) OR (NOT dst)</entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>Set</emphasis> + </entry> + <entry>1</entry> + </row> + </tbody> + </tgroup> +</informaltable> + +<para> +The line-width is measured in pixels and can be greater than or equal to +one, a wide line, or the special value zero, a thin line. +</para> + +<para> +Wide lines are drawn centered on the path described by the graphics request. +Unless otherwise specified by the join or cap style, +the bounding box of a wide line with endpoints [x1, y1], [x2, y2] and +width w is a rectangle with vertices at the following real coordinates: +</para> + +<literallayout class="monospaced"> +[x1-(w*sn/2), y1+(w*cs/2)], [x1+(w*sn/2), y1-(w*cs/2)], +[x2-(w*sn/2), y2+(w*cs/2)], [x2+(w*sn/2), y2-(w*cs/2)] +</literallayout> + +<para> +The sn is the sine of the angle of the line and cs is the cosine of +the angle of the line. +A pixel is part of the line (and hence drawn) if the center of the pixel +is fully inside the bounding box, which is viewed as having infinitely thin +edges. +If the center of the pixel is exactly on the bounding box, +it is part of the line if and only if the interior is immediately to its right +(x increasing direction). +Pixels with centers on a horizontal edge are a special case and are part of +the line if and only if the interior or the boundary is immediately below +(y increasing direction) and if the interior or the boundary is immediately +to the right (x increasing direction). +Note that this description is a mathematical model describing the pixels +that are drawn for a wide line and does not imply that trigonometry is required +to implement such a model. +Real or fixed point arithmetic is recommended for computing the corners of the +line endpoints for lines greater than one pixel in width. +</para> +<para> +Thin lines (zero line-width) are nominally one pixel wide lines drawn using an +unspecified, device-dependent algorithm. +There are only two constraints on this algorithm. +First, if a line is drawn unclipped from [x1,y1] to [x2,y2] +and another line is drawn unclipped from [x1+dx,y1+dy] to [x2+dx,y2+dy], +then a point [x,y] is touched by drawing the first line if +and only if the point [x+dx,y+dy] is touched by drawing the second line. +Second, the effective set of points comprising a line cannot be affected +by clipping. +Thus, a point is touched in a clipped line if and only if the point lies +inside the clipping region and the point would be touched by the line +when drawn unclipped. +</para> +<para> +Note that a wide line drawn from [x1,y1] to [x2,y2] always draws the +same pixels as a wide line drawn from [x2,y2] to [x1,y1], not counting +cap-style and join-style. +Implementors are encouraged to make this property true for thin lines, +but it is not required. +A line-width of zero may differ from a line-width of one in which pixels +are drawn. +In general, +drawing a thin line will be faster than drawing a wide line of width one, +but thin lines may not mix well aesthetically with wide lines +because of the different drawing algorithms. +If it is desirable to obtain precise and uniform results across all displays, +a client should always use a line-width of one, rather than a line-width of +zero. +</para> +<para> +The line-style defines which sections of a line are drawn: +</para> + +<informaltable frame='none'> + <tgroup cols='2' align='left'> + <colspec colname='c1' colsep='0'/> + <colspec colname='c2' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<emphasis role='bold'>Solid</emphasis> + </entry> + <entry> +The full path of the line is drawn. + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>DoubleDash</emphasis> + </entry> + <entry> +The full path of the line is drawn, +but the even dashes are filled differently than the odd dashes +(see fill-style), with +<emphasis role='bold'>Butt </emphasis> +cap-style used where even and odd dashes meet. + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>OnOffDash</emphasis> + </entry> + <entry> +Only the even dashes are drawn, +and cap-style applies to all internal ends of the individual dashes +(except +<emphasis role='bold'>NotLast</emphasis> +is treated as +<emphasis role='bold'>Butt</emphasis>). + </entry> + </row> + </tbody> + </tgroup> +</informaltable> + +<para> +The cap-style defines how the endpoints of a path are drawn: +</para> + +<informaltable frame='none'> + <tgroup cols='2' align='left'> + <colspec colname='c1' colsep='0'/> + <colspec colname='c2' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<emphasis role='bold'>NotLast</emphasis> + </entry> + <entry> +The result is equivalent to +<emphasis role='bold'>Butt</emphasis>, +except that for a line-width of zero the final endpoint is not drawn. + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>Butt</emphasis> + </entry> + <entry> +The result is square at the endpoint (perpendicular to the slope of the +line) with no projection beyond. + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>Round</emphasis> + </entry> + <entry> +The result is a circular arc with its diameter equal to the line-width, +centered on the endpoint; it is equivalent to +<emphasis role='bold'>Butt </emphasis> +for line-width zero. + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>Projecting</emphasis> + </entry> + <entry> +The result is square at the end, but the path continues beyond the +endpoint for a distance equal to half the line-width; +it is equivalent to +<emphasis role='bold'>Butt</emphasis> +for line-width zero. + </entry> + </row> + </tbody> + </tgroup> +</informaltable> + + + +<para> +The join-style defines how corners are drawn for wide lines: +</para> + +<informaltable frame='none'> + <tgroup cols='2' align='left'> + <colspec colname='c1' colsep='0'/> + <colspec colname='c2' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<emphasis role='bold'>Miter</emphasis> + </entry> + <entry> +The outer edges of the two lines extend to meet at an angle. +However, if the angle is less than 11 degrees, a +<emphasis role='bold'>Bevel </emphasis> +join-style is used instead. + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>Round</emphasis> + </entry> + <entry> +The result is a circular arc with a diameter equal to the line-width, +centered on the joinpoint. + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>Bevel</emphasis> + </entry> + <entry> +The result is +<emphasis role='bold'>Butt </emphasis> +endpoint styles, and then the triangular notch is filled. + </entry> + </row> + </tbody> + </tgroup> +</informaltable> + + +<para> +For a line with coincident endpoints (x1=x2, y1=y2), when the cap-style +is applied to both endpoints, the semantics depends on the line-width +and the cap-style: +</para> + +<informaltable frame='none'> + <tgroup cols='3' align='left'> + <colspec colname='c1' colsep='0'/> + <colspec colname='c2' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<emphasis role='bold'>NotLast</emphasis> + </entry> + <entry>thin</entry> + <entry> +This is device-dependent, but the desired effect is that nothing is drawn. + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>Butt</emphasis> + </entry> + <entry>thin</entry> + <entry> +This is device-dependent, but the desired effect is that +a single pixel is drawn. + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>Round</emphasis> + </entry> + <entry>thin</entry> + <entry> +This is the same as +<emphasis role='bold'>Butt</emphasis>/thin. + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>Projecting</emphasis> + </entry> + <entry>thin</entry> + <entry> +This is the same as +<emphasis role='bold'>Butt</emphasis>/thin. + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>Butt</emphasis> + </entry> + <entry>wide</entry> + <entry> +Nothing is drawn. + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>Round</emphasis> + </entry> + <entry>wide</entry> + <entry> +The closed path is a circle, centered at the endpoint and +with a diameter equal to the line-width. + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>Projecting</emphasis> + </entry> + <entry>wide</entry> + <entry> +The closed path is a square, aligned with the coordinate axes, +centered at the endpoint and with sides equal to the line-width. + </entry> + </row> + </tbody> + </tgroup> +</informaltable> + +<para> +For a line with coincident endpoints (x1=x2, y1=y2), +when the join-style is applied at one or both endpoints, +the effect is as if the line was removed from the overall path. +However, if the total path consists of (or is reduced to) a single point +joined with itself, +the effect is the same as when the cap-style is applied at both endpoints. +</para> +<para> +The tile/stipple represents an infinite two-dimensional plane +with the tile/stipple +replicated in all dimensions. When that plane is superimposed on +the drawable for use in a graphics operation, the upper-left corner +of some instance of the tile/stipple is at the coordinates within +the drawable specified by the tile/stipple origin. +The tile/stipple and clip origins are interpreted relative to the +origin of whatever destination drawable is specified in a graphics +request. +</para> +<para> +The tile pixmap must have the same root and depth as the gcontext (or a +<emphasis role='bold'>Match </emphasis> +error results). +The stipple pixmap must have depth one and must have the same root +as the gcontext (or a +<emphasis role='bold'>Match </emphasis> +error results). +For fill-style +<emphasis role='bold'>Stippled </emphasis> +(but not fill-style +<emphasis role='bold'>OpaqueStippled ), </emphasis> +the stipple pattern is tiled in a single plane +and acts as an additional clip mask to be ANDed with the clip-mask. +Any size pixmap can be used for tiling or stippling, +although some sizes may be faster to use than others. +</para> +<para> +The fill-style defines the contents of the source for line, text, and +fill requests. +For all text and fill requests (for example, +<emphasis role='bold'>PolyText8</emphasis>, +<emphasis role='bold'>PolyText16</emphasis>, +<emphasis role='bold'>PolyFillRectangle</emphasis>, +<emphasis role='bold'>FillPoly</emphasis>, +and +<emphasis role='bold'>PolyFillArc</emphasis>) +as well as for line requests with line-style +<emphasis role='bold'>Solid</emphasis>, +(for example, +<emphasis role='bold'>PolyLine</emphasis>, +<emphasis role='bold'>PolySegment</emphasis>, +<emphasis role='bold'>PolyRectangle</emphasis>, +<emphasis role='bold'>PolyArc</emphasis> ) +and for the even dashes for line requests with line-style +<emphasis role='bold'>OnOffDash</emphasis> +or +<emphasis role='bold'>DoubleDash</emphasis>: +</para> + +<informaltable frame='none'> + <tgroup cols='2' align='left'> + <colspec colname='c1' colsep='0'/> + <colspec colname='c2' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<emphasis role='bold'>Solid</emphasis> + </entry> + <entry>Foreground</entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>Tiled</emphasis> + </entry> + <entry>Tile</entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>OpaqueStippled</emphasis> + </entry> + <entry> +A tile with the same width and height as stipple +but with background everywhere stipple has a zero +and with foreground everywhere stipple has a one + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>Stippled</emphasis> + </entry> + <entry> +Foreground masked by stipple + </entry> + </row> + </tbody> + </tgroup> +</informaltable> + +<para> +For the odd dashes for line requests with line-style +<emphasis role='bold'>DoubleDash</emphasis>: +</para> + +<informaltable frame='none'> + <tgroup cols='2' align='left'> + <colspec colname='c1' colsep='0'/> + <colspec colname='c2' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<emphasis role='bold'>Solid</emphasis> + </entry> + <entry>Background</entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>Tiled</emphasis> + </entry> + <entry>Same as for even dashes</entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>OpaqueStippled</emphasis> + </entry> + <entry>Same as for even dashes</entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>Stippled</emphasis> + </entry> + <entry>Background masked by stipple</entry> + </row> + </tbody> + </tgroup> +</informaltable> + + +<para> +The dashes value allowed here is actually a simplified form of the more +general patterns that can be set with +<emphasis role='bold'>SetDashes .</emphasis> +Specifying a value of N here is equivalent to specifying +the two element list [N, N] in +<emphasis role='bold'>SetDashes .</emphasis> +The value must be nonzero (or a +<emphasis role='bold'>Value </emphasis> +error results). +The meaning of dash-offset and dashes are explained in the +<emphasis role='bold'>SetDashes </emphasis> +request. +</para> +<para> +The clip-mask restricts writes to the destination drawable. +Only pixels where the clip-mask has bits set to 1 are drawn. +Pixels are not drawn outside the area covered by the clip-mask +or where the clip-mask has bits set to 0. +The clip-mask affects all graphics requests, +but it does not clip sources. +The clip-mask origin is interpreted relative to the origin of whatever +destination drawable is specified in a graphics request. +If a pixmap is specified as the clip-mask, +it must have depth 1 and have the same root as the gcontext (or a +<emphasis role='bold'>Match </emphasis> +error results). +If clip-mask is +<emphasis role='bold'>None , </emphasis> +then pixels are always drawn, regardless of the clip origin. +The clip-mask can also be set with the +<emphasis role='bold'>SetClipRectangles </emphasis> +request. +</para> +<para> +For +<emphasis role='bold'>ClipByChildren , </emphasis> +both source and destination windows are additionally clipped by all viewable +<emphasis role='bold'>InputOutput </emphasis> +children. +For +<emphasis role='bold'>IncludeInferiors , </emphasis> +neither source nor destination window is clipped by inferiors. +This will result in including subwindow contents in the +source and drawing through subwindow boundaries of the destination. +The use of +<emphasis role='bold'>IncludeInferiors </emphasis> +with a source or destination window of one depth with mapped inferiors +of differing depth is not illegal, +but the semantics is undefined by the core protocol. +</para> +<para> +The fill-rule defines what pixels are inside (that is, are drawn) for +paths given in +<emphasis role='bold'>FillPoly </emphasis> +requests. +<emphasis role='bold'>EvenOdd </emphasis> +means a point is inside if an infinite ray with the point as origin crosses +the path an odd number of times. +For +<emphasis role='bold'>Winding , </emphasis> +a point is inside if an infinite ray with the point as origin crosses an +unequal number of clockwise and counterclockwise directed path segments. +A clockwise directed path segment is one that crosses the ray from left +to right as observed from the point. +A counter-clockwise segment is one that crosses the ray from right to left +as observed from the point. +The case where a directed line segment is coincident with the ray is +uninteresting because one can simply choose a different ray that is not +coincident with a segment. +</para> +<para> +For both fill rules, +a point is infinitely small and the path is an infinitely thin line. +A pixel is inside if the center point of the pixel is inside +and the center point is not on the boundary. +If the center point is on the boundary, +the pixel is inside if and only if the polygon interior is immediately +to its right (x increasing direction). +Pixels with centers along a horizontal edge are a special case +and are inside if and only if the polygon interior is immediately below +(y increasing direction). +</para> +<para> +The arc-mode controls filling in the +<emphasis role='bold'>PolyFillArc </emphasis> +request. +</para> +<para> +The graphics-exposures flag controls +<emphasis role='bold'>GraphicsExposure </emphasis> +event generation for +<emphasis role='bold'>CopyArea </emphasis> +and +<emphasis role='bold'>CopyPlane </emphasis> +requests (and any similar requests defined by extensions). +</para> +<para> +The default component values are: +</para> + +<informaltable frame='none'> + <tgroup cols='2' align='left'> + <colspec colname='c1' colsep='0'/> + <colspec colname='c2' colsep='0'/> + <thead> + <row rowsep='0'> + <entry>Component</entry> + <entry>Default</entry> + </row> + </thead> + <tbody> + <row rowsep='0'> + <entry>function</entry> + <entry> +<emphasis role='bold'>Copy</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry>plane-mask</entry> + <entry>all ones</entry> + </row> + <row rowsep='0'> + <entry>foreground</entry> + <entry>0</entry> + </row> + <row rowsep='0'> + <entry>background</entry> + <entry>1</entry> + </row> + <row rowsep='0'> + <entry>line-width</entry> + <entry>0</entry> + </row> + <row rowsep='0'> + <entry>line-style</entry> + <entry><emphasis role='bold'>Solid</emphasis></entry> + </row> + <row rowsep='0'> + <entry>cap-style</entry> + <entry><emphasis role='bold'>Butt</emphasis></entry> + </row> + <row rowsep='0'> + <entry>join-style</entry> + <entry><emphasis role='bold'>Miter</emphasis></entry> + </row> + <row rowsep='0'> + <entry>fill-style</entry> + <entry><emphasis role='bold'>Solid</emphasis></entry> + </row> + <row rowsep='0'> + <entry>fill-rule</entry> + <entry><emphasis role='bold'>EvenOdd</emphasis></entry> + </row> + <row rowsep='0'> + <entry>arc-mode</entry> + <entry><emphasis role='bold'>PieSlice</emphasis></entry> + </row> + <row rowsep='0'> + <entry>tile</entry> + <entry> +<para> +Pixmap of unspecified size filled with foreground pixel +</para> +<para> +(that is, client specified pixel if any, else 0) +</para> +<para> +(subsequent changes to foreground do not affect this pixmap) +</para> + </entry> + </row> + <row rowsep='0'> + <entry>stipple</entry> + <entry> +Pixmap of unspecified size filled with ones + </entry> + </row> + <row rowsep='0'> + <entry>tile-stipple-x-origin</entry> + <entry>0</entry> + </row> + <row rowsep='0'> + <entry>tile-stipple-y-origin</entry> + <entry>0</entry> + </row> + <row rowsep='0'> + <entry>font</entry> + <entry><server-dependent-font></entry> + </row> + <row rowsep='0'> + <entry>subwindow-mode</entry> + <entry> +<emphasis role='bold'>ClipByChildren</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry>graphics-exposures</entry> + <entry> +<emphasis role='bold'>True</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry>clip-x-origin</entry> + <entry>0</entry> + </row> + <row rowsep='0'> + <entry>clip-y-origin</entry> + <entry>0</entry> + </row> + <row rowsep='0'> + <entry>clip-mask</entry> + <entry> +<emphasis role='bold'>None</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry>dash-offset</entry> + <entry>0</entry> + </row> + <row rowsep='0'> + <entry>dashes</entry> + <entry>4 (that is, the list [4, 4])</entry> + </row> + </tbody> + </tgroup> +</informaltable> + +<para> +Storing a pixmap in a gcontext might or might not result in a copy +being made. +If the pixmap is later used as the destination for a graphics request, +the change might or might not be reflected in the gcontext. +If the pixmap is used simultaneously in a graphics request +as both a destination and as a tile or stipple, +the results are not defined. +</para> +<para> +It is quite likely that some amount of gcontext information will be +cached in display hardware and that such hardware can only cache a +small number of gcontexts. +Given the number and complexity of components, +clients should view switching between gcontexts with nearly +identical state as significantly more expensive than making minor +changes to a single gcontext. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>ChangeGC</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>gc</emphasis>: GCONTEXT + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>value-mask</emphasis>: BITMASK + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>value-list</emphasis>: LISTofVALUE +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Alloc ,</emphasis> +<emphasis role='bold'>Font , </emphasis> +<emphasis role='bold'>GContext , </emphasis> +<emphasis role='bold'>Match , </emphasis> +<emphasis role='bold'>Pixmap , </emphasis> +<emphasis role='bold'>Value</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request changes components in gc. +The value-mask and value-list specify which components are to be changed. +The values and restrictions are the same +as for +<emphasis role='bold'>CreateGC .</emphasis> +</para> +<para> +Changing the clip-mask also overrides any previous +<emphasis role='bold'>SetClipRectangles </emphasis> +request on the context. +Changing dash-offset or dashes overrides any previous +<emphasis role='bold'>SetDashes </emphasis> +request on the context. +</para> +<para> +The order in which components are verified and altered is server-dependent. +If an error is generated, +a subset of the components may have been altered. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>CopyGC</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>src-gc</emphasis>, <emphasis remap='I'>dst-gc</emphasis>: GCONTEXT + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>value-mask</emphasis>: BITMASK +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Alloc ,</emphasis> +<emphasis role='bold'>GContext , </emphasis> +<emphasis role='bold'>Match , </emphasis> +<emphasis role='bold'>Value</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request copies components from src-gc to dst-gc. +The value-mask specifies which components to copy, as for +<emphasis role='bold'>CreateGC .</emphasis> +The two gcontexts must have the same root and the same depth (or a +<emphasis role='bold'>Match </emphasis> +error results). +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>SetDashes</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>gc</emphasis>: GCONTEXT + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>dash-offset</emphasis>: CARD16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>dashes</emphasis>: LISTofCARD8 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Alloc ,</emphasis> +<emphasis role='bold'>GContext , </emphasis> +<emphasis role='bold'>Value</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request sets dash-offset and dashes in gc for dashed line styles. +Dashes cannot be empty (or a +<emphasis role='bold'>Value </emphasis> +error results). +Specifying an odd-length list is equivalent to specifying the same list +concatenated with itself to produce an even-length list. +The initial and alternating elements of dashes are the even dashes; +the others are the odd dashes. +Each element specifies a dash length in pixels. +All of the elements must be nonzero (or a +<emphasis role='bold'>Value </emphasis> +error results). +The dash-offset defines the phase of the pattern, +specifying how many pixels into dashes the pattern should actually begin in +any single graphics request. +Dashing is continuous through path elements combined with a join-style +but is reset to the dash-offset between each sequence of joined lines. +</para> +<para> +The unit of measure for dashes is the same as in the ordinary +coordinate system. +Ideally, a dash length is measured along the slope of the line, +but implementations are only required to match this ideal +for horizontal and vertical lines. +Failing the ideal semantics, +it is suggested that the length be measured along the major axis of the line. +The major axis is defined as the x axis for lines drawn at an angle of +between -45 and +45 degrees or between 135 and 225 degrees from the x axis. +For all other lines, the major axis is the y axis. +</para> +<para> +For any graphics primitive, the computation of the endpoint of an individual +dash only depends on the geometry of the primitive, the start position +of the dash, the direction of the dash, and the dash length. +</para> +<para> +For any graphics primitive, the total set of pixels used to render the +primitive (both even and odd numbered dash elements) with +<emphasis role='bold'>DoubleDash </emphasis> +line-style is the same as the set of pixels used to render the +primitive with +<emphasis role='bold'>Solid </emphasis> +line-style. +</para> +<para> +For any graphics primitive, if the primitive is drawn with +<emphasis role='bold'>OnOffDash </emphasis> +or +<emphasis role='bold'>DoubleDash </emphasis> +line-style unclipped at position [x,y] and again at position +[x+dx,y+dy], then a point [x1,y1] is included in a dash in the first +instance if and only if the point [x1+dx,y1+dy] is included in the dash in +the second instance. In addition, the effective set of points comprising a +dash cannot be affected by clipping. A point is included in a clipped dash +if and only if the point lies inside the clipping region and the point +would be included in the dash when drawn unclipped. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>SetClipRectangles</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>gc</emphasis>: GCONTEXT + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>clip-x-origin</emphasis>, <emphasis remap='I'>clip-y-origin</emphasis>: INT16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>rectangles</emphasis>: LISTofRECTANGLE + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>ordering</emphasis>: +<emphasis role='bold'>{ UnSorted , </emphasis> +<emphasis role='bold'>YSorted , </emphasis> +<emphasis role='bold'>YXSorted ,</emphasis> +<emphasis role='bold'>YXBanded }</emphasis> +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Alloc , </emphasis> +<emphasis role='bold'>GContext , </emphasis> +<emphasis role='bold'>Match ,</emphasis> +<emphasis role='bold'>Value</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request changes clip-mask in gc to the specified list of rectangles +and sets the clip origin. +Output will be clipped to remain contained within the rectangles. +The clip origin is interpreted relative to the origin of +whatever destination drawable is specified in a graphics request. +The rectangle coordinates are interpreted relative to the clip origin. +The rectangles should be nonintersecting, or graphics results will be +undefined. +Note that the list of rectangles can be empty, +which effectively disables output. +This is the opposite of passing +<emphasis role='bold'>None </emphasis> +as the clip-mask in +<emphasis role='bold'>CreateGC </emphasis> +and +<emphasis role='bold'>ChangeGC .</emphasis> +</para> +<para> +If known by the client, +ordering relations on the rectangles can be specified with the ordering +argument. +This may provide faster operation by the server. +If an incorrect ordering is specified, +the server may generate a +<emphasis role='bold'>Match </emphasis> +error, but it is not required to do so. +If no error is generated, +the graphics results are undefined. +<emphasis role='bold'>UnSorted </emphasis> +means that the rectangles are in arbitrary order. +<emphasis role='bold'>YSorted </emphasis> +means that the rectangles are nondecreasing in their Y origin. +<emphasis role='bold'>YXSorted </emphasis> +additionally constrains +<emphasis role='bold'>YSorted </emphasis> +order in that all rectangles with an equal Y origin are +nondecreasing in their X origin. +<emphasis role='bold'>YXBanded </emphasis> +additionally constrains +<emphasis role='bold'>YXSorted </emphasis> +by requiring that, for every possible Y scanline, +all rectangles that include that scanline have identical Y origins and Y +extents. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>FreeGC</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>gc</emphasis>: GCONTEXT +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>GContext</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request deletes the association between the resource ID and the gcontext +and destroys the gcontext. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>ClearArea</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>window</emphasis>: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>x</emphasis>, <emphasis remap='I'>y</emphasis>: INT16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>width</emphasis>, <emphasis remap='I'>height</emphasis>: CARD16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>exposures</emphasis>: BOOL +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Match ,</emphasis> +<emphasis role='bold'>Value , </emphasis> +<emphasis role='bold'>Window </emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +The x and y coordinates are relative to the window's origin +and specify the upper-left corner of the rectangle. +If width is zero, +it is replaced with the current width of the window minus x. +If height is zero, +it is replaced with the current height of the window minus y. +If the window has a defined background tile, +the rectangle is tiled with a plane-mask of all ones and function of +<emphasis role='bold'>Copy </emphasis> +and a subwindow-mode of +<emphasis role='bold'>ClipByChildren .</emphasis> +If the window has background +<emphasis role='bold'>None ,</emphasis> +the contents of the window are not changed. +In either case, +if exposures is +<emphasis role='bold'>True , </emphasis> +then one or more exposure events are generated for regions of the rectangle +that are either visible or are being retained in a backing store. +</para> +<para> +It is a +<emphasis role='bold'>Match </emphasis> +error to use an +<emphasis role='bold'>InputOnly </emphasis> +window in this request. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>CopyArea</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>src-drawable</emphasis>, <emphasis remap='I'>dst-drawable</emphasis>: DRAWABLE + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>gc</emphasis>: GCONTEXT + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>src-x</emphasis>, <emphasis remap='I'>src-y</emphasis>: INT16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>width</emphasis>, <emphasis remap='I'>height</emphasis>: CARD16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>dst-x</emphasis>, <emphasis remap='I'>dst-y</emphasis>: INT16 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Drawable , </emphasis> +<emphasis role='bold'>GContext , </emphasis> +<emphasis role='bold'>Match</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request combines the specified rectangle of src-drawable with the +specified rectangle of dst-drawable. +The src-x and src-y coordinates are relative to src-drawable's origin. +The dst-x and dst-y are relative to dst-drawable's origin, +each pair specifying the upper-left corner of the rectangle. +The src-drawable must have the same root and the same depth +as dst-drawable (or a +<emphasis role='bold'>Match </emphasis> +error results). +</para> +<para> +If regions of the source rectangle are obscured and have not been retained +in backing store +or if regions outside the boundaries of the source drawable are specified, +then those regions are not copied, +but the following occurs on all corresponding destination regions that are +either visible or are retained in backing-store. +If the dst-drawable is a window with a background other than +<emphasis role='bold'>None , </emphasis> +these corresponding destination regions are tiled +(with plane-mask of all ones and function +<emphasis role='bold'>Copy ) </emphasis> +with that background. +Regardless of tiling and whether the destination is a window or a pixmap, +if graphics-exposures in gc is +<emphasis role='bold'>True ,</emphasis> +then +<emphasis role='bold'>GraphicsExposure </emphasis> +events for all corresponding destination regions are generated. +</para> +<para> +If graphics-exposures is +<emphasis role='bold'>True </emphasis> +but no +<emphasis role='bold'>GraphicsExposure </emphasis> +events are generated, +then a +<emphasis role='bold'>NoExposure </emphasis> +event is generated. +</para> +<para> +GC components: function, plane-mask, subwindow-mode, +graphics-exposures, clip-x-origin, clip-y-origin, clip-mask +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>CopyPlane</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>src-drawable</emphasis>, <emphasis remap='I'>dst-drawable</emphasis>: DRAWABLE + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>gc</emphasis>: GCONTEXT + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>src-x</emphasis>, <emphasis remap='I'>src-y</emphasis>: INT16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>width</emphasis>, <emphasis remap='I'>height</emphasis>: CARD16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>dst-x</emphasis>, <emphasis remap='I'>dst-y</emphasis>: INT16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>bit-plane</emphasis>: CARD32 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Drawable , </emphasis> +<emphasis role='bold'>GContext , </emphasis> +<emphasis role='bold'>Match ,</emphasis> +<emphasis role='bold'>Value</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +The src-drawable must have the same root as dst-drawable (or a +<emphasis role='bold'>Match </emphasis> +error results), but it need not have the same depth. +The bit-plane must have exactly one bit set to 1 and the value of bit-plane +must be less than %2 sup n% where <emphasis remap='I'>n</emphasis> is the depth of src-drawable (or a +<emphasis role='bold'>Value </emphasis> +error results). +Effectively, a pixmap of the same depth as dst-drawable and with size specified +by the source region is formed using the foreground/background pixels in gc +(foreground everywhere the bit-plane in src-drawable contains a bit set to 1, +background everywhere the bit-plane contains a bit set to 0), +and the equivalent of a +<emphasis role='bold'>CopyArea </emphasis> +is performed, with all the same exposure semantics. +This can also be thought of as using the specified region of the source +bit-plane as a stipple with a fill-style of +<emphasis role='bold'>OpaqueStippled </emphasis> +for filling a rectangular area of the destination. +</para> +<para> +GC components: function, plane-mask, foreground, background, +subwindow-mode, graphics-exposures, clip-x-origin, clip-y-origin, +clip-mask +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>PolyPoint</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>drawable</emphasis>: DRAWABLE + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>gc</emphasis>: GCONTEXT + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>coordinate-mode</emphasis>: +<emphasis role='bold'>{ Origin , </emphasis> +<emphasis role='bold'>Previous }</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>points</emphasis>: LISTofPOINT +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Drawable , </emphasis> +<emphasis role='bold'>GContext , </emphasis> +<emphasis role='bold'>Match ,</emphasis> +<emphasis role='bold'>Value</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request combines the foreground pixel in gc with the pixel +at each point in the drawable. +The points are drawn in the order listed. +</para> +<para> +The first point is always relative to the drawable's origin. +The rest are relative either to that origin or the previous point, +depending on the coordinate-mode. +</para> +<para> +GC components: function, plane-mask, foreground, subwindow-mode, +clip-x-origin, clip-y-origin, clip-mask +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>PolyLine</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>drawable</emphasis>: DRAWABLE + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>gc</emphasis>: GCONTEXT + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>coordinate-mode</emphasis>: +<emphasis role='bold'>{ Origin , </emphasis> +<emphasis role='bold'>Previous }</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>points</emphasis>: LISTofPOINT +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Drawable , </emphasis> +<emphasis role='bold'>GContext , </emphasis> +<emphasis role='bold'>Match ,</emphasis> +<emphasis role='bold'>Value</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request draws lines between each pair of points (point[i], point[i+1]). +The lines are drawn in the order listed. +The lines join correctly at all intermediate points, +and if the first and last points coincide, +the first and last lines also join correctly. +</para> +<para> +For any given line, +no pixel is drawn more than once. +If thin (zero line-width) lines intersect, +the intersecting pixels are drawn multiple times. +If wide lines intersect, +the intersecting pixels are drawn only once, as though the entire +<emphasis role='bold'>PolyLine </emphasis> +were a single filled shape. +</para> +<para> +The first point is always relative to the drawable's origin. +The rest are relative either to that origin or the previous point, +depending on the coordinate-mode. +</para> +<para> +When either of the two lines involved in a +<emphasis role='bold'>Bevel </emphasis> +join is neither vertical +nor horizontal, then the slope and position of the line segment defining +the bevel join edge is implementation dependent. However, the computation +of the slope and distance (relative to the join point) only depends on +the line width and the slopes of the two lines. +</para> +<para> +GC components: function, plane-mask, line-width, line-style, +cap-style, join-style, fill-style, subwindow-mode, clip-x-origin, +clip-y-origin, clip-mask +</para> +<para> +GC mode-dependent components: foreground, background, tile, stipple, +tile-stipple-x-origin, tile-stipple-y-origin, dash-offset, dashes +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>PolySegment</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>drawable</emphasis>: DRAWABLE + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>gc</emphasis>: GCONTEXT + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>segments</emphasis>: LISTofSEGMENT +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +where: +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +SEGMENT: [x1, y1, x2, y2: INT16] +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Drawable , </emphasis> +<emphasis role='bold'>GContext , </emphasis> +<emphasis role='bold'>Match</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +For each segment, +this request draws a line between [x1, y1] and [x2, y2]. +The lines are drawn in the order listed. +No joining is performed at coincident endpoints. +For any given line, +no pixel is drawn more than once. +If lines intersect, +the intersecting pixels are drawn multiple times. +</para> +<para> +GC components: function, plane-mask, line-width, line-style, +cap-style, fill-style, subwindow-mode, clip-x-origin, clip-y-origin, +clip-mask +</para> +<para> +GC mode-dependent components: foreground, background, tile, stipple, +tile-stipple-x-origin, tile-stipple-y-origin, dash-offset, dashes +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>PolyRectangle</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>drawable</emphasis>: DRAWABLE + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>gc</emphasis>: GCONTEXT + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>rectangles</emphasis>: LISTofRECTANGLE +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Drawable , </emphasis> +<emphasis role='bold'>GContext , </emphasis> +<emphasis role='bold'>Match</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request draws the outlines of the specified rectangles, as if a five-point +<emphasis role='bold'>PolyLine </emphasis> +were specified for each rectangle: +</para> +<para> +<!-- .DS --> +[x,y] [x+width,y] [x+width,y+height] [x,y+height] [x,y] +<!-- .DE --> +</para> +<para> +The x and y coordinates of each rectangle are relative to the drawable's origin +and define the upper-left corner of the rectangle. +</para> +<para> +The rectangles are drawn in the order listed. +For any given rectangle, +no pixel is drawn more than once. +If rectangles intersect, +the intersecting pixels are drawn multiple times. +</para> +<para> +GC components: function, plane-mask, line-width, line-style, +cap-style, join-style, fill-style, subwindow-mode, clip-x-origin, +clip-y-origin, clip-mask +</para> +<para> +GC mode-dependent components: foreground, background, tile, stipple, +tile-stipple-x-origin, tile-stipple-y-origin, dash-offset, dashes +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>PolyArc</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>drawable</emphasis>: DRAWABLE + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>gc</emphasis>: GCONTEXT + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>arcs</emphasis>: LISTofARC +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Drawable , </emphasis> +<emphasis role='bold'>GContext , </emphasis> +<emphasis role='bold'>Match</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request draws circular or elliptical arcs. +Each arc is specified by a rectangle and two angles. +The angles are signed integers in degrees scaled by 64, +with positive indicating counterclockwise motion and +negative indicating clockwise motion. +The start of the arc is specified by angle1 relative to the three-o'clock +position from the center of the rectangle, +and the path and extent of the arc is specified by angle2 relative to the +start of the arc. +If the magnitude of angle2 is greater than 360 degrees, +it is truncated to 360 degrees. +The x and y coordinates of the rectangle are relative to the origin of +the drawable. +For an arc specified as [x,y,w,h,a1,a2], +the origin of the major and minor axes is at [x+(w/2),y+(h/2)], +and the infinitely thin path describing the entire circle/ellipse intersects +the horizontal axis at [x,y+(h/2)] and [x+w,y+(h/2)] and intersects the +vertical axis at [x+(w/2),y] and [x+(w/2),y+h]. +These coordinates are not necessarily integral; that is, +they are not truncated to discrete coordinates. +</para> +<para> +For a wide line with line-width lw, the ideal bounding outlines for filling +are given by the two infinitely thin paths consisting of all points whose +perpendicular distance from a tangent to the path of the circle/ellipse is +equal to lw/2 (which may be a fractional value). When the width and height +of the arc are not equal and both are nonzero, then the actual bounding +outlines are implementation dependent. However, the computation of the +shape and position of the bounding outlines (relative to the center of the +arc) only depends on the width and height of the arc and the +line-width. +</para> +<para> +The cap-style is applied the same as for a line corresponding to the +tangent of the circle/ellipse at the endpoint. When the angle of an arc +face is not an integral multiple of 90 degrees, and the width and height of +the arc are both are nonzero, then the shape and position of the cap at +that face is implementation dependent. However, for a +<emphasis role='bold'>Butt </emphasis> +cap, the face +is defined by a straight line, and the computation of the position +(relative to the center of the arc) and the slope of the line only +depends on the width and height of the arc and the angle of the arc face. +For other cap styles, the computation of the position (relative to the +center of the arc) and the shape of the cap only depends on the width +and height of the arc, the line-width, the angle of the arc face, and the +direction (clockwise or counter clockwise) of the arc from the endpoint. +</para> +<para> +The join-style is applied the same as for two lines corresponding to the +tangents of the circles/ellipses at the join point. When the width and +height of both arcs are nonzero, and the angle of either arc face is not an +integral multiple of 90 degrees, then the shape of the join is +implementation dependent. However, the computation of the shape only +depends on the width and height of each arc, the line-width, the angles of +the two arc faces, the direction (clockwise or counter clockwise) of the +arcs from the join point, and the relative orientation of the two arc +center points. +</para> +<para> +For an arc specified as [x,y,w,h,a1,a2], +the angles must be specified in the effectively skewed coordinate system of +the ellipse (for a circle, the angles and coordinate systems are identical). +The relationship between these angles and angles expressed in the normal +coordinate system of the screen (as measured with a protractor) is as +follows: +<!-- .DS --> +skewed-angle = atan(tan(normal-angle) * w/h) + adjust +<!-- .DE --> +</para> +<para> +The skewed-angle and normal-angle are expressed in radians (rather +than in degrees scaled by 64) in the range [0,2*PI). +The atan returns a value in the range [-PI/2,PI/2]. +The adjust is: +</para> +<para> +<!-- .TS --> +l l. +0 for normal-angle in the range [0,PI/2) +PI for normal-angle in the range [PI/2,(3*PI)/2) +2*PI for normal-angle in the range [(3*PI)/2,2*PI) +<!-- .TE --> +</para> +<para> +</para> +<para> +The arcs are drawn in the order listed. +If the last point in one arc coincides with the first point in the following +arc, +the two arcs will join correctly. +If the first point in the first arc coincides with the last point +in the last arc, +the two arcs will join correctly. +For any given arc, +no pixel is drawn more than once. +If two arcs join correctly and the line-width is greater than zero +and the arcs intersect, +no pixel is drawn more than once. +Otherwise, the intersecting pixels of intersecting arcs are drawn multiple +times. +Specifying an arc with one endpoint and a clockwise extent draws the +same pixels as specifying the other endpoint and an equivalent +counterclockwise extent, except as it affects joins. +</para> +<para> +By specifying one axis to be zero, +a horizontal or vertical line can be drawn. +</para> +<para> +Angles are computed based solely on the coordinate system, +ignoring the aspect ratio. +</para> +<para> +GC components: function, plane-mask, line-width, line-style, +cap-style, join-style, fill-style, subwindow-mode, clip-x-origin, +clip-y-origin, clip-mask +</para> +<para> +GC mode-dependent components: foreground, background, tile, stipple, +tile-stipple-x-origin, tile-stipple-y-origin, dash-offset, dashes +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>FillPoly</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2in --> +<emphasis remap='I'>drawable</emphasis>: DRAWABLE + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>gc</emphasis>: GCONTEXT + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>shape</emphasis>: +<emphasis role='bold'>{ Complex , </emphasis> +<emphasis role='bold'>Nonconvex , </emphasis> +<emphasis role='bold'>Convex }</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>coordinate-mode</emphasis>: +<emphasis role='bold'>{ Origin , </emphasis> +<emphasis role='bold'>Previous }</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>points</emphasis>: LISTofPOINT +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Drawable , </emphasis> +<emphasis role='bold'>GContext , </emphasis> +<emphasis role='bold'>Match , </emphasis> +<emphasis role='bold'>Value</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request fills the region closed by the specified path. +The path is closed automatically if the last point in the list does not +coincide with the first point. +No pixel of the region is drawn more than once. +</para> +<para> +The first point is always relative to the drawable's origin. +The rest are relative either to that origin or the previous point, +depending on the coordinate-mode. +</para> +<para> +The shape parameter may be used by the server to improve performance. +<emphasis role='bold'>Complex </emphasis> +means the path may self-intersect. +Contiguous coincident points in the path are not treated +as self-intersection. +</para> +<para> +<emphasis role='bold'>Nonconvex </emphasis> +means the path does not self-intersect, +but the shape is not wholly convex. +If known by the client, +specifying +<emphasis role='bold'>Nonconvex </emphasis> +over +<emphasis role='bold'>Complex </emphasis> +may improve performance. +If +<emphasis role='bold'>Nonconvex </emphasis> +is specified for a self-intersecting path, +the graphics results are undefined. +</para> +<para> +<emphasis role='bold'>Convex </emphasis> +means that for every pair of points inside the polygon, +the line segment connecting them does not intersect the path. +If known by the client, +specifying +<emphasis role='bold'>Convex </emphasis> +can improve performance. +If +<emphasis role='bold'>Convex </emphasis> +is specified for a path that is not convex, +the graphics results are undefined. +</para> +<para> +GC components: function, plane-mask, fill-style, fill-rule, +subwindow-mode, clip-x-origin, clip-y-origin, clip-mask +</para> +<para> +GC mode-dependent components: foreground, background, tile, stipple, +tile-stipple-x-origin, tile-stipple-y-origin +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>PolyFillRectangle</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>drawable</emphasis>: DRAWABLE + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>gc</emphasis>: GCONTEXT + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>rectangles</emphasis>: LISTofRECTANGLE +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Drawable , </emphasis> +<emphasis role='bold'>GContext , </emphasis> +<emphasis role='bold'>Match</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request fills the specified rectangles, as if a four-point +<emphasis role='bold'>FillPoly </emphasis> +were specified for each rectangle: +<!-- .DS --> +[x,y] [x+width,y] [x+width,y+height] [x,y+height] +<!-- .DE --> +</para> +<para> +The x and y coordinates of each rectangle are relative to the drawable's origin +and define the upper-left corner of the rectangle. +</para> +<para> +The rectangles are drawn in the order listed. +For any given rectangle, +no pixel is drawn more than once. +If rectangles intersect, +the intersecting pixels are drawn multiple times. +</para> +<para> +GC components: function, plane-mask, fill-style, subwindow-mode, +clip-x-origin, clip-y-origin, clip-mask +</para> +<para> +GC mode-dependent components: foreground, background, tile, stipple, +tile-stipple-x-origin, tile-stipple-y-origin +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>PolyFillArc</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>drawable</emphasis>: DRAWABLE + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>gc</emphasis>: GCONTEXT + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>arcs</emphasis>: LISTofARC +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Drawable , </emphasis> +<emphasis role='bold'>GContext , </emphasis> +<emphasis role='bold'>Match</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +For each arc, +this request fills the region closed by the infinitely thin path +described by the specified arc and one or two line segments, +depending on the arc-mode. +For +<emphasis role='bold'>Chord , </emphasis> +the single line segment joining the endpoints of the arc is used. +For +<emphasis role='bold'>PieSlice , </emphasis> +the two line segments joining the endpoints of the arc with the center point +are used. +</para> +<para> +For an arc specified as [x,y,w,h,a1,a2], the origin of the major and minor +axes is at [x+(w/2),y+(h/2)], and the infinitely thin path describing the +entire circle/ellipse intersects the horizontal axis at [x,y+(h/2)] and +[x+w,y+(h/2)] and intersects the vertical axis at [x+(w/2),y] and +[x+(w/2),y+h]. These coordinates are not necessarily integral; that is, +they are not truncated to discrete coordinates. +</para> +<para> +The arc angles are interpreted as specified in the +<emphasis role='bold'>PolyArc </emphasis> +request. When +the angle of an arc face is not an integral multiple of 90 degrees, then +the precise endpoint on the arc is implementation dependent. However, for +<emphasis role='bold'>Chord </emphasis> +arc-mode, the computation of the pair of endpoints (relative to the +center of the arc) only depends on the width and height of the arc and +the angles of the two arc faces. For +<emphasis role='bold'>PieSlice </emphasis> +arc-mode, the computation of +an endpoint only depends on the angle of the arc face for that +endpoint and the ratio of the arc width to arc height. +</para> +<para> +The arcs are filled in the order listed. +For any given arc, +no pixel is drawn more than once. +If regions intersect, +the intersecting pixels are drawn multiple times. +</para> +<para> +GC components: function, plane-mask, fill-style, arc-mode, +subwindow-mode, clip-x-origin, clip-y-origin, clip-mask +</para> +<para> +GC mode-dependent components: foreground, background, tile, stipple, +tile-stipple-x-origin, tile-stipple-y-origin +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>PutImage</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>drawable</emphasis>: DRAWABLE + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>gc</emphasis>: GCONTEXT + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>depth</emphasis>: CARD8 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>width</emphasis>, <emphasis remap='I'>height</emphasis>: CARD16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>dst-x</emphasis>, <emphasis remap='I'>dst-y</emphasis>: INT16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>left-pad</emphasis>: CARD8 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>format</emphasis>: +<emphasis role='bold'>{ Bitmap , </emphasis> +<emphasis role='bold'>XYPixmap , </emphasis> +<emphasis role='bold'>ZPixmap }</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>data</emphasis>: LISTofBYTE +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Drawable , </emphasis> +<emphasis role='bold'>GContext , </emphasis> +<emphasis role='bold'>Match , </emphasis> +<emphasis role='bold'>Value</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request combines an image with a rectangle of the drawable. +The dst-x and dst-y coordinates are relative to the drawable's origin. +</para> +<para> +If +<emphasis role='bold'>Bitmap </emphasis> +format is used, +then depth must be one (or a +<emphasis role='bold'>Match </emphasis> +error results), and the image must be in XY format. +The foreground pixel in gc defines the source for bits set to 1 in the image, +and the background pixel defines the source for the bits set to 0. +</para> +<para> +For +<emphasis role='bold'>XYPixmap </emphasis> +and +<emphasis role='bold'>ZPixmap , </emphasis> +the depth must match the depth of the drawable (or a +<emphasis role='bold'>Match </emphasis> +error results). +For +<emphasis role='bold'>XYPixmap , </emphasis> +the image must be sent in XY format. +For +<emphasis role='bold'>ZPixmap , </emphasis> +the image must be sent in the Z format defined for the given depth. +</para> +<para> +The left-pad must be zero for +<emphasis role='bold'>ZPixmap </emphasis> +format (or a +<emphasis role='bold'>Match </emphasis> +error results). +For +<emphasis role='bold'>Bitmap </emphasis> +and +<emphasis role='bold'>XYPixmap </emphasis> +format, +left-pad must be less than bitmap-scanline-pad as given in the server +connection setup information (or a +<emphasis role='bold'>Match </emphasis> +error results). +The first left-pad bits in every scanline are to be ignored by the server. +The actual image begins that many bits into the data. +The width argument defines the width of the actual image +and does not include left-pad. +</para> +<para> +GC components: function, plane-mask, subwindow-mode, clip-x-origin, +clip-y-origin, clip-mask +</para> +<para> +GC mode-dependent components: foreground, background +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>GetImage</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>drawable</emphasis>: DRAWABLE + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>x</emphasis>, <emphasis remap='I'>y</emphasis>: INT16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>width</emphasis>, <emphasis remap='I'>height</emphasis>: CARD16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>plane-mask</emphasis>: CARD32 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>format</emphasis>: +<emphasis role='bold'>{ XYPixmap , </emphasis> +<emphasis role='bold'>ZPixmap }</emphasis> +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> + -> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +depth: CARD8 + </entry> + </row> + <row rowsep='0'> + <entry> +visual: VISUALID or +<emphasis role='bold'>None</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +data: LISTofBYTE +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Drawable , </emphasis> +<emphasis role='bold'>Match ,</emphasis> +<emphasis role='bold'>Value</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request returns the contents of the given rectangle of the drawable in the +given format. +The x and y coordinates are relative to the drawable's origin +and define the upper-left corner of the rectangle. +If +<emphasis role='bold'>XYPixmap </emphasis> +is specified, +only the bit planes specified in plane-mask are transmitted, +with the planes appearing from most significant to least significant +in bit order. +If +<emphasis role='bold'>ZPixmap </emphasis> +is specified, then bits in all planes not specified in plane-mask are +transmitted as zero. +Range checking is not performed on plane-mask; +extraneous bits are simply ignored. +The returned depth is as specified when the drawable was created +and is the same as a depth component in a FORMAT structure (in the connection +setup), not a bits-per-pixel component. +If the drawable is a window, +its visual type is returned. +If the drawable is a pixmap, +the visual is +<emphasis role='bold'>None .</emphasis> +</para> +<para> +If the drawable is a pixmap, +then the given rectangle must be wholly contained within the pixmap (or a +<emphasis role='bold'>Match </emphasis> +error results). +If the drawable is a window, +the window must be viewable, +and it must be the case that, +if there were no inferiors or overlapping windows, +the specified rectangle of the window would be fully visible on the screen +and wholly contained within the outside edges of the window (or a +<emphasis role='bold'>Match </emphasis> +error results). +Note that the borders of the window can be included and read with this request. +If the window has a backing store, +then the backing-store contents are returned for regions of the window +that are obscured by noninferior windows; +otherwise, the returned contents of such obscured regions are undefined. +Also undefined are the returned contents of visible +regions of inferiors of different depth than the specified window. +The pointer cursor image is not included in the contents returned. +</para> +<para> +This request is not general-purpose in the same sense as other +graphics-related requests. +It is intended specifically for rudimentary hardcopy support. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>PolyText8</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>drawable</emphasis>: DRAWABLE + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>gc</emphasis>: GCONTEXT + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>x</emphasis>, <emphasis remap='I'>y</emphasis>: INT16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>items</emphasis>: LISTofTEXTITEM8 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +where: +<!-- .TS --> +r l. +TEXTITEM8: TEXTELT8 or FONT + </entry> + </row> + <row rowsep='0'> + <entry> +TEXTELT8: [delta: INT8 + </entry> + </row> + <row rowsep='0'> + <entry> + \ string: STRING8] +<!-- .TE --> +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Drawable , </emphasis> +<emphasis role='bold'>Font ,</emphasis> +<emphasis role='bold'>GContext , </emphasis> +<emphasis role='bold'>Match </emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +The x and y coordinates are relative to the drawable's origin +and specify the baseline starting position (the initial character origin). +Each text item is processed in turn. +A font item causes the font to be stored in gc +and to be used for subsequent text. +Switching among fonts does not affect the next character origin. +A text element delta specifies an additional change in the position +along the x axis before the string is drawn; +the delta is always added to the character origin. +Each character image, as defined by the font in gc, +is treated as an additional mask for a fill operation on the drawable. +</para> +<para> +All contained FONTs are always transmitted most significant byte first. +</para> +<para> +If a +<emphasis role='bold'>Font </emphasis> +error is generated for an item, +the previous items may have been drawn. +</para> +<para> +For fonts defined with 2-byte matrix indexing, +each STRING8 byte is interpreted as a byte2 value of a CHAR2B with a byte1 +value of zero. +</para> +<para> +GC components: function, plane-mask, fill-style, font, +subwindow-mode, clip-x-origin, clip-y-origin, clip-mask +</para> +<para> +GC mode-dependent components: foreground, background, tile, stipple, +tile-stipple-x-origin, tile-stipple-y-origin +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>PolyText16</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>drawable</emphasis>: DRAWABLE + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>gc</emphasis>: GCONTEXT + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>x</emphasis>, <emphasis remap='I'>y</emphasis>: INT16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>items</emphasis>: LISTofTEXTITEM16 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +where: +<!-- .TS --> +r l. +TEXTITEM16: TEXTELT16 or FONT + </entry> + </row> + <row rowsep='0'> + <entry> +TEXTELT16: [delta: INT8 + </entry> + </row> + <row rowsep='0'> + <entry> + \ string: STRING16] +<!-- .TE --> +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Drawable , </emphasis> +<emphasis role='bold'>Font ,</emphasis> +<emphasis role='bold'>GContext , </emphasis> +<emphasis role='bold'>Match</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request is similar to +<emphasis role='bold'>PolyText8 , </emphasis> +except 2-byte (or 16-bit) characters are used. +For fonts defined with linear indexing rather than 2-byte matrix indexing, +the server will interpret each CHAR2B as a 16-bit number that +has been transmitted most significant byte first (that is, byte1 of the +CHAR2B is taken as the most significant byte). +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>ImageText8</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>drawable</emphasis>: DRAWABLE + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>gc</emphasis>: GCONTEXT + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>x</emphasis>, <emphasis remap='I'>y</emphasis>: INT16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>string</emphasis>: STRING8 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Drawable , </emphasis> +<emphasis role='bold'>GContext , </emphasis> +<emphasis role='bold'>Match</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +The x and y coordinates are relative to the drawable's origin +and specify the baseline starting position (the initial character origin). +The effect is first to fill a destination rectangle with the background +pixel defined in gc and then to paint the text with the foreground pixel. +The upper-left corner of the filled rectangle is at: +<!-- .DS --> +[x, y - font-ascent] +<!-- .DE --> +</para> +<para> +the width is: +<!-- .DS --> +overall-width +<!-- .DE --> +</para> +<para> +and the height is: +<!-- .DS --> +font-ascent + font-descent +<!-- .DE --> +</para> +<para> +The overall-width, font-ascent, and font-descent are as +they would be returned by a +<emphasis role='bold'>QueryTextExtents </emphasis> +call using gc and string. +</para> +<para> +The function and fill-style defined in gc are ignored for this request. +The effective function is +<emphasis role='bold'>Copy ,</emphasis> +and the effective fill-style +<emphasis role='bold'>Solid .</emphasis> +</para> +<para> +For fonts defined with 2-byte matrix indexing, +each STRING8 byte is interpreted as a byte2 value of a CHAR2B with a byte1 +value of zero. +</para> +<para> +GC components: plane-mask, foreground, background, font, +subwindow-mode, clip-x-origin, clip-y-origin, clip-mask +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>ImageText16</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>drawable</emphasis>: DRAWABLE + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>gc</emphasis>: GCONTEXT + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>x</emphasis>, <emphasis remap='I'>y</emphasis>: INT16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>string</emphasis>: STRING16 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Drawable , </emphasis> +<emphasis role='bold'>GContext , </emphasis> +<emphasis role='bold'>Match</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request is similar to +<emphasis role='bold'>ImageText8 , </emphasis> +except 2-byte (or 16-bit) characters are used. +For fonts defined with linear indexing rather than 2-byte matrix indexing, +the server will interpret each CHAR2B as a 16-bit number that +has been transmitted most significant byte first (that is, byte1 of the +CHAR2B is taken as the most significant byte). +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>CreateColormap</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>mid</emphasis>: COLORMAP + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>visual</emphasis>: VISUALID + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>window</emphasis>: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>alloc</emphasis>: +<emphasis role='bold'>{ None , </emphasis> +<emphasis role='bold'>All }</emphasis> +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Alloc ,</emphasis> +<emphasis role='bold'>IDChoice , </emphasis> +<emphasis role='bold'>Match , </emphasis> +<emphasis role='bold'>Value , </emphasis> +<emphasis role='bold'>Window </emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request creates a colormap of the specified visual type for the screen +on which the window resides and associates the identifier mid with it. +The visual type must be one supported by the screen (or a +<emphasis role='bold'>Match </emphasis> +error results). +The initial values of the colormap entries are undefined for classes +<emphasis role='bold'>GrayScale , </emphasis> +<emphasis role='bold'>PseudoColor , </emphasis> +and +<emphasis role='bold'>DirectColor .</emphasis> +For +<emphasis role='bold'>StaticGray , </emphasis> +<emphasis role='bold'>StaticColor ,</emphasis> +and +<emphasis role='bold'>TrueColor , </emphasis> +the entries will have defined values, +but those values are specific to the visual and are not defined +by the core protocol. +For +<emphasis role='bold'>StaticGray , </emphasis> +<emphasis role='bold'>StaticColor , </emphasis> +and +<emphasis role='bold'>TrueColor , </emphasis> +alloc must be specified as +<emphasis role='bold'>None </emphasis> +(or a +<emphasis role='bold'>Match </emphasis> +error results). +For the other classes, if alloc is +<emphasis role='bold'>None ,</emphasis> +the colormap initially has no allocated entries, +and clients can allocate entries. +</para> +<para> +If alloc is +<emphasis role='bold'>All , </emphasis> +then the entire colormap is allocated writable. +The initial values of all allocated entries are undefined. +For +<emphasis role='bold'>GrayScale </emphasis> +and +<emphasis role='bold'>PseudoColor , </emphasis> +the effect is as if an +<emphasis role='bold'>AllocColorCells </emphasis> +request returned all pixel values from zero to N - 1, +where N is the colormap-entries value in the specified visual. +For +<emphasis role='bold'>DirectColor , </emphasis> +the effect is as if an +<emphasis role='bold'>AllocColorPlanes </emphasis> +request returned a pixel value of zero and red-mask, +green-mask, and blue-mask values containing the same bits as the +corresponding masks in the specified visual. +However, +in all cases, none of these entries can be freed with +<emphasis role='bold'>FreeColors .</emphasis> +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>FreeColormap</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>cmap</emphasis>: COLORMAP +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Colormap</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request deletes the association between the resource ID and the colormap +and frees the colormap storage. +If the colormap is an installed map for a screen, +it is uninstalled (see +<emphasis role='bold'>UninstallColormap </emphasis> +request). +If the colormap is defined as the colormap for a window (by means of +<emphasis role='bold'>CreateWindow </emphasis> +or +<emphasis role='bold'>ChangeWindowAttributes ), </emphasis> +the colormap for the window is changed to +<emphasis role='bold'>None , </emphasis> +and a +<emphasis role='bold'>ColormapNotify </emphasis> +event is generated. +The protocol does not define the colors displayed for a window with a colormap of +<emphasis role='bold'>None .</emphasis> +</para> +<para> +This request has no effect on a default colormap for a screen. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>CopyColormapAndFree</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>mid</emphasis>, <emphasis remap='I'>src-cmap</emphasis>: COLORMAP +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Alloc ,</emphasis> +<emphasis role='bold'>Colormap , </emphasis> +<emphasis role='bold'>IDChoice</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request creates a colormap of the same visual type +and for the same screen as src-cmap, +and it associates identifier mid with it. +It also moves all of the client's existing allocations from src-cmap +to the new colormap with their color values intact +and their read-only or writable characteristics intact, +and it frees those entries in src-cmap. +Color values in other entries in the new colormap are undefined. +If src-cmap was created by the client with alloc +<emphasis role='bold'>All </emphasis> +(see +<emphasis role='bold'>CreateColormap </emphasis> +request), +then the new colormap is also created with alloc +<emphasis role='bold'>All , </emphasis> +all color values for all entries are copied from src-cmap, +and then all entries in src-cmap are freed. +If src-cmap was not created by the client with alloc +<emphasis role='bold'>All , </emphasis> +then the allocations to be moved are all those pixels and planes that have +been allocated by the client using either +<emphasis role='bold'>AllocColor , </emphasis> +<emphasis role='bold'>AllocNamedColor ,</emphasis> +<emphasis role='bold'>AllocColorCells , </emphasis> +or +<emphasis role='bold'>AllocColorPlanes</emphasis> +and that have not been freed since they were allocated. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>InstallColormap</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>cmap</emphasis>: COLORMAP +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Colormap</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request makes this colormap an installed map for its screen. +All windows associated with this colormap immediately display with true colors. +As a side effect, +additional colormaps might be implicitly installed +or uninstalled by the server. +Which other colormaps get installed or uninstalled is server-dependent +except that the required list must remain installed. +</para> +<para> +If cmap is not already an installed map, a +<emphasis role='bold'>ColormapNotify </emphasis> +event is generated on every window having cmap as an attribute. +In addition, +for every other colormap that is installed or uninstalled as a result +of the request, a +<emphasis role='bold'>ColormapNotify </emphasis> +event is generated on every window having that colormap as an attribute. +</para> +<para> +At any time, there is a subset of the installed maps that are viewed as an +ordered list and are called the required list. +The length of the required list is at most M, +where M is the min-installed-maps specified for the screen in the +connection setup. +The required list is maintained as follows. +When a colormap is an explicit argument to +<emphasis role='bold'>InstallColormap ,</emphasis> +it is added to the head of the list; the list is truncated at the +tail, if necessary, to keep the length of the list to at most M. +When a colormap is an explicit argument to +<emphasis role='bold'>UninstallColormap </emphasis> +and it is in the required list, it is removed from the list. +A colormap is not added to the required list when it is installed implicitly +by the server, and the server cannot implicitly uninstall a colormap that is +in the required list. +</para> +<para> +Initially the default colormap for a screen is installed (but is not in +the required list). +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>UninstallColormap</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>cmap</emphasis>: COLORMAP +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Colormap</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +If cmap is on the required list for its screen (see +<emphasis role='bold'>InstallColormap </emphasis> +request), +it is removed from the list. +As a side effect, +cmap might be uninstalled, +and additional colormaps might be implicitly installed or uninstalled. +Which colormaps get installed or uninstalled is server-dependent +except that the required list must remain installed. +</para> +<para> +If cmap becomes uninstalled, a +<emphasis role='bold'>ColormapNotify </emphasis> +event is generated on every window having cmap as an attribute. +In addition, +for every other colormap that is installed or uninstalled as a result of +the request, a +<emphasis role='bold'>ColormapNotify </emphasis> +event is generated on every window having that colormap as an attribute. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>ListInstalledColormaps</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>window</emphasis>: WINDOW +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> + -> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +cmaps: LISTofCOLORMAP +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Window</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request returns a list of the currently installed colormaps for the +screen of the specified window. +The order of colormaps is not significant, +and there is no explicit indication of the required list (see +<emphasis role='bold'>InstallColormap </emphasis> +request). +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>AllocColor</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>cmap</emphasis>: COLORMAP + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>red</emphasis>, <emphasis remap='I'>green</emphasis>, <emphasis remap='I'>blue</emphasis>: CARD16 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> + -> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +pixel: CARD32 + </entry> + </row> + <row rowsep='0'> + <entry> +red, green, blue: CARD16 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Alloc ,</emphasis> +<emphasis role='bold'>Colormap </emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request allocates a read-only colormap entry corresponding to the closest +RGB values provided by the hardware. +It also returns the pixel and the RGB values actually used. +Multiple clients requesting the same effective RGB values can be assigned +the same read-only entry, allowing entries to be shared. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>AllocNamedColor</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>cmap</emphasis>: COLORMAP + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>name</emphasis>: STRING8 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> + -> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +pixel: CARD32 + </entry> + </row> + <row rowsep='0'> + <entry> +exact-red, exact-green, exact-blue: CARD16 + </entry> + </row> + <row rowsep='0'> + <entry> +visual-red, visual-green, visual-blue: CARD16 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Alloc ,</emphasis> +<emphasis role='bold'>Colormap , </emphasis> +<emphasis role='bold'>Name</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request looks up the named color with respect to the screen associated +with the colormap. +Then, it does an +<emphasis role='bold'>AllocColor </emphasis> +on cmap. +The name should use the ISO Latin-1 encoding, +and uppercase and lowercase do not matter. +The exact RGB values specify the true values for the color, +and the visual values specify the values actually used in the colormap. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>AllocColorCells</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>cmap</emphasis>: COLORMAP + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>colors</emphasis>, <emphasis remap='I'>planes</emphasis>: CARD16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>contiguous</emphasis>: BOOL +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> + -> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +pixels, masks: LISTofCARD32 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Alloc ,</emphasis> +<emphasis role='bold'>Colormap , </emphasis> +<emphasis role='bold'>Value</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +The number of colors must be positive, +and the number of planes must be nonnegative (or a +<emphasis role='bold'>Value </emphasis> +error results). +If C colors and P planes are requested, +then C pixels and P masks are returned. +No mask will have any bits in common with any other mask +or with any of the pixels. +By ORing together masks and pixels, +C*%2 sup P% distinct pixels can be produced; +all of these are allocated writable by the request. +For +<emphasis role='bold'>GrayScale </emphasis> +or +<emphasis role='bold'>PseudoColor , </emphasis> +each mask will have exactly one bit set to 1; for +<emphasis role='bold'>DirectColor ,</emphasis> +each will have exactly three bits set to 1. +If contiguous is +<emphasis role='bold'>True </emphasis> +and if all masks are ORed together, +a single contiguous set of bits will be formed for +<emphasis role='bold'>GrayScale </emphasis> +or +<emphasis role='bold'>PseudoColor , </emphasis> +and three contiguous sets of bits (one within each pixel subfield) for +<emphasis role='bold'>DirectColor .</emphasis> +The RGB values of the allocated entries are undefined. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>AllocColorPlanes</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>cmap</emphasis>: COLORMAP + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>colors</emphasis>, <emphasis remap='I'>reds</emphasis>, <emphasis remap='I'>greens</emphasis>, <emphasis remap='I'>blues</emphasis>: CARD16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>contiguous</emphasis>: BOOL +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> + -> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +pixels: LISTofCARD32 + </entry> + </row> + <row rowsep='0'> + <entry> +red-mask, green-mask, blue-mask: CARD32 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Alloc ,</emphasis> +<emphasis role='bold'>Colormap , </emphasis> +<emphasis role='bold'>Value</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +The number of colors must be positive, +and the reds, greens, and blues must be nonnegative (or a +<emphasis role='bold'>Value </emphasis> +error results). +If C colors, R reds, G greens, and B blues are requested, +then C pixels are returned, and the masks have R, G, and B bits set, +respectively. +If contiguous is +<emphasis role='bold'>True , </emphasis> +then each mask will have a contiguous set of bits. +No mask will have any bits in common with any other mask +or with any of the pixels. +For +<emphasis role='bold'>DirectColor , </emphasis> +each mask will lie within the corresponding pixel subfield. +By ORing together subsets of masks with pixels, +C*%2 sup R+G+B% distinct pixels can be produced; +all of these are allocated writable by the request. +The initial RGB values of the allocated entries are undefined. +In the colormap, +there are only C*%2 sup R% independent red entries, +C*%2 sup G% independent green entries, +and C*%2 sup B% independent blue entries. +This is true even for +<emphasis role='bold'>PseudoColor .</emphasis> +When the colormap entry for a pixel value is changed using +<emphasis role='bold'>StoreColors </emphasis> +or +<emphasis role='bold'>StoreNamedColor , </emphasis> +the pixel is decomposed according to the masks and the +corresponding independent entries are updated. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>FreeColors</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>cmap</emphasis>: COLORMAP + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>pixels</emphasis>: LISTofCARD32 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>plane-mask</emphasis>: CARD32 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Access , </emphasis> +<emphasis role='bold'>Colormap , </emphasis> +<emphasis role='bold'>Value</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +The plane-mask should not have any bits in common with any of the +pixels. +The set of all pixels is produced by ORing together subsets of +plane-mask with the pixels. +The request frees all of these pixels that +were allocated by the client (using +<emphasis role='bold'>AllocColor , </emphasis> +<emphasis role='bold'>AllocNamedColor ,</emphasis> +<emphasis role='bold'>AllocColorCells , </emphasis> +and +<emphasis role='bold'>AllocColorPlanes ).</emphasis> +Note that freeing an +individual pixel obtained from +<emphasis role='bold'>AllocColorPlanes </emphasis> +may not actually allow it to be reused until all of its related pixels +are also freed. +Similarly, a read-only entry is not actually freed until it has been +freed by all clients, and if a client allocates the same read-only entry +multiple times, it must free the entry that many times before the +entry is actually freed. +</para> +<para> +All specified pixels that are allocated by the client in cmap are freed, +even if one or more pixels produce an error. +A +<emphasis role='bold'>Value </emphasis> +error is generated if a specified pixel is not a valid index into cmap. +An +<emphasis role='bold'>Access </emphasis> +error is generated if a specified pixel is not allocated by the +client (that is, is unallocated or is only allocated by another client) +or if the colormap was created with all entries writable (using an alloc +value of +<emphasis role='bold'>All </emphasis> +in +<emphasis role='bold'>CreateColormap ).</emphasis> +If more than one pixel is in error, +it is arbitrary as to which pixel is reported. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>StoreColors</emphasis> +</para> + +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<emphasis remap='I'>cmap</emphasis>: COLORMAP + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>items</emphasis>: LISTofCOLORITEM + </entry> + </row> + <row rowsep='0'> + <entry> +where: + </entry> + </row> + <row rowsep='0'> + <entry> + <para> + <informaltable frame='none'> + <tgroup cols='2' align='left'> + <colspec colname='c1' colwidth='1*' colsep='0'/> + <colspec colname='c2' colwidth='2*' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry>COLORITEM:</entry> + <entry>[pixel: CARD32</entry> + </row> + <row rowsep='0'> + <entry></entry> + <entry> +do-red, do-green, do-blue: BOOL + </entry> + </row> + <row rowsep='0'> + <entry></entry> + <entry> +red, green, blue: CARD16] + </entry> + </row> + </tbody> + </tgroup> + </informaltable> + </para> + </entry> + </row> + <row rowsep='0'> + <entry> +Errors: +<emphasis role='bold'>Access</emphasis>, +<emphasis role='bold'>Colormap</emphasis>, +<emphasis role='bold'>Value</emphasis> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> + +<para> +This request changes the colormap entries of the specified pixels. +The do-red, do-green, and do-blue fields indicate which components +should actually be changed. +If the colormap is an installed map for its screen, +the changes are visible immediately. +</para> +<para> +All specified pixels that are allocated writable in cmap (by any client) +are changed, even if one or more pixels produce an error. +A +<emphasis role='bold'>Value </emphasis> +error is generated if a specified pixel is not a valid index into cmap, and an +<emphasis role='bold'>Access </emphasis> +error is generated if a specified pixel is unallocated or is allocated +read-only. +If more than one pixel is in error, +it is arbitrary as to which pixel is reported. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>StoreNamedColor</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>cmap</emphasis>: COLORMAP + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>pixel</emphasis>: CARD32 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>name</emphasis>: STRING8 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>do-red</emphasis>, <emphasis remap='I'>do-green</emphasis>, <emphasis remap='I'>do-blue</emphasis>: BOOL +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Access , </emphasis> +<emphasis role='bold'>Colormap ,</emphasis> +<emphasis role='bold'>Name , </emphasis> +<emphasis role='bold'>Value</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request looks up the named color with respect to the screen associated +with cmap and then does a +<emphasis role='bold'>StoreColors </emphasis> +in cmap. +The name should use the ISO Latin-1 encoding, +and uppercase and lowercase do not matter. +The +<emphasis role='bold'>Access </emphasis> +and +<emphasis role='bold'>Value </emphasis> +errors are the same as in +<emphasis role='bold'>StoreColors .</emphasis> +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>QueryColors</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>cmap</emphasis>: COLORMAP + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>pixels</emphasis>: LISTofCARD32 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> + -> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +colors: LISTofRGB +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +where: +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +RGB: [red, green, blue: CARD16] +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Colormap , </emphasis> +<emphasis role='bold'>Value</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request returns the hardware-specific color values stored in cmap for +the specified pixels. +The values returned for an unallocated entry are undefined. +A +<emphasis role='bold'>Value </emphasis> +error is generated if a pixel is not a valid index into cmap. +If more than one pixel is in error, +it is arbitrary as to which pixel is reported. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>LookupColor</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>cmap</emphasis>: COLORMAP + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>name</emphasis>: STRING8 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> + -> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +exact-red, exact-green, exact-blue: CARD16 + </entry> + </row> + <row rowsep='0'> + <entry> +visual-red, visual-green, visual-blue: CARD16 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Colormap , </emphasis> +<emphasis role='bold'>Name</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request looks up the string name of a color with respect to the screen +associated with cmap and returns both the exact color values and +the closest values provided by the hardware with respect to the visual +type of cmap. +The name should use the ISO Latin-1 encoding, +and uppercase and lowercase do not matter. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>CreateCursor</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>cid</emphasis>: CURSOR + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>source</emphasis>: PIXMAP + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>mask</emphasis>: PIXMAP or +<emphasis role='bold'>None</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>fore-red</emphasis>, <emphasis remap='I'>fore-green</emphasis>, <emphasis remap='I'>fore-blue</emphasis>: CARD16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>back-red</emphasis>, <emphasis remap='I'>back-green</emphasis>, <emphasis remap='I'>back-blue</emphasis>: CARD16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>x</emphasis>, <emphasis remap='I'>y</emphasis>: CARD16 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Alloc ,</emphasis> +<emphasis role='bold'>IDChoice , </emphasis> +<emphasis role='bold'>Match , </emphasis> +<emphasis role='bold'>Pixmap</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request creates a cursor and associates identifier cid with it. +The foreground and background RGB values must be specified, +even if the server only has a +<emphasis role='bold'>StaticGray </emphasis> +or +<emphasis role='bold'>GrayScale </emphasis> +screen. +The foreground is used for the bits set to 1 in the source, +and the background is used for the bits set to 0. +Both source and mask (if specified) must have depth one (or a +<emphasis role='bold'>Match </emphasis> +error results), but they can have any root. +The mask pixmap defines the shape of the cursor. +That is, +the bits set to 1 in the mask define which source pixels will be displayed, +and where the mask has bits set to 0, +the corresponding bits of the source pixmap are ignored. +If no mask is given, +all pixels of the source are displayed. +The mask, if present, must be the same size as the source (or a +<emphasis role='bold'>Match </emphasis> +error results). +The x and y coordinates define the hotspot relative to the source's origin +and must be a point within the source (or a +<emphasis role='bold'>Match </emphasis> +error results). +</para> +<para> +The components of the cursor may be transformed arbitrarily to meet +display limitations. +</para> +<para> +The pixmaps can be freed immediately if no further explicit references +to them are to be made. +</para> +<para> +Subsequent drawing in the source or mask pixmap has an undefined effect +on the cursor. +The server might or might not make a copy of the pixmap. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>CreateGlyphCursor</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>cid</emphasis>: CURSOR + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>source-font</emphasis>: FONT + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>mask-font</emphasis>: FONT or +<emphasis role='bold'>None</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>source-char</emphasis>, <emphasis remap='I'>mask-char</emphasis>: CARD16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>fore-red</emphasis>, <emphasis remap='I'>fore-green</emphasis>, <emphasis remap='I'>fore-blue</emphasis>: CARD16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>back-red</emphasis>, <emphasis remap='I'>back-green</emphasis>, <emphasis remap='I'>back-blue</emphasis>: CARD16 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Alloc ,</emphasis> +<emphasis role='bold'>Font , </emphasis> +<emphasis role='bold'>IDChoice , </emphasis> +<emphasis role='bold'>Value</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request is similar to +<emphasis role='bold'>CreateCursor , </emphasis> +except the source and mask bitmaps are obtained from the specified font glyphs. +The source-char must be a defined glyph in source-font, +and if mask-font is given, mask-char must be a defined glyph in mask-font +(or a +<emphasis role='bold'>Value </emphasis> +error results). +The mask font and character are optional. +The origins of the source and mask (if it is defined) glyphs +are positioned coincidently and define the hotspot. +The source and mask need not have the same bounding box metrics, +and there is no restriction on the placement of the hotspot relative +to the bounding boxes. +If no mask is given, +all pixels of the source are displayed. +Note that source-char and mask-char are CARD16, not CHAR2B. +For 2-byte matrix fonts, +the 16-bit value should be formed with byte1 in the most significant byte +and byte2 in the least significant byte. +</para> +<para> +The components of the cursor may be transformed arbitrarily to meet +display limitations. +</para> +<para> +The fonts can be freed immediately if no further explicit references to +them are to be made. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>FreeCursor</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>cursor</emphasis>: CURSOR +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Cursor</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request deletes the association between the resource ID and the cursor. +The cursor storage will be freed when no other resource references it. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>RecolorCursor</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>cursor</emphasis>: CURSOR + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>fore-red</emphasis>, <emphasis remap='I'>fore-green</emphasis>, <emphasis remap='I'>fore-blue</emphasis>: CARD16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>back-red</emphasis>, <emphasis remap='I'>back-green</emphasis>, <emphasis remap='I'>back-blue</emphasis>: CARD16 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Cursor</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request changes the color of a cursor. +If the cursor is being displayed on a screen, +the change is visible immediately. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>QueryBestSize</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>class</emphasis>: +<emphasis role='bold'>{ Cursor , </emphasis> +<emphasis role='bold'>Tile , </emphasis> +<emphasis role='bold'>Stipple }</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>drawable</emphasis>: DRAWABLE + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>width</emphasis>, <emphasis remap='I'>height</emphasis>: CARD16 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> + -> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +width, height: CARD16 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Drawable , </emphasis> +<emphasis role='bold'>Match ,</emphasis> +<emphasis role='bold'>Value</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request returns the best size that is closest to the argument size. +For +<emphasis role='bold'>Cursor , </emphasis> +this is the largest size that can be fully displayed. +For +<emphasis role='bold'>Tile , </emphasis> +this is the size that can be tiled fastest. +For +<emphasis role='bold'>Stipple , </emphasis> +this is the size that can be stippled fastest. +</para> +<para> +For +<emphasis role='bold'>Cursor , </emphasis> +the drawable indicates the desired screen. +For +<emphasis role='bold'>Tile </emphasis> +and +<emphasis role='bold'>Stipple , </emphasis> +the drawable indicates the screen and also possibly the window class and depth. +An +<emphasis role='bold'>InputOnly </emphasis> +window cannot be used as the drawable for +<emphasis role='bold'>Tile </emphasis> +or +<emphasis role='bold'>Stipple </emphasis> +(or a +<emphasis role='bold'>Match </emphasis> +error results). +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>QueryExtension</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>name</emphasis>: STRING8 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> + -> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +present: BOOL + </entry> + </row> + <row rowsep='0'> + <entry> +major-opcode: CARD8 + </entry> + </row> + <row rowsep='0'> + <entry> +first-event: CARD8 + </entry> + </row> + <row rowsep='0'> + <entry> +first-error: CARD8 +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request determines if the named extension is present. +If so, +the major opcode for the extension is returned, if it has one. +Otherwise, zero is returned. +Any minor opcode and the request formats are specific to the extension. +If the extension involves additional event types, +the base event type code is returned. +Otherwise, zero is returned. +The format of the events is specific to the extension. +If the extension involves additional error codes, +the base error code is returned. +Otherwise, zero is returned. +The format of additional data in the errors is specific to the extension. +</para> +<para> +The extension name should use the ISO Latin-1 encoding, +and uppercase and lowercase matter. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>ListExtensions</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> + -> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +names: LISTofSTRING8 +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request returns a list of all extensions supported by the server. +</para> +<para> +<emphasis role='bold'>SetModifierMapping</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>keycodes-per-modifier</emphasis>: CARD8 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>keycodes</emphasis>: LISTofKEYCODE +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> + -> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +status: +<emphasis role='bold'>{ Success , </emphasis> +<emphasis role='bold'>Busy , </emphasis> +<emphasis role='bold'>Failed }</emphasis> +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Alloc ,</emphasis> +<emphasis role='bold'>Value</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request specifies the keycodes (if any) of the keys to be used as +modifiers. +The number of keycodes in the list must be 8*keycodes-per-modifier (or a +<emphasis role='bold'>Length </emphasis> +error results). +The keycodes are divided into eight sets, +with each set containing keycodes-per-modifier elements. +The sets are assigned to the modifiers +<emphasis role='bold'>Shift , </emphasis> +<emphasis role='bold'>Lock , </emphasis> +<emphasis role='bold'>Control , </emphasis> +<emphasis role='bold'>Mod1 ,</emphasis> +<emphasis role='bold'>Mod2 , </emphasis> +<emphasis role='bold'>Mod3 , </emphasis> +<emphasis role='bold'>Mod4 , </emphasis> +and +<emphasis role='bold'>Mod5 ,</emphasis> +in order. +Only nonzero keycode values are used within each set; +zero values are ignored. +All of the nonzero keycodes must be in the range specified by min-keycode +and max-keycode in the connection setup (or a +<emphasis role='bold'>Value </emphasis> +error results). +The order of keycodes within a set does not matter. +If no nonzero values are specified in a set, +the use of the corresponding modifier is disabled, +and the modifier bit will always be zero. +Otherwise, the modifier bit will be one whenever +at least one of the keys in the corresponding set is in the down +position. +</para> +<para> +A server can impose restrictions on how modifiers can be changed (for example, +if certain keys do not generate up transitions in hardware, +if auto-repeat cannot be disabled on certain keys, +or if multiple keys per modifier are not supported). +The status reply is +<emphasis role='bold'>Failed </emphasis> +if some such restriction is violated, +and none of the modifiers is changed. +</para> +<para> +If the new nonzero keycodes specified for a modifier differ from those +currently defined and any (current or new) keys for that modifier are +logically in the down state, then the status reply is +<emphasis role='bold'>Busy , </emphasis> +and none of the modifiers is changed. +</para> +<para> +This request generates a +<emphasis role='bold'>MappingNotify </emphasis> +event on a +<emphasis role='bold'>Success </emphasis> +status. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>GetModifierMapping</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> + -> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +keycodes-per-modifier: CARD8 + </entry> + </row> + <row rowsep='0'> + <entry> +keycodes: LISTofKEYCODE +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request returns the keycodes of the keys being used as modifiers. +The number of keycodes in the list is 8*keycodes-per-modifier. +The keycodes are divided into eight sets, +with each set containing keycodes-per-modifier elements. +The sets are assigned to the modifiers +<emphasis role='bold'>Shift ,</emphasis> +<emphasis role='bold'>Lock ,</emphasis> +<emphasis role='bold'>Control ,</emphasis> +<emphasis role='bold'>Mod1 ,</emphasis> +<emphasis role='bold'>Mod2 ,</emphasis> +<emphasis role='bold'>Mod3 ,</emphasis> +<emphasis role='bold'>Mod4 ,</emphasis> +and +<emphasis role='bold'>Mod5 ,</emphasis> +in order. +The keycodes-per-modifier value is chosen arbitrarily by the server; +zeroes are used to fill in unused elements within each set. +If only zero values are given in a set, +the use of the corresponding modifier has been disabled. +The order of keycodes within each set is chosen arbitrarily by the server. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>ChangeKeyboardMapping</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>first-keycode</emphasis>: KEYCODE + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>keysyms-per-keycode</emphasis>: CARD8 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>keysyms</emphasis>: LISTofKEYSYM +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Alloc ,</emphasis> +<emphasis role='bold'>Value</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request defines the symbols for the specified number of keycodes, +starting with the specified keycode. +The symbols for keycodes outside this range remained unchanged. +The number of elements in the keysyms list must be a multiple of +keysyms-per-keycode (or a +<emphasis role='bold'>Length </emphasis> +error results). +The first-keycode must be greater than or equal to min-keycode as returned +in the connection setup (or a +<emphasis role='bold'>Value </emphasis> +error results) and: +<!-- .DS --> +first-keycode + (keysyms-length / keysyms-per-keycode) - 1 +<!-- .DE --> +</para> +<para> +must be less than or equal to max-keycode as returned in the connection +setup (or a +<emphasis role='bold'>Value </emphasis> +error results). +KEYSYM number N (counting from zero) for keycode K has an index +(counting from zero) of: +<!-- .DS --> +(K - first-keycode) * keysyms-per-keycode + N +<!-- .DE --> +</para> +<para> +in keysyms. +The keysyms-per-keycode can be chosen arbitrarily by the client +to be large enough to hold all desired symbols. +A special KEYSYM value of +<emphasis role='bold'>NoSymbol </emphasis> +should be used to fill in unused elements for individual keycodes. +It is legal for +<emphasis role='bold'>NoSymbol </emphasis> +to appear in nontrailing positions of the effective list for a keycode. +</para> +<para> +This request generates a +<emphasis role='bold'>MappingNotify </emphasis> +event. +</para> +<para> +There is no requirement that the server interpret this mapping; +it is merely stored for reading and writing by clients (see section 5). +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>GetKeyboardMapping</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>first-keycode</emphasis>: KEYCODE + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>count</emphasis>: CARD8 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> + -> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +keysyms-per-keycode: CARD8 + </entry> + </row> + <row rowsep='0'> + <entry> +keysyms: LISTofKEYSYM +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Value</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request returns the symbols for the specified number of keycodes, +starting with the specified keycode. +The first-keycode must be greater than or equal to +min-keycode as returned in the connection setup (or a +<emphasis role='bold'>Value </emphasis> +error results), and: +<!-- .DS --> +first-keycode + count - 1 +<!-- .DE --> +</para> +<para> +must be less than or equal to max-keycode as returned in the connection setup +(or a +<emphasis role='bold'>Value </emphasis> +error results). +The number of elements in the keysyms list is: +<!-- .DS --> +count * keysyms-per-keycode +<!-- .DE --> +</para> +<para> +and KEYSYM number N (counting from zero) for keycode K has an index +(counting from zero) of: +<!-- .DS --> +(K - first-keycode) * keysyms-per-keycode + N +<!-- .DE --> +</para> +<para> +in keysyms. +The keysyms-per-keycode value is chosen arbitrarily by the server +to be large enough to report all requested symbols. +A special KEYSYM value of +<emphasis role='bold'>NoSymbol </emphasis> +is used to fill in unused elements for individual keycodes. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>ChangeKeyboardControl</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>value-mask</emphasis>: BITMASK + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>value-list</emphasis>: LISTofVALUE +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +Errors: +<emphasis role='bold'>Match</emphasis>, +<emphasis role='bold'>Value</emphasis> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> + +<para> +This request controls various aspects of the keyboard. +The value-mask and value-list specify which controls are to be changed. +The possible values are: +</para> + +<informaltable frame='none'> + <tgroup cols='2' align='left'> + <colspec colname='c1' colsep='0'/> + <colspec colname='c2' colsep='0'/> + <thead> + <row rowsep='0'> + <entry>Control</entry> + <entry>Type</entry> + </row> + </thead> + <tbody> + <row rowsep='0'> + <entry>key-click-percent</entry> + <entry>INT8</entry> + </row> + <row rowsep='0'> + <entry>bell-percent</entry> + <entry>INT8</entry> + </row> + <row rowsep='0'> + <entry>bell-pitch</entry> + <entry>INT16</entry> + </row> + <row rowsep='0'> + <entry>bell-duration</entry> + <entry>INT16</entry> + </row> + <row rowsep='0'> + <entry>led</entry> + <entry>CARD8</entry> + </row> + <row rowsep='0'> + <entry>led-mode</entry> + <entry> +{ <emphasis role='bold'>On</emphasis>, +<emphasis role='bold'>Off</emphasis> } + </entry> + </row> + <row rowsep='0'> + <entry>key </entry> + <entry>KEYCODE</entry> + </row> + <row rowsep='0'> + <entry>auto-repeat-mode</entry> + <entry> +{ <emphasis role='bold'>On</emphasis>, +<emphasis role='bold'>Off</emphasis>, +<emphasis role='bold'>Default</emphasis> } + </entry> + </row> + </tbody> + </tgroup> +</informaltable> + +<para> +The key-click-percent sets the volume for key clicks between 0 (off) and +100 (loud) inclusive, if possible. +Setting to -1 restores the default. +Other negative values generate a +<emphasis role='bold'>Value </emphasis> +error. +</para> +<para> +The bell-percent sets the base volume for the bell between 0 (off) and 100 +(loud) inclusive, if possible. +Setting to -1 restores the default. +Other negative values generate a +<emphasis role='bold'>Value </emphasis> +error. +</para> +<para> +The bell-pitch sets the pitch (specified in Hz) of the bell, if possible. +Setting to -1 restores the default. +Other negative values generate a +<emphasis role='bold'>Value </emphasis> +error. +</para> +<para> +The bell-duration sets the duration of the bell (specified in milliseconds), +if possible. +Setting to -1 restores the default. +Other negative values generate a +<emphasis role='bold'>Value </emphasis> +error. +</para> +<para> +If both led-mode and led are specified, +then the state of that LED is changed, if possible. +If only led-mode is specified, +then the state of all LEDs are changed, if possible. +At most 32 LEDs, numbered from one, are supported. +No standard interpretation of LEDs is defined. +It is a +<emphasis role='bold'>Match </emphasis> +error if an led is specified without an led-mode. +</para> +<para> +If both auto-repeat-mode and key are specified, +then the auto-repeat mode of that key is changed, if possible. +If only auto-repeat-mode is specified, +then the global auto-repeat mode for the entire keyboard is changed, +if possible, without affecting the per-key settings. +It is a +<emphasis role='bold'>Match </emphasis> +error if a key is specified without an auto-repeat-mode. +Each key has an individual mode of whether or not it should auto-repeat +and a default setting for that mode. +In addition, there is a global mode of whether auto-repeat should be +enabled or not and a default setting for that mode. +When the global mode is +<emphasis role='bold'>On ,</emphasis> +keys should obey their individual auto-repeat modes. +When the global mode is +<emphasis role='bold'>Off ,</emphasis> +no keys should auto-repeat. +An auto-repeating key generates alternating +<emphasis role='bold'>KeyPress </emphasis> +and +<emphasis role='bold'>KeyRelease </emphasis> +events. +When a key is used as a modifier, +it is desirable for the key not to auto-repeat, +regardless of the auto-repeat setting for that key. +</para> +<para> +A bell generator connected with the console but not directly on the +keyboard is treated as if it were part of the keyboard. +</para> +<para> +The order in which controls are verified and altered is server-dependent. +If an error is generated, +a subset of the controls may have been altered. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>GetKeyboardControl</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> + -> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +key-click-percent: CARD8 + </entry> + </row> + <row rowsep='0'> + <entry> +bell-percent: CARD8 + </entry> + </row> + <row rowsep='0'> + <entry> +bell-pitch: CARD16 + </entry> + </row> + <row rowsep='0'> + <entry> +bell-duration: CARD16 + </entry> + </row> + <row rowsep='0'> + <entry> +led-mask: CARD32 + </entry> + </row> + <row rowsep='0'> + <entry> +global-auto-repeat: +<emphasis role='bold'>{ On , </emphasis> +<emphasis role='bold'>Off }</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +auto-repeats: LISTofCARD8 +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request returns the current control values for the keyboard. +For the LEDs, +the least significant bit of led-mask corresponds to LED one, +and each one bit in led-mask indicates an LED that is lit. +The auto-repeats is a bit vector; +each one bit indicates that auto-repeat is enabled for the corresponding key. +The vector is represented as 32 bytes. +Byte N (from 0) contains the bits for keys 8N to 8N + 7, +with the least significant bit in the byte representing key 8N. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>Bell</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>percent</emphasis>: INT8 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Value</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request rings the bell on the keyboard at a volume relative to the +base volume for the keyboard, if possible. +Percent can range from -100 to 100 inclusive (or a +<emphasis role='bold'>Value </emphasis> +error results). +The volume at which the bell is rung when percent is nonnegative is: +<!-- .DS --> +base - [(base * percent) / 100] + percent +<!-- .DE --> +</para> +<para> +When percent is negative, it is: +<!-- .DS --> +base + [(base * percent) / 100] +<!-- .DE --> +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>SetPointerMapping</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>map</emphasis>: LISTofCARD8 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> + -> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +status: +<emphasis role='bold'>{ Success , </emphasis> +<emphasis role='bold'>Busy }</emphasis> +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Value</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request sets the mapping of the pointer. +Elements of the list are indexed starting from one. +The length of the list must be the same as +<emphasis role='bold'>GetPointerMapping </emphasis> +would return (or a +<emphasis role='bold'>Value </emphasis> +error results). +The index is a core button number, +and the element of the list defines the effective number. +</para> +<para> +A zero element disables a button. +Elements are not restricted in value by the number of physical buttons, +but no two elements can have the same nonzero value (or a +<emphasis role='bold'>Value </emphasis> +error results). +</para> +<para> +If any of the buttons to be altered are logically in the down state, +the status reply is +<emphasis role='bold'>Busy ,</emphasis> +and the mapping is not changed. +</para> +<para> +This request generates a +<emphasis role='bold'>MappingNotify </emphasis> +event on a +<emphasis role='bold'>Success </emphasis> +status. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>GetPointerMapping</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> + -> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +map: LISTofCARD8 +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request returns the current mapping of the pointer. +Elements of the list are indexed starting from one. +The length of the list indicates the number of physical buttons. +</para> +<para> +The nominal mapping for a pointer is the identity mapping: map[i]=i. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>ChangePointerControl</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>do-acceleration</emphasis>, <emphasis remap='I'>do-threshold</emphasis>: BOOL + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>acceleration-numerator</emphasis>, <emphasis remap='I'>acceleration-denominator</emphasis>: INT16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>threshold</emphasis>: INT16 +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Value</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request defines how the pointer moves. +The acceleration is a multiplier for movement expressed as a fraction. +For example, +specifying 3/1 means the pointer moves three times as fast as normal. +The fraction can be rounded arbitrarily by the server. +Acceleration only takes effect if the pointer moves more than threshold +number of pixels at once and only applies to the amount beyond the threshold. +Setting a value to -1 restores the default. +Other negative values generate a +<emphasis role='bold'>Value </emphasis> +error, as does a zero value for acceleration-denominator. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>GetPointerControl</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> + -> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +acceleration-numerator, acceleration-denominator: CARD16 + </entry> + </row> + <row rowsep='0'> + <entry> +threshold: CARD16 +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request returns the current acceleration and threshold for the pointer. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>SetScreenSaver</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>timeout</emphasis>, <emphasis remap='I'>interval</emphasis>: INT16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>prefer-blanking</emphasis>: +<emphasis role='bold'>{ Yes , </emphasis> +<emphasis role='bold'>No , </emphasis> +<emphasis role='bold'>Default }</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>allow-exposures</emphasis>: +<emphasis role='bold'>{ Yes , </emphasis> +<emphasis role='bold'>No , </emphasis> +<emphasis role='bold'>Default }</emphasis> +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Value</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +The timeout and interval are specified in seconds; +setting a value to -1 restores the default. +Other negative values generate a +<emphasis role='bold'>Value </emphasis> +error. +If the timeout value is zero, +screen-saver is disabled (but an activated screen-saver is not deactivated). +If the timeout value is nonzero, +screen-saver is enabled. +Once screen-saver is enabled, +if no input from the keyboard or pointer is generated for timeout seconds, +screen-saver is activated. +For each screen, +if blanking is preferred and the hardware supports video blanking, +the screen will simply go blank. +Otherwise, +if either exposures are allowed or the screen can be regenerated without +sending exposure events to clients, +the screen is changed in a server-dependent fashion to avoid phosphor burn. +Otherwise, +the state of the screens does not change, and screen-saver is not activated. +At the next keyboard or pointer input or at the next +<emphasis role='bold'>ForceScreenSaver </emphasis> +with mode +<emphasis role='bold'>Reset ,</emphasis> +screen-saver is deactivated, and all screen states are restored. +</para> +<para> +If the server-dependent screen-saver method is amenable to periodic change, +interval serves as a hint about how long the change period should be, +with zero hinting that no periodic change should be made. +Examples of ways to change the screen include scrambling the color map +periodically, moving an icon image about the screen periodically, or +tiling the screen with the root window background tile, +randomly reorigined periodically. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>GetScreenSaver</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> + -> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +timeout, interval: CARD16 + </entry> + </row> + <row rowsep='0'> + <entry> +prefer-blanking: +<emphasis role='bold'>{ Yes , </emphasis> +<emphasis role='bold'>No }</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +allow-exposures: +<emphasis role='bold'>{ Yes , </emphasis> +<emphasis role='bold'>No }</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request returns the current screen-saver control values. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>ForceScreenSaver</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>mode</emphasis>: +<emphasis role='bold'>{ Activate , </emphasis> +<emphasis role='bold'>Reset }</emphasis> +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Value</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +If the mode is +<emphasis role='bold'>Activate </emphasis> +and screen-saver is currently deactivated, +then screen-saver is activated (even if screen-saver has been disabled with +a timeout value of zero). +If the mode is +<emphasis role='bold'>Reset </emphasis> +and screen-saver is currently enabled, +then screen-saver is deactivated (if it was activated), +and the activation timer is reset to its initial state +as if device input had just been received. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>ChangeHosts</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>mode</emphasis>: +<emphasis role='bold'>{ Insert , </emphasis> +<emphasis role='bold'>Delete }</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>host</emphasis>: HOST +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Access , </emphasis> +<emphasis role='bold'>Value</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request adds or removes the specified host from the access control list. +When the access control mechanism is enabled and a client attempts to +establish a connection to the server, +the host on which the client resides must be in the access control list, +or the client must have been granted permission by a server-dependent +method, or the server will refuse the connection. +</para> +<para> +The client must reside on the same host as the server and/or have been granted +permission by a server-dependent method to execute this request (or an +<emphasis role='bold'>Access </emphasis> +error results). +</para> +<para> +An initial access control list can usually be specified, +typically by naming a file that the server reads at startup and reset. +</para> +<para> +The following address families are defined. +A server is not required to support these families +and may support families not listed here. +Use of an unsupported family, an improper address format, +or an improper address length within a supported family results in a +<emphasis role='bold'>Value </emphasis> +error. +</para> +<para> +For the Internet family, +the address must be four bytes long. +The address bytes are in standard IP order; +the server performs no automatic swapping on the address bytes. +The Internet family supports IP version 4 addresses only. +</para> +<para> +For the InternetV6 family, the address must be sixteen bytes +long. The address bytes are in standard IP order; the +server performs no automatic swapping on the address bytes. +The InternetV6 family supports IP version 6 addresses only. +</para> +<para> +For the DECnet family, +the server performs no automatic swapping on the address bytes. +A Phase IV address is two bytes long: +the first byte contains the least significant eight bits of the node number, +and the second byte contains the most significant two bits of the node number in +the least significant two bits of the byte and the area in the most +significant six bits of the byte. +</para> +<para> +For the Chaos family, +the address must be two bytes long. +The host number is always the first byte in the address, +and the subnet number is always the second byte. +The server performs no automatic swapping on the address bytes. +</para> +<para> +For the ServerInterpreted family, the address may be of any +length up to 65535 bytes. The address consists of two strings +of ASCII characters, separated by a byte with a value of 0. +The first string represents the type of address, and the second +string contains the address value. Address types and the syntax +for their associated values will be registered via the X.Org Registry. +Implementors who wish to add implementation specific types may register +a unique prefix with the X.Org registry to prevent namespace +collisions. +</para> +<para> +Use of a host address in the ChangeHosts request is deprecated. It is +only useful when a host has a unique, constant address, a requirement +that is increasingly unmet as sites adopt dynamically assigned +addresses, network address translation gateways, IPv6 link local +addresses, and various other technologies. It also assumes all users of +a host share equivalent access rights, and as such has never been +suitable for many multi-user machine environments. Instead, more +secure forms of authentication, such as those based on shared secrets +or public key encryption, are recommended. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>ListHosts</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> + -> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +mode: +<emphasis role='bold'>{ Enabled , </emphasis> +<emphasis role='bold'>Disabled }</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +hosts: LISTofHOST +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request returns the hosts on the access control list +and whether use of the list at connection setup is currently +enabled or disabled. +</para> +<para> +Each HOST is padded to a multiple of four bytes. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>SetAccessControl</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>mode</emphasis>: +<emphasis role='bold'>{ Enable , </emphasis> +<emphasis role='bold'>Disable }</emphasis> +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Access ,</emphasis> +<emphasis role='bold'>Value</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request enables or disables the use of the access control list +at connection setups. +</para> +<para> +The client must reside on the same host as the server +and/or have been granted permission by a server-dependent method +to execute this request (or an +<emphasis role='bold'>Access </emphasis> +error results). +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>SetCloseDownMode</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>mode</emphasis>: +<emphasis role='bold'>{ Destroy , </emphasis> +<emphasis role='bold'>RetainPermanent , </emphasis> +<emphasis role='bold'>RetainTemporary }</emphasis> +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Value</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This request defines what will happen to the client's resources +at connection close. +A connection starts in +<emphasis role='bold'>Destroy </emphasis> +mode. +The meaning of the close-down mode is described in section 10. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>KillClient</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>resource</emphasis>: CARD32 or +<emphasis role='bold'>AllTemporary</emphasis> +<!-- .in -.2i --> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +Errors: +<emphasis role='bold'>Value</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +If a valid resource is specified, +<emphasis role='bold'>KillClient </emphasis> +forces a close-down of the client that created the resource. +If the client has already terminated in either +<emphasis role='bold'>RetainPermanent </emphasis> +or +<emphasis role='bold'>RetainTemporary </emphasis> +mode, all of the client's resources are destroyed (see section 10). +If +<emphasis role='bold'>AllTemporary </emphasis> +is specified, +then the resources of all clients that have terminated in +<emphasis role='bold'>RetainTemporary </emphasis> +are destroyed. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>NoOperation</emphasis> +</para> +<para> +This request has no arguments and no results, +but the request length field +allows the request to be any multiple of four bytes in length. +The bytes contained in the request are uninterpreted by the server. +</para> +<para> +This request can be used in its minimum four byte form as padding where +necessary by client libraries that find it convenient to force requests +to begin on 64-bit boundaries. +</para> +</sect1> + +<sect1 id="connection_close"> +<title>Connection Close</title> +<!-- .XS --> +<!-- \*(SN Connection Close --> +<!-- .XE --> +<para> +At connection close, +all event selections made by the client are discarded. +If the client has the pointer actively grabbed, an +<emphasis role='bold'>UngrabPointer </emphasis> +is performed. +If the client has the keyboard actively grabbed, an +<emphasis role='bold'>UngrabKeyboard </emphasis> +is performed. +All passive grabs by the client are released. +If the client has the server grabbed, an +<emphasis role='bold'>UngrabServer </emphasis> +is performed. +All selections (see +<emphasis role='bold'>SetSelectionOwner </emphasis> +request) +owned by the client are disowned. +If close-down mode (see +<emphasis role='bold'>SetCloseDownMode </emphasis> +request) is +<emphasis role='bold'>RetainPermanent </emphasis> +or +<emphasis role='bold'>RetainTemporary , </emphasis> +then all resources (including colormap entries) +allocated by the client are marked as permanent or temporary, +respectively (but this does not prevent other clients from explicitly +destroying them). +If the mode is +<emphasis role='bold'>Destroy , </emphasis> +all of the client's resources are destroyed. +</para> +<para> +When a client's resources are destroyed, +for each window in the client's save-set, +if the window is an inferior of a window created by the client, +the save-set window is reparented to the closest ancestor such that +the save-set window is not an inferior of a window created by the client. +If the save-set window is unmapped, a +<emphasis role='bold'>MapWindow </emphasis> +request is performed on it (even if it was not an inferior +of a window created by the client). +The reparenting leaves unchanged the absolute coordinates +(with respect to the root window) of the upper-left outer corner of the +save-set window. +After save-set processing, +all windows created by the client are destroyed. +For each nonwindow resource created by the client, +the appropriate +<emphasis role='bold'>Free </emphasis> +request is performed. +All colors and colormap entries allocated by the client are freed. +</para> +<para> +A server goes through a cycle of having no connections and having some +connections. +At every transition to the state of having no connections +as a result of a connection closing with a +<emphasis role='bold'>Destroy </emphasis> +close-down mode, +the server resets its state as if it had just been started. +This starts by destroying all lingering resources from clients +that have terminated in +<emphasis role='bold'>RetainPermanent </emphasis> +or +<emphasis role='bold'>RetainTemporary </emphasis> +mode. +It additionally includes deleting all but the predefined atom identifiers, +deleting all properties on all root windows, resetting all device maps and +attributes (key click, bell volume, acceleration), resetting the access +control list, restoring the standard root tiles and cursors, restoring +the default font path, and restoring the input focus to state +<emphasis role='bold'>PointerRoot .</emphasis> +</para> +<para> +Note that closing a connection with a close-down mode of +<emphasis role='bold'>RetainPermanent </emphasis> +or +<emphasis role='bold'>RetainTemporary </emphasis> +will not cause the server to reset. +</para> +</sect1> +<!-- .NH 1 --> +<sect1 id="events"> +<title>Events</title> +<!-- .XS --> +<!-- \*(SN Events --> +<!-- .XE --> +<para> +When a button press is processed with the pointer in some window W +and no active pointer grab is in progress, +the ancestors of W are searched from the root down, +looking for a passive grab to activate. +If no matching passive grab on the button exists, +then an active grab is started automatically for the client receiving the event, +and the last-pointer-grab time is set to the current server time. +The effect is essentially equivalent to a +<emphasis role='bold'>GrabButton</emphasis> +with arguments: +</para> + +<informaltable frame='topbot'> + <tgroup cols='2' align='left'> + <colspec colname='c1' colsep='0'/> + <colspec colname='c2' colsep='0'/> + <thead> + <row rowsep='1'> + <entry>Argument</entry> + <entry>Value</entry> + </row> + </thead> + <tbody> + <row rowsep='0'> + <entry>event-window</entry> + <entry>Event window</entry> + </row> + <row rowsep='0'> + <entry>event-mask</entry> + <entry> +Client's selected pointer events on the event window + </entry> + </row> + <row rowsep='0'> + <entry>pointer-mode and keyboard-mode</entry> + <entry> +<emphasis role='bold'>Asynchronous</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry>owner-events</entry> + <entry> +<emphasis role='bold'>True </emphasis> +if the client has +<emphasis role='bold'>OwnerGrabButton </emphasis> +selected on the event window, otherwise +<emphasis role='bold'>False</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry>confine-to</entry> + <entry> +<emphasis role='bold'>None</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry>cursor</entry> + <entry> +<emphasis role='bold'>None</emphasis> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> + + + +<para> +The grab is terminated automatically when the logical state of the pointer +has all buttons released. +<emphasis role='bold'>UngrabPointer </emphasis> +and +<emphasis role='bold'>ChangeActivePointerGrab </emphasis> +can both be used to modify the active grab. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>KeyPress</emphasis> +</para> + +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .IN "KeyRelease" "" "@DEF@" --> +<emphasis role='bold'>KeyRelease</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .IN "ButtonPress" "" "@DEF@" --> +<emphasis role='bold'>ButtonPress</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .IN "ButtonRelease" "" "@DEF@" --> +<emphasis role='bold'>ButtonRelease</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .IN "MotionNotify" "" "@DEF@" --> +<emphasis role='bold'>MotionNotify</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>root</emphasis>, <emphasis remap='I'>event</emphasis>: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>child</emphasis>: WINDOW or +<emphasis role='bold'>None</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>same-screen</emphasis>: BOOL + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>root-x</emphasis>, <emphasis remap='I'>root-y</emphasis>, <emphasis remap='I'>event-x</emphasis>, <emphasis remap='I'>event-y</emphasis>: INT16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>detail</emphasis>: <see below> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>state</emphasis>: SETofKEYBUTMASK + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>time</emphasis>: TIMESTAMP +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> + +<para> +These events are generated either when a key or button logically changes state +or when the pointer logically moves. +The generation of these logical changes may lag the physical changes +if device event processing is frozen. +Note that +<emphasis role='bold'>KeyPress </emphasis> +and +<emphasis role='bold'>KeyRelease </emphasis> +are generated for all keys, even those mapped to modifier bits. +The source of the event is the window the pointer is in. +The window the event is reported with respect to is called the event window. +The event window is found by starting with the source window and +looking up the hierarchy for the first window on which any client has selected +interest in the event (provided no intervening window prohibits event +generation by including the event type in its do-not-propagate-mask). +The actual window used for reporting can be modified by active grabs and, +in the case of keyboard events, can be modified by the focus window. +</para> +<para> +The root is the root window of the source window, +and root-x and root-y are the pointer coordinates relative to root's origin +at the time of the event. +Event is the event window. +If the event window is on the same screen as root, +then event-x and event-y are the pointer coordinates relative to the +event window's origin. +Otherwise, event-x and event-y are zero. +If the source window is an inferior of the event window, +then child is set to the child of the event window that is an +ancestor of (or is) the source window. +Otherwise, it is set to +<emphasis role='bold'>None .</emphasis> +The state component gives the logical state of the buttons and modifier keys +just before the event. +The detail component type varies with the event type: +</para> + +<informaltable frame='topbot'> + <tgroup cols='2' align='left'> + <colspec colname='c1' colsep='0'/> + <colspec colname='c2' colsep='0'/> + <thead> + <row rowsep='1'> + <entry>Event</entry> + <entry>Component</entry> + </row> + </thead> + <tbody> + <row rowsep='0'> + <entry> +<emphasis role='bold'>KeyPress</emphasis>, +<emphasis role='bold'>KeyRelease</emphasis> + </entry> + <entry>KEYCODE</entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>ButtonPress</emphasis>, +<emphasis role='bold'>ButtonRelease</emphasis> + </entry> + <entry>BUTTON</entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>MotionNotify</emphasis> + </entry> + <entry> +{ <emphasis role='bold'>Normal</emphasis> +<emphasis role='bold'>Hint</emphasis> } + </entry> + </row> + </tbody> + </tgroup> +</informaltable> + +<para> +<emphasis role='bold'>MotionNotify </emphasis> +events are only generated when the motion begins and ends in the window. +The granularity of motion events is not guaranteed, +but a client selecting for motion events is guaranteed to get at least one +event when the pointer moves and comes to rest. +Selecting +<emphasis role='bold'>PointerMotion </emphasis> +receives events independent of the state of the pointer buttons. +By selecting some subset of +<emphasis role='bold'>Button[1-5]Motion </emphasis> +instead, +<emphasis role='bold'>MotionNotify </emphasis> +events will only be received when one or more of the +specified buttons are pressed. +By selecting +<emphasis role='bold'>ButtonMotion , </emphasis> +<emphasis role='bold'>MotionNotify </emphasis> +events will be received only when at least one button is pressed. +The events are always of type +<emphasis role='bold'>MotionNotify , </emphasis> +independent of the selection. +If +<emphasis role='bold'>PointerMotionHint </emphasis> +is selected, +the server is free to send only one +<emphasis role='bold'>MotionNotify </emphasis> +event (with detail +<emphasis role='bold'>Hint ) </emphasis> +to the client for the event window until +either the key or button state changes, +the pointer leaves the event window, +or the client issues a +<emphasis role='bold'>QueryPointer </emphasis> +or +<emphasis role='bold'>GetMotionEvents </emphasis> +request. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>EnterNotify</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .IN "LeaveNotify" "" "@DEF@" --> +<emphasis role='bold'>LeaveNotify</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>root</emphasis>, <emphasis remap='I'>event</emphasis>: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>child</emphasis>: WINDOW or +<emphasis role='bold'>None</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>same-screen</emphasis>: BOOL + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>root-x</emphasis>, <emphasis remap='I'>root-y</emphasis>, <emphasis remap='I'>event-x</emphasis>, <emphasis remap='I'>event-y</emphasis>: INT16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>mode</emphasis>: +<emphasis role='bold'>{ Normal , </emphasis> +<emphasis role='bold'>Grab , </emphasis> +<emphasis role='bold'>Ungrab }</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>detail</emphasis>: +<emphasis role='bold'>{ Ancestor , </emphasis> +<emphasis role='bold'>Virtual ,</emphasis> +<emphasis role='bold'>Inferior , </emphasis> +<emphasis role='bold'>Nonlinear , </emphasis> +<emphasis role='bold'>NonlinearVirtual }</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>focus</emphasis>: BOOL + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>state</emphasis>: SETofKEYBUTMASK + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>time</emphasis>: TIMESTAMP +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +If pointer motion or window hierarchy change causes the pointer to be +in a different window than before, +<emphasis role='bold'>EnterNotify </emphasis> +and +<emphasis role='bold'>LeaveNotify </emphasis> +events are generated instead of a +<emphasis role='bold'>MotionNotify </emphasis> +event. +Only clients selecting +<emphasis role='bold'>EnterWindow </emphasis> +on a window receive +<emphasis role='bold'>EnterNotify </emphasis> +events, and only clients selecting +<emphasis role='bold'>LeaveWindow </emphasis> +receive +<emphasis role='bold'>LeaveNotify </emphasis> +events. +The pointer position reported in the event is always the final position, +not the initial position of the pointer. +The root is the root window for this position, +and root-x and root-y are the pointer coordinates relative to root's +origin at the time of the event. +Event is the event window. +If the event window is on the same screen as root, +then event-x and event-y are the pointer coordinates relative +to the event window's origin. +Otherwise, event-x and event-y are zero. +In a +<emphasis role='bold'>LeaveNotify </emphasis> +event, if a child of the event window contains the initial position of the +pointer, then the child component is set to that child. +Otherwise, it is +<emphasis role='bold'>None .</emphasis> +For an +<emphasis role='bold'>EnterNotify </emphasis> +event, if a child of the event window contains the final pointer position, +then the child component is set to that child. +Otherwise, it is +<emphasis role='bold'>None .</emphasis> +If the event window is the focus window or an inferior of the focus window, +then focus is +<emphasis role='bold'>True .</emphasis> +Otherwise, focus is +<emphasis role='bold'>False .</emphasis> +</para> +<para> +Normal pointer motion events have mode +<emphasis role='bold'>Normal .</emphasis> +Pseudo-motion events when a grab activates have mode +<emphasis role='bold'>Grab , </emphasis> +and pseudo-motion events when a grab deactivates have mode +<emphasis role='bold'>Ungrab .</emphasis> +</para> +<para> +All +<emphasis role='bold'>EnterNotify </emphasis> +and +<emphasis role='bold'>LeaveNotify </emphasis> +events caused by a hierarchy change are generated after any hierarchy event +caused by that change (that is, +<emphasis role='bold'>UnmapNotify , </emphasis> +<emphasis role='bold'>MapNotify ,</emphasis> +<emphasis role='bold'>ConfigureNotify , </emphasis> +<emphasis role='bold'>GravityNotify , </emphasis> +<emphasis role='bold'>CirculateNotify ),</emphasis> +but the ordering of +<emphasis role='bold'>EnterNotify </emphasis> +and +<emphasis role='bold'>LeaveNotify </emphasis> +events with respect to +<emphasis role='bold'>FocusOut , </emphasis> +<emphasis role='bold'>VisibilityNotify , </emphasis> +and +<emphasis role='bold'>Expose </emphasis> +events is not constrained. +</para> +<para> +Normal events are generated as follows: +</para> + +<para> +When the pointer moves from window A to window B and A is an inferior +of B: +</para> + +<itemizedlist> + <listitem> + <para> +<emphasis role='bold'>LeaveNotify </emphasis> +with detail +<emphasis role='bold'>Ancestor </emphasis> +is generated on A. + </para> + </listitem> + <listitem> + <para> +<emphasis role='bold'>LeaveNotify </emphasis> +with detail +<emphasis role='bold'>Virtual </emphasis> +is generated on each window between A and B exclusive (in that order). + </para> + </listitem> + <listitem> + <para> +<emphasis role='bold'>EnterNotify </emphasis> +with detail +<emphasis role='bold'>Inferior </emphasis> +is generated on B. + </para> + </listitem> +</itemizedlist> + +<para> +When the pointer moves from window A to window B and B is an inferior +of A: +</para> + +<itemizedlist> + <listitem> + <para> +<!-- .IP bu 5 --> +<emphasis role='bold'>LeaveNotify </emphasis> +with detail +<emphasis role='bold'>Inferior </emphasis> +is generated on A. + </para> + </listitem> + <listitem> + <para> +<emphasis role='bold'>EnterNotify </emphasis> +with detail +<emphasis role='bold'>Virtual </emphasis> +is generated on each window between A and B exclusive (in that order). + </para> + </listitem> + <listitem> + <para> +<emphasis role='bold'>EnterNotify </emphasis> +with detail +<emphasis role='bold'>Ancestor </emphasis> +is generated on B. + </para> + </listitem> +</itemizedlist> + +<para> +When the pointer moves from window A to window B and window C is +their least common ancestor: +</para> + +<itemizedlist> + <listitem> + <para> +<emphasis role='bold'>LeaveNotify </emphasis> +with detail +<emphasis role='bold'>Nonlinear </emphasis> +is generated on A. + </para> + </listitem> + <listitem> + <para> +<emphasis role='bold'>LeaveNotify </emphasis> +with detail +<emphasis role='bold'>NonlinearVirtual </emphasis> +is generated on each window between A and C exclusive (in that order). + </para> + </listitem> + <listitem> + <para> +<emphasis role='bold'>EnterNotify </emphasis> +with detail +<emphasis role='bold'>NonlinearVirtual </emphasis> +is generated on each window between C and B exclusive (in that order). + </para> + </listitem> + <listitem> + <para> +<emphasis role='bold'>EnterNotify </emphasis> +with detail +<emphasis role='bold'>Nonlinear </emphasis> +is generated on B. + </para> + </listitem> +</itemizedlist> + +<para> +When the pointer moves from window A to window B on different screens: +</para> + +<itemizedlist> + <listitem> + <para> +<emphasis role='bold'>LeaveNotify </emphasis> +with detail +<emphasis role='bold'>Nonlinear </emphasis> +is generated on A. + </para> + </listitem> + <listitem> + <para> +If A is not a root window, +<emphasis role='bold'>LeaveNotify </emphasis> +with detail +<emphasis role='bold'>NonlinearVirtual </emphasis> +is generated on each window above A up to and including its root (in order). + </para> + </listitem> + <listitem> + <para> +If B is not a root window, +<emphasis role='bold'>EnterNotify </emphasis> +with detail +<emphasis role='bold'>NonlinearVirtual </emphasis> +is generated on each window from B's root down to but not including B +(in order). + </para> + </listitem> + <listitem> + <para> +<emphasis role='bold'>EnterNotify </emphasis> +with detail +<emphasis role='bold'>Nonlinear </emphasis> +is generated on B. + </para> + </listitem> +</itemizedlist> + +<para> +When a pointer grab activates (but after any initial warp into a confine-to +window and before generating any actual +<emphasis role='bold'>ButtonPress </emphasis> +event that activates the grab), +G is the grab-window for the grab, and P is the window the pointer is in: +</para> + +<itemizedlist> + <listitem> + <para> +<emphasis role='bold'>EnterNotify </emphasis> +and +<emphasis role='bold'>LeaveNotify </emphasis> +events with mode +<emphasis role='bold'>Grab </emphasis> +are generated (as for +<emphasis role='bold'>Normal </emphasis> +above) as if the pointer were to suddenly warp from its current +position in P to some position in G. +However, the pointer does not warp, +and the pointer position is used as both the initial +and final positions for the events. + </para> + </listitem> +</itemizedlist> + +<para> +When a pointer grab deactivates (but after generating any actual +<emphasis role='bold'>ButtonRelease </emphasis> +event that deactivates the grab), G is the grab-window for +the grab, and P is the window the pointer is in: +</para> + +<itemizedlist> + <listitem> + <para> +<emphasis role='bold'>EnterNotify </emphasis> +and +<emphasis role='bold'>LeaveNotify </emphasis> +events with mode +<emphasis role='bold'>Ungrab </emphasis> +are generated (as for +<emphasis role='bold'>Normal </emphasis> +above) as if the pointer were to suddenly warp from +some position in G to its current position in P. +However, the pointer does not warp, +and the current pointer position is used as both the initial +and final positions for the events. + </para> + </listitem> +</itemizedlist> + +<para> +<emphasis role='bold'>FocusIn</emphasis> +</para> +<!-- .IN "FocusOut" "" "@DEF@" --> +<para> +<emphasis role='bold'>FocusOut</emphasis> +</para> + +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>event</emphasis>: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>mode</emphasis>: +<emphasis role='bold'>{ Normal , </emphasis> +<emphasis role='bold'>WhileGrabbed , </emphasis> +<emphasis role='bold'>Grab , </emphasis> +<emphasis role='bold'>Ungrab }</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>detail</emphasis>: +{ <emphasis role='bold'>Ancestor</emphasis>, +<emphasis role='bold'>Virtual</emphasis>, +<emphasis role='bold'>Inferior</emphasis>, +<emphasis role='bold'>Nonlinear</emphasis>, +<emphasis role='bold'>NonlinearVirtual</emphasis>, +<emphasis role='bold'>Pointer</emphasis>, + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis role='bold'>PointerRoot</emphasis>, +<emphasis role='bold'>None</emphasis> } +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> + +<para> +These events are generated when the input focus changes +and are reported to clients selecting +<emphasis role='bold'>FocusChange </emphasis> +on the window. +Events generated by +<emphasis role='bold'>SetInputFocus </emphasis> +when the keyboard is not grabbed have mode +<emphasis role='bold'>Normal .</emphasis> +Events generated by +<emphasis role='bold'>SetInputFocus </emphasis> +when the keyboard is grabbed have mode +<emphasis role='bold'>WhileGrabbed .</emphasis> +Events generated when a keyboard grab activates have mode +<emphasis role='bold'>Grab , </emphasis> +and events generated when a keyboard grab deactivates have mode +<emphasis role='bold'>Ungrab .</emphasis> +</para> +<para> +All +<emphasis role='bold'>FocusOut </emphasis> +events caused by a window unmap are generated after any +<emphasis role='bold'>UnmapNotify </emphasis> +event, but the ordering of +<emphasis role='bold'>FocusOut </emphasis> +with respect to generated +<emphasis role='bold'>EnterNotify , </emphasis> +<emphasis role='bold'>LeaveNotify , </emphasis> +<emphasis role='bold'>VisibilityNotify , </emphasis> +and +<emphasis role='bold'>Expose </emphasis> +events is not constrained. +</para> +<para> +<emphasis role='bold'>Normal </emphasis> +and +<emphasis role='bold'>WhileGrabbed </emphasis> +events are generated as follows: +</para> +<para> +When the focus moves from window A to window B, A is an inferior of B, +and the pointer is in window P: +</para> + +<itemizedlist> + <listitem> + <para> +<emphasis role='bold'>FocusOut </emphasis> +with detail +<emphasis role='bold'>Ancestor </emphasis> +is generated on A. + </para> + </listitem> + <listitem> + <para> +<emphasis role='bold'>FocusOut </emphasis> +with detail +<emphasis role='bold'>Virtual </emphasis> +is generated on each window between A and B exclusive (in order). + </para> + </listitem> + <listitem> + <para> +<emphasis role='bold'>FocusIn </emphasis> +with detail +<emphasis role='bold'>Inferior </emphasis> +is generated on B. + </para> + </listitem> + <listitem> + <para> +If P is an inferior of B +but P is not A or an inferior of A or an ancestor of A, +<emphasis role='bold'>FocusIn </emphasis> +with detail +<emphasis role='bold'>Pointer </emphasis> +is generated on each window below B down to and including P (in order). + </para> + </listitem> +</itemizedlist> + + +<para> +When the focus moves from window A to window B, B is an inferior of A, +and the pointer is in window P: +</para> + +<itemizedlist> + <listitem> + <para> +If P is an inferior of A +but P is not an inferior of B or an ancestor of B, +<emphasis role='bold'>FocusOut </emphasis> +with detail +<emphasis role='bold'>Pointer </emphasis> +is generated on each window from P up to but not including A (in order). + </para> + </listitem> + <listitem> + <para> +<emphasis role='bold'>FocusOut </emphasis> +with detail +<emphasis role='bold'>Inferior </emphasis> +is generated on A. + </para> + </listitem> + <listitem> + <para> +<emphasis role='bold'>FocusIn </emphasis> +with detail +<emphasis role='bold'>Virtual </emphasis> +is generated on each window between A and B exclusive (in order). + </para> + </listitem> + <listitem> + <para> +<emphasis role='bold'>FocusIn </emphasis> +with detail +<emphasis role='bold'>Ancestor </emphasis> +is generated on B. + </para> + </listitem> +</itemizedlist> + +<para> +When the focus moves from window A to window B, window C is their +least common ancestor, and the pointer is in window P: +</para> + +<itemizedlist> + <listitem> + <para> +If P is an inferior of A, +<emphasis role='bold'>FocusOut </emphasis> +with detail +<emphasis role='bold'>Pointer </emphasis> +is generated on each window from P up to but not including A (in order). + </para> + </listitem> + <listitem> + <para> +<emphasis role='bold'>FocusOut </emphasis> +with detail +<emphasis role='bold'>Nonlinear </emphasis> +is generated on A. + </para> + </listitem> + <listitem> + <para> +<emphasis role='bold'>FocusOut </emphasis> +with detail +<emphasis role='bold'>NonlinearVirtual </emphasis> +is generated on each window between A and C exclusive (in order). + </para> + </listitem> + <listitem> + <para> +<emphasis role='bold'>FocusIn </emphasis> +with detail +<emphasis role='bold'>NonlinearVirtual </emphasis> +is generated on each window between C and B exclusive (in order). + </para> + </listitem> + <listitem> + <para> +<emphasis role='bold'>FocusIn </emphasis> +with detail +<emphasis role='bold'>Nonlinear </emphasis> +is generated on B. + </para> + </listitem> + <listitem> + <para> +If P is an inferior of B, +<emphasis role='bold'>FocusIn </emphasis> +with detail +<emphasis role='bold'>Pointer </emphasis> +is generated on each window below B down to and including P (in order). + </para> + </listitem> +</itemizedlist> + +<para> +When the focus moves from window A to window B on different screens +and the pointer is in window P: +</para> + + +<itemizedlist> + <listitem> + <para> +If P is an inferior of A, +<emphasis role='bold'>FocusOut </emphasis> +with detail +<emphasis role='bold'>Pointer </emphasis> +is generated on each window from P up to but not including A (in order). + </para> + </listitem> + <listitem> + <para> +<emphasis role='bold'>FocusOut </emphasis> +with detail +<emphasis role='bold'>Nonlinear </emphasis> +is generated on A. + </para> + </listitem> + <listitem> + <para> +If A is not a root window, +<emphasis role='bold'>FocusOut </emphasis> +with detail +<emphasis role='bold'>NonlinearVirtual </emphasis> +is generated on each window above A up to and including its root (in order). + </para> + </listitem> + <listitem> + <para> +If B is not a root window, +<emphasis role='bold'>FocusIn </emphasis> +with detail +<emphasis role='bold'>NonlinearVirtual </emphasis> +is generated on each window from B's root down to but not including B +(in order). + </para> + </listitem> + <listitem> + <para> +<emphasis role='bold'>FocusIn </emphasis> +with detail +<emphasis role='bold'>Nonlinear </emphasis> +is generated on B. + </para> + </listitem> + <listitem> + <para> +If P is an inferior of B, +<emphasis role='bold'>FocusIn </emphasis> +with detail +<emphasis role='bold'>Pointer </emphasis> +is generated on each window below B down to and including P (in order). + </para> + </listitem> +</itemizedlist> + +<para> +When the focus moves from window A to +<emphasis role='bold'>PointerRoot </emphasis> +(or +<emphasis role='bold'>None ) </emphasis> +and the pointer is in window P: +</para> + + +<itemizedlist> + <listitem> + <para> +If P is an inferior of A, +<emphasis role='bold'>FocusOut </emphasis> +with detail +<emphasis role='bold'>Pointer </emphasis> +is generated on each window from P up to but not including A (in order). + </para> + </listitem> + <listitem> + <para> +<emphasis role='bold'>FocusOut </emphasis> +with detail +<emphasis role='bold'>Nonlinear </emphasis> +is generated on A. + </para> + </listitem> + <listitem> + <para> +If A is not a root window, +<emphasis role='bold'>FocusOut </emphasis> +with detail +<emphasis role='bold'>NonlinearVirtual </emphasis> +is generated on each window above A up to and including its root (in order). + </para> + </listitem> + <listitem> + <para> +<emphasis role='bold'>FocusIn </emphasis> +with detail +<emphasis role='bold'>PointerRoot </emphasis> +(or +<emphasis role='bold'>None ) </emphasis> +is generated on all root windows. + </para> + </listitem> + <listitem> + <para> +If the new focus is +<emphasis role='bold'>PointerRoot , </emphasis> +<emphasis role='bold'>FocusIn </emphasis> +with detail +<emphasis role='bold'>Pointer </emphasis> +is generated on each window from P's root down to and including P (in order). + </para> + </listitem> +</itemizedlist> + +<para> +When the focus moves from +<emphasis role='bold'>PointerRoot </emphasis> +(or +<emphasis role='bold'>None ) </emphasis> +to window A and the pointer is in window P: +</para> + + +<itemizedlist> + <listitem> + <para> +If the old focus is +<emphasis role='bold'>PointerRoot</emphasis>, +<emphasis role='bold'>FocusOut</emphasis> +with detail +<emphasis role='bold'>Pointer </emphasis> +is generated on each window from P up to and including P's root (in order). + </para> + </listitem> + <listitem> + <para> +<emphasis role='bold'>FocusOut </emphasis> +with detail +<emphasis role='bold'>PointerRoot </emphasis> +(or +<emphasis role='bold'>None ) </emphasis> +is generated on all root windows. + </para> + </listitem> + <listitem> + <para> +If A is not a root window, +<emphasis role='bold'>FocusIn </emphasis> +with detail +<emphasis role='bold'>NonlinearVirtual </emphasis> +is generated on each window from A's root down to but not including A +(in order). + </para> + </listitem> + <listitem> + <para> +<emphasis role='bold'>FocusIn </emphasis> +with detail +<emphasis role='bold'>Nonlinear </emphasis> +is generated on A. + </para> + </listitem> + <listitem> + <para> +If P is an inferior of A, +<emphasis role='bold'>FocusIn </emphasis> +with detail +<emphasis role='bold'>Pointer </emphasis> +is generated on each window below A down to and including P (in order). + </para> + </listitem> +</itemizedlist> + +<para> +When the focus moves from +<emphasis role='bold'>PointerRoot </emphasis> +to +<emphasis role='bold'>None </emphasis> +(or vice versa) and the pointer is in window P: +</para> + +<itemizedlist> + <listitem> + <para> +If the old focus is +<emphasis role='bold'>PointerRoot</emphasis>, +<emphasis role='bold'>FocusOut </emphasis> +with detail +<emphasis role='bold'>Pointer </emphasis> +is generated on each window from P up to and including P's root (in order). + </para> + </listitem> + <listitem> + <para> +<emphasis role='bold'>FocusOut </emphasis> +with detail +<emphasis role='bold'>PointerRoot </emphasis> +(or +<emphasis role='bold'>None ) </emphasis> +is generated on all root windows. + </para> + </listitem> + <listitem> + <para> +<emphasis role='bold'>FocusIn </emphasis> +with detail +<emphasis role='bold'>None </emphasis> +(or +<emphasis role='bold'>PointerRoot ) </emphasis> +is generated on all root windows. + </para> + </listitem> + <listitem> + <para> +If the new focus is +<emphasis role='bold'>PointerRoot , </emphasis> +<emphasis role='bold'>FocusIn </emphasis> +with detail +<emphasis role='bold'>Pointer </emphasis> +is generated on each window from P's root down to and including P (in order). + </para> + </listitem> +</itemizedlist> + + +<para> +When a keyboard grab activates (but before generating any actual +<emphasis role='bold'>KeyPress </emphasis> +event that activates the grab), G is the grab-window for the grab, +and F is the current focus: +</para> + +<itemizedlist> + <listitem> + <para> +<emphasis role='bold'>FocusIn </emphasis> +and +<emphasis role='bold'>FocusOut </emphasis> +events with mode +<emphasis role='bold'>Grab </emphasis> +are generated (as for +<emphasis role='bold'>Normal </emphasis> +above) as if the focus were to change from F to G. + </para> + </listitem> +</itemizedlist> + +<para> +When a keyboard grab deactivates (but after generating any actual +<emphasis role='bold'>KeyRelease </emphasis> +event that deactivates the grab), G is the grab-window for the grab, +and F is the current focus: +</para> + +<itemizedlist> + <listitem> + <para> +<emphasis role='bold'>FocusIn </emphasis> +and +<emphasis role='bold'>FocusOut </emphasis> +events with mode +<emphasis role='bold'>Ungrab </emphasis> +are generated (as for +<emphasis role='bold'>Normal </emphasis> +above) as if the focus were to change from G to F. + </para> + </listitem> +</itemizedlist> + +<para> +<emphasis role='bold'>KeymapNotify</emphasis> +</para> + +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<emphasis remap='I'>keys</emphasis>: LISTofCARD8 + </entry> + </row> + </tbody> + </tgroup> +</informaltable> + +<para> +The value is a bit vector as described in +<emphasis role='bold'>QueryKeymap .</emphasis> +This event is reported to clients selecting +<emphasis role='bold'>KeymapState </emphasis> +on a window and is generated immediately after every +<emphasis role='bold'>EnterNotify </emphasis> +and +<emphasis role='bold'>FocusIn .</emphasis> +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>Expose</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>window</emphasis>: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>x</emphasis>, +<emphasis remap='I'>y</emphasis>, +<emphasis remap='I'>width</emphasis>, +<emphasis remap='I'>height</emphasis>: CARD16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>count</emphasis>: CARD16 +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<para> +This event is reported to clients selecting +<emphasis role='bold'>Exposure </emphasis> +on the window. +It is generated when no valid contents are available for regions of a window, +and either the regions are visible, the regions are viewable +and the server is (perhaps newly) maintaining backing store on the window, +or the window is not viewable but the server is (perhaps newly) honoring +window's backing-store attribute of +<emphasis role='bold'>Always </emphasis> +or +<emphasis role='bold'>WhenMapped .</emphasis> +The regions are decomposed into an arbitrary set of rectangles, +and an +<emphasis role='bold'>Expose </emphasis> +event is generated for each rectangle. +</para> +<para> +For a given action causing exposure events, +the set of events for a given window are guaranteed to be reported contiguously. +If count is zero, +then no more +<emphasis role='bold'>Expose </emphasis> +events for this window follow. +If count is nonzero, +then at least that many more +<emphasis role='bold'>Expose </emphasis> +events for this window follow (and possibly more). +</para> +<para> +The x and y coordinates are relative to window's origin +and specify the upper-left corner of a rectangle. +The width and height specify the extent of the rectangle. +</para> +<para> +<emphasis role='bold'>Expose </emphasis> +events are never generated on +<emphasis role='bold'>InputOnly </emphasis> +windows. +</para> +<para> +All +<emphasis role='bold'>Expose </emphasis> +events caused by a hierarchy change are generated after any +hierarchy event caused by that change (for example, +<emphasis role='bold'>UnmapNotify , </emphasis> +<emphasis role='bold'>MapNotify , </emphasis> +<emphasis role='bold'>ConfigureNotify ,</emphasis> +<emphasis role='bold'>GravityNotify , </emphasis> +<emphasis role='bold'>CirculateNotify ).</emphasis> +All +<emphasis role='bold'>Expose </emphasis> +events on a given window are generated after any +<emphasis role='bold'>VisibilityNotify </emphasis> +event on that window, +but it is not required that all +<emphasis role='bold'>Expose </emphasis> +events on all windows be generated after all +<emphasis role='bold'>Visibilitity </emphasis> +events on all windows. +The ordering of +<emphasis role='bold'>Expose </emphasis> +events with respect to +<emphasis role='bold'>FocusOut , </emphasis> +<emphasis role='bold'>EnterNotify , </emphasis> +and +<emphasis role='bold'>LeaveNotify </emphasis> +events is not constrained. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>GraphicsExposure</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>drawable</emphasis>: DRAWABLE + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>x</emphasis>, <emphasis remap='I'>y</emphasis>, <emphasis remap='I'>width</emphasis>, <emphasis remap='I'>height</emphasis>: CARD16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>count</emphasis>: CARD16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>major-opcode</emphasis>: CARD8 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>minor-opcode</emphasis>: CARD16 +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This event is reported to a client using a graphics context +with graphics-exposures selected +and is generated when a destination region could not be computed due +to an obscured or out-of-bounds source region. +All of the regions exposed by a given graphics request +are guaranteed to be reported contiguously. +If count is zero then no more +<emphasis role='bold'>GraphicsExposure </emphasis> +events for this window follow. +If count is nonzero, +then at least that many more +<emphasis role='bold'>GraphicsExposure </emphasis> +events for this window follow (and possibly more). +</para> +<para> +The x and y coordinates are relative to drawable's origin +and specify the upper-left corner of a rectangle. +The width and height specify the extent of the rectangle. +</para> +<para> +The major and minor opcodes identify the graphics request used. +For the core protocol, +major-opcode is always +<emphasis role='bold'>CopyArea </emphasis> +or +<emphasis role='bold'>CopyPlane ,</emphasis> +and minor-opcode is always zero. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>NoExposure</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>drawable</emphasis>: DRAWABLE + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>major-opcode</emphasis>: CARD8 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>minor-opcode:</emphasis> CARD16 +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This event is reported to a client using a graphics context +with graphics-exposures selected +and is generated when a graphics request +that might produce +<emphasis role='bold'>GraphicsExposure </emphasis> +events does not produce any. +The drawable specifies the destination used for the graphics request. +</para> +<para> +The major and minor opcodes identify the graphics request used. +For the core protocol, +major-opcode is always +<emphasis role='bold'>CopyArea </emphasis> +or +<emphasis role='bold'>CopyPlane ,</emphasis> +and the minor-opcode is always zero. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>VisibilityNotify</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>window</emphasis>: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>state</emphasis>: +<emphasis role='bold'>{ Unobscured , </emphasis> +<emphasis role='bold'>PartiallyObscured , </emphasis> +<emphasis role='bold'>FullyObscured }</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This event is reported to clients selecting +<emphasis role='bold'>VisibilityChange </emphasis> +on the window. +In the following, +the state of the window is calculated ignoring all of the window's subwindows. +When a window changes state from partially or fully obscured or +not viewable to viewable and completely unobscured, +an event with +<emphasis role='bold'>Unobscured </emphasis> +is generated. +When a window changes state from viewable and completely unobscured, +from viewable and completely obscured, +or from not viewable, to viewable and partially obscured, +an event with +<emphasis role='bold'>PartiallyObscured </emphasis> +is generated. +When a window changes state from viewable and completely unobscured, +from viewable and partially obscured, +or from not viewable to viewable and fully obscured, +an event with +<emphasis role='bold'>FullyObscured </emphasis> +is generated. +</para> +<para> +<emphasis role='bold'>VisibilityNotify </emphasis> +events are never generated on +<emphasis role='bold'>InputOnly </emphasis> +windows. +</para> +<para> +All +<emphasis role='bold'>VisibilityNotify </emphasis> +events caused by a hierarchy change are generated after any hierarchy event +caused by that change (for example, +<emphasis role='bold'>UnmapNotify , </emphasis> +<emphasis role='bold'>MapNotify , </emphasis> +<emphasis role='bold'>ConfigureNotify ,</emphasis> +<emphasis role='bold'>GravityNotify , </emphasis> +<emphasis role='bold'>CirculateNotify ).</emphasis> +Any +<emphasis role='bold'>VisibilityNotify </emphasis> +event on a given window is generated before any +<emphasis role='bold'>Expose </emphasis> +events on that window, +but it is not required that all +<emphasis role='bold'>VisibilityNotify </emphasis> +events on all windows be generated before all +<emphasis role='bold'>Expose </emphasis> +events on all windows. +The ordering of +<emphasis role='bold'>VisibilityNotify </emphasis> +events with respect to +<emphasis role='bold'>FocusOut , </emphasis> +<emphasis role='bold'>EnterNotify , </emphasis> +and +<emphasis role='bold'>LeaveNotify </emphasis> +events is not constrained. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>CreateNotify</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>parent</emphasis>, <emphasis remap='I'>window</emphasis>: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>x</emphasis>, <emphasis remap='I'>y</emphasis>: INT16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>width</emphasis>, <emphasis remap='I'>height</emphasis>, <emphasis remap='I'>border-width</emphasis>: CARD16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>override-redirect</emphasis>: BOOL +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This event is reported to clients selecting +<emphasis role='bold'>SubstructureNotify </emphasis> +on the parent +and is generated when the window is created. +The arguments are as in the +<emphasis role='bold'>CreateWindow </emphasis> +request. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>DestroyNotify</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>event</emphasis>, <emphasis remap='I'>window</emphasis>: WINDOW +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This event is reported to clients selecting +<emphasis role='bold'>StructureNotify </emphasis> +on the window and to clients selecting +<emphasis role='bold'>SubstructureNotify </emphasis> +on the parent. +It is generated when the window is destroyed. +The event is the window on which the event was generated, +and the window is the window that is destroyed. +</para> +<para> +The ordering of the +<emphasis role='bold'>DestroyNotify </emphasis> +events is such that for any given window, +<emphasis role='bold'>DestroyNotify </emphasis> +is generated on all inferiors of the window +before being generated on the window itself. +The ordering among siblings and across subhierarchies is not +otherwise constrained. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>UnmapNotify</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>event</emphasis>, <emphasis remap='I'>window</emphasis>: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>from-configure</emphasis>: BOOL +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This event is reported to clients selecting +<emphasis role='bold'>StructureNotify </emphasis> +on the window and to clients selecting +<emphasis role='bold'>SubstructureNotify </emphasis> +on the parent. +It is generated when the window changes state from mapped to unmapped. +The event is the window on which the event was generated, +and the window is the window that is unmapped. +The from-configure flag is +<emphasis role='bold'>True </emphasis> +if the event was generated as a result of the window's parent being resized +when the window itself had a win-gravity of +<emphasis role='bold'>Unmap .</emphasis> +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>MapNotify</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>event</emphasis>, <emphasis remap='I'>window</emphasis>: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>override-redirect</emphasis>: BOOL +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This event is reported to clients selecting +<emphasis role='bold'>StructureNotify </emphasis> +on the window and to clients selecting +<emphasis role='bold'>SubstructureNotify </emphasis> +on the parent. +It is generated when the window changes state from unmapped to mapped. +The event is the window on which the event was generated, +and the window is the window that is mapped. +The override-redirect flag is from the window's attribute. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>MapRequest</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>parent</emphasis>, <emphasis remap='I'>window</emphasis>: WINDOW +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This event is reported to the client selecting +<emphasis role='bold'>SubstructureRedirect </emphasis> +on the parent and is generated when a +<emphasis role='bold'>MapWindow </emphasis> +request is issued on an unmapped window with an override-redirect attribute of +<emphasis role='bold'>False .</emphasis> +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>ReparentNotify</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>event</emphasis>, <emphasis remap='I'>window</emphasis>, <emphasis remap='I'>parent</emphasis>: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>x</emphasis>, <emphasis remap='I'>y</emphasis>: INT16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>override-redirect</emphasis>: BOOL +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This event is reported to clients selecting +<emphasis role='bold'>SubstructureNotify </emphasis> +on either the old or the new parent and to clients selecting +<emphasis role='bold'>StructureNotify </emphasis> +on the window. +It is generated when the window is reparented. +The event is the window on which the event was generated. +The window is the window that has been rerooted. +The parent specifies the new parent. +The x and y coordinates are relative to the new parent's origin +and specify the position of the upper-left outer corner of the window. +The override-redirect flag is from the window's attribute. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>ConfigureNotify</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>event</emphasis>, <emphasis remap='I'>window</emphasis>: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>x</emphasis>, <emphasis remap='I'>y</emphasis>: INT16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>width</emphasis>, <emphasis remap='I'>height</emphasis>, <emphasis remap='I'>border-width</emphasis>: CARD16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>above-sibling</emphasis>: WINDOW or +<emphasis role='bold'>None</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>override-redirect</emphasis>: BOOL +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This event is reported to clients selecting +<emphasis role='bold'>StructureNotify </emphasis> +on the window and to clients selecting +<emphasis role='bold'>SubstructureNotify </emphasis> +on the parent. +It is generated when a +<emphasis role='bold'>ConfigureWindow </emphasis> +request actually changes the state of the window. +The event is the window on which the event was generated, +and the window is the window that is changed. +The x and y coordinates are relative to the new parent's origin +and specify the position of the upper-left outer corner of the window. +The width and height specify the inside size, not including the border. +If above-sibling is +<emphasis role='bold'>None , </emphasis> +then the window is on the bottom of the stack with respect to siblings. +Otherwise, the window is immediately on top of the specified sibling. +The override-redirect flag is from the window's attribute. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>GravityNotify</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>event</emphasis>, <emphasis remap='I'>window</emphasis>: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>x</emphasis>, <emphasis remap='I'>y</emphasis>: INT16 +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This event is reported to clients selecting +<emphasis role='bold'>SubstructureNotify </emphasis> +on the parent and to clients selecting +<emphasis role='bold'>StructureNotify </emphasis> +on the window. +It is generated when a window is moved because of a change in size +of the parent. +The event is the window on which the event was generated, +and the window is the window that is moved. +The x and y coordinates are relative to the new parent's origin +and specify the position of the upper-left outer corner of the window. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>ResizeRequest</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>window</emphasis>: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>width</emphasis>, <emphasis remap='I'>height</emphasis>: CARD16 +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This event is reported to the client selecting +<emphasis role='bold'>ResizeRedirect </emphasis> +on the window and is generated when a +<emphasis role='bold'>ConfigureWindow </emphasis> +request by some other client on the window attempts to change the size +of the window. +The width and height are the requested inside size, not including the border. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>ConfigureRequest</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>parent</emphasis>, <emphasis remap='I'>window</emphasis>: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>x</emphasis>, <emphasis remap='I'>y</emphasis>: INT16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>width</emphasis>, <emphasis remap='I'>height</emphasis>, <emphasis remap='I'>border-width</emphasis>: CARD16 + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>sibling</emphasis>: WINDOW or +<emphasis role='bold'>None</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>stack-mode</emphasis>: +<emphasis role='bold'>{ Above , </emphasis> +<emphasis role='bold'>Below , </emphasis> +<emphasis role='bold'>TopIf , </emphasis> +<emphasis role='bold'>BottomIf , </emphasis> +<emphasis role='bold'>Opposite }</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>value-mask</emphasis>: BITMASK +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This event is reported to the client selecting +<emphasis role='bold'>SubstructureRedirect </emphasis> +on the parent and is generated when a +<emphasis role='bold'>ConfigureWindow </emphasis> +request is issued on the window by some other client. +The value-mask indicates which components were specified in the request. +The value-mask and the corresponding values are reported as given +in the request. +The remaining values are filled in from the current geometry of the window, +except in the case of sibling and stack-mode, +which are reported as +<emphasis role='bold'>None </emphasis> +and +<emphasis role='bold'>Above </emphasis> +(respectively) if not given in the request. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>CirculateNotify</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>event</emphasis>, <emphasis remap='I'>window</emphasis>: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>place</emphasis>: +<emphasis role='bold'>{ Top , </emphasis> +<emphasis role='bold'>Bottom }</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This event is reported to clients selecting +<emphasis role='bold'>StructureNotify </emphasis> +on the window and to clients selecting +<emphasis role='bold'>SubstructureNotify </emphasis> +on the parent. +It is generated when the window is actually restacked from a +<emphasis role='bold'>CirculateWindow </emphasis> +request. +The event is the window on which the event was generated, +and the window is the window that is restacked. +If place is +<emphasis role='bold'>Top , </emphasis> +the window is now on top of all siblings. +Otherwise, it is below all siblings. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>CirculateRequest</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>parent</emphasis>, <emphasis remap='I'>window</emphasis>: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>place</emphasis>: +<emphasis role='bold'>{ Top , </emphasis> +<emphasis role='bold'>Bottom }</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This event is reported to the client selecting +<emphasis role='bold'>SubstructureRedirect </emphasis> +on the parent and is generated when a +<emphasis role='bold'>CirculateWindow </emphasis> +request is issued on the parent and a window actually needs to be restacked. +The window specifies the window to be restacked, +and the place specifies what the new position in the stacking order should be. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>PropertyNotify</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>window</emphasis>: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>atom</emphasis>: ATOM + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>state</emphasis>: +<emphasis role='bold'>{ NewValue , </emphasis> +<emphasis role='bold'>Deleted }</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>time</emphasis>: TIMESTAMP +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This event is reported to clients selecting +<emphasis role='bold'>PropertyChange </emphasis> +on the window and is generated with state +<emphasis role='bold'>NewValue </emphasis> +when a property of the window is changed using +<emphasis role='bold'>ChangeProperty </emphasis> +or +<emphasis role='bold'>RotateProperties ,</emphasis> +even when adding zero-length data using +<emphasis role='bold'>ChangeProperty </emphasis> +and when replacing all or part of a property with identical data using +<emphasis role='bold'>ChangeProperty </emphasis> +or +<emphasis role='bold'>RotateProperties .</emphasis> +It is generated with state +<emphasis role='bold'>Deleted </emphasis> +when a property of the +window is deleted using request +<emphasis role='bold'>DeleteProperty </emphasis> +or +<emphasis role='bold'>GetProperty .</emphasis> +The timestamp indicates the server time when the property was changed. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>SelectionClear</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>owner</emphasis>: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>selection</emphasis>: ATOM + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>time</emphasis>: TIMESTAMP +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This event is reported to the current owner of a selection +and is generated when a new owner is being defined by means of +<emphasis role='bold'>SetSelectionOwner .</emphasis> +The timestamp is the last-change time recorded for the selection. +The owner argument is the window that was specified by the current owner in its +<emphasis role='bold'>SetSelectionOwner </emphasis> +request. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>SelectionRequest</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>owner</emphasis>: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>selection</emphasis>: ATOM + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>target</emphasis>: ATOM + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>property</emphasis>: ATOM or +<emphasis role='bold'>None</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>requestor</emphasis>: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>time</emphasis>: TIMESTAMP or +<emphasis role='bold'>CurrentTime</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This event is reported to the owner of a selection +and is generated when a client issues a +<emphasis role='bold'>ConvertSelection </emphasis> +request. +The owner argument is the window that was specified in the +<emphasis role='bold'>SetSelectionOwner </emphasis> +request. +The remaining arguments are as in the +<emphasis role='bold'>ConvertSelection </emphasis> +request. +</para> +<para> +The owner should convert the selection based on the specified target type +and send a +<emphasis role='bold'>SelectionNotify </emphasis> +back to the requestor. +A complete specification for using selections is given in the X.Org +standard <emphasis remap='I'>Inter-Client Communication Conventions Manual</emphasis>. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>SelectionNotify</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>requestor</emphasis>: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>selection</emphasis>, <emphasis remap='I'>target</emphasis>: ATOM + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>property</emphasis>: ATOM or +<emphasis role='bold'>None</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>time</emphasis>: TIMESTAMP or +<emphasis role='bold'>CurrentTime</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This event is generated by the server in response to a +<emphasis role='bold'>ConvertSelection </emphasis> +request when there is no owner for the selection. +When there is an owner, +it should be generated by the owner using +<emphasis role='bold'>SendEvent .</emphasis> +The owner of a selection should send this event to a requestor either +when a selection has been converted and stored as a property +or when a selection conversion could not be performed (indicated with property +<emphasis role='bold'>None ).</emphasis> +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>ColormapNotify</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>window</emphasis>: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>colormap</emphasis>: COLORMAP or +<emphasis role='bold'>None</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>new</emphasis>: BOOL + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>state</emphasis>: +<emphasis role='bold'>{ Installed , </emphasis> +<emphasis role='bold'>Uninstalled }</emphasis> +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This event is reported to clients selecting +<emphasis role='bold'>ColormapChange </emphasis> +on the window. +It is generated with value +<emphasis role='bold'>True </emphasis> +for new when the colormap attribute of the window is changed +and is generated with value +<emphasis role='bold'>False </emphasis> +for new when the colormap of a window is installed or uninstalled. +In either case, +the state indicates whether the colormap is currently installed. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>MappingNotify</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>request</emphasis>: +<emphasis role='bold'>{ Modifier , </emphasis> +<emphasis role='bold'>Keyboard , </emphasis> +<emphasis role='bold'>Pointer }</emphasis> + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>first-keycode</emphasis>, <emphasis remap='I'>count</emphasis>: CARD8 +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This event is sent to all clients. +There is no mechanism to express disinterest in this event. +The detail indicates the kind of change that occurred: +<emphasis role='bold'>Modifiers </emphasis> +for a successful +<emphasis role='bold'>SetModifierMapping , </emphasis> +<emphasis role='bold'>Keyboard </emphasis> +for a successful +<emphasis role='bold'>ChangeKeyboardMapping , </emphasis> +and +<emphasis role='bold'>Pointer </emphasis> +for a successful +<emphasis role='bold'>SetPointerMapping .</emphasis> +If the detail is +<emphasis role='bold'>Keyboard , </emphasis> +then first-keycode and count indicate the range of altered keycodes. +<!-- .sp --> +</para> +<para> +<emphasis role='bold'>ClientMessage</emphasis> +</para> +<informaltable frame='none'> + <tgroup cols='1' align='left'> + <colspec colname='c1' colsep='0'/> + <tbody> + <row rowsep='0'> + <entry> +<!-- .in +.2i --> +<emphasis remap='I'>window</emphasis>: WINDOW + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>type</emphasis>: ATOM + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>format</emphasis>: {8, 16, 32} + </entry> + </row> + <row rowsep='0'> + <entry> +<emphasis remap='I'>data</emphasis>: LISTofINT8 or LISTofINT16 or LISTofINT32 +<!-- .in -.2i --> +<!-- .eM --> + </entry> + </row> + </tbody> + </tgroup> +</informaltable> +<!-- .eM --> +<para> +This event is only generated by clients using +<emphasis role='bold'>SendEvent .</emphasis> +The type specifies how the data is to be interpreted by the receiving client; +the server places no interpretation on the type or the data. +The format specifies whether the data should be viewed as a list of 8-bit, +16-bit, or 32-bit quantities, so that the server can correctly +byte-swap, as necessary. +The data always consists of either 20 8-bit values or 10 16-bit values +or 5 32-bit values, although particular message types might not make use +of all of these values. +</para> +</sect1> +<sect1 id="flow_control_and_concurrency"> +<title>Flow Control and Concurrency</title> +<!-- .XS --> +<!-- \*(SN Flow Control and Concurrency --> +<!-- .XE --> +<para> +Whenever the server is writing to a given connection, +it is permissible for the server to stop reading from that connection +(but if the writing would block, it must continue to service other connections). +The server is not required to buffer more than a single request per connection +at one time. +For a given connection to the server, +a client can block while reading from the connection +but should undertake to read (events and errors) when writing would block. +Failure on the part of a client to obey this rule could result +in a deadlocked connection, +although deadlock is probably unlikely unless either +the transport layer has very little buffering or the client attempts to +send large numbers of requests without ever reading replies or checking for +errors and events. +</para> +<para> +Whether or not a server is implemented with internal concurrency, +the overall effect must be as if individual requests are executed to completion +in some serial order, +and requests from a given connection must be executed in delivery order +(that is, the total execution order is a shuffle of the individual streams). +The execution of a request includes validating all arguments, +collecting all data for any reply, +and generating and queueing all required events. +However, +it does not include the actual transmission of the reply and the events. +In addition, the effect of any other cause that can generate multiple events +(for example, activation of a grab or pointer motion) must effectively generate +and queue all required events indivisibly with respect to all other causes +and requests. +For a request from a given client, +any events destined for that client that are caused by executing the request +must be sent to the client before any reply or error is sent. +</para> +</sect1> +</chapter> diff --git a/specs/x11protocol.xml b/specs/x11protocol.xml new file mode 100644 index 0000000..3632838 --- /dev/null +++ b/specs/x11protocol.xml @@ -0,0 +1,73 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" + "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"> + + +<book id="x11protocol"> + +<bookinfo> + <title>X Window System Protocol</title> + <subtitle>X Consortium Standard</subtitle> + <releaseinfo>Version 1.0</releaseinfo> + <authorgroup> + <author> + <firstname>Robert</firstname> + <othername>W.</othername> + <surname>Scheifler</surname> + <affiliation><orgname>X Consortium, Inc.</orgname></affiliation> + </author> + <othercredit> + <firstname>Hideki</firstname><surname>Hiura</surname> + <affiliation><orgname>SunSoft, Inc.</orgname></affiliation> + </othercredit> + </authorgroup> + <corpname>X Consortium Standard</corpname> + <copyright> + <year>1986,1987,1988,1994,2004</year> + <holder>The Open Group</holder> + </copyright> + <affiliation><orgname>X Consortium</orgname></affiliation> + <productnumber>X Version 11, Release 6.8</productnumber> + +<legalnotice> + +<para> +X Window System is a trademark of The Open Group. +</para> +<para> +Copyright 1986, 1987, 1988, 1994, 2004 The Open Group +</para> +<para> +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: +</para> +<para> +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. +</para> +<para> +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 +OPEN GROUP 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. +</para> +<para> +Except as contained in this notice, the name of the Open Group 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 Open Group. +</para> +</legalnotice> +</bookinfo> + +<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="sect1-9.xml"/> +<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="keysyms.xml"/> +<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="encoding.xml"/> +<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="glossary.xml"/> +</book> + |