|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T X
Length: 61281 (0xef61)
Types: TextFile
Names: »X.doc«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki
└─⟦526ad3590⟧ »EUUGD11/gnu-31mar87/X.V10.R4.tar.Z«
└─⟦2109abc41⟧
└─⟦this⟧ »./X.V10R4/X/X.doc«
Copyright Massachusetts Institute of Technology 1985
This note describes protocol version ten of window system X.
Changes from release 3 of X:
X_StippleFill
X_QueryWindow has added input mask returned.
The X protocol can be built on top of any reliable byte stream. A simple block
protocol is used on top of the stream layer. Most requests are 24 byte blocks;
some carry additional data. Requests do not have a corresponding reply unless
data is actually expected in return. This means that error responses in
general will not be caught at the failing request, but rather at some later
request which expects a reply.
On a given machine, displays are numbered from zero.
For TCP connections, display N is associated with port 5800+N ('X' = 0x58) and
with port 5900+N. That is, the X server listens and accepts new connections on
these ports. The X server expects connections made on the 58xx port to come
from hosts transmitting data in little Indian (VAX order), and expects
connections made on the 59xx port to come from hosts transmitting data in big
Indian (68000 order). For connections with opposite-order machines, the server
will byte swap all 16-bit and 32-bit quantities in all requests and replies,
with the exception of host addresses, which should be transmitted in standard
network order. In this way, clients need never byte-swap, and byte-swapping
need not occur between hosts with the same byte ordering.
For Unix-domain connections, display number ? associated with path /dev/X?.
For DECnet connections, display ? is associated with object name "X?".
The coordinate system has X horizontal and Y vertical, and is in terms of
pixels. The point (0, 0) is the upper left. Coordinates within a window are
always specified in terms of the inside of a window (not including the
borders). A pixel is an N-bit value, where N is the number of bit planes
provided by the particular display; a pixel value indexes a color map to derive
an actual color to be displayed.
Some C type definitions used below:
typedef long Window;
typedef long Font;
typedef long Bitmap;
typedef long Pixmap;
typedef long Cursor;
typedef long Locator;
For the convenience of certain programming languages, Window, Font, Bitmap,
Pixmap, and Cursor values are guaranteed to have the top three bits all zero.
A Bitmap is a single plane (bit) rectangle. A Pixmap is an N-plane (pixel)
rectangle, where N is the number of planes provided by the particular display.
In this protocol, N ranges from 1 to 16. Cursors are used as mouse pointers; a
cursor is an arbitrary two-color shape with an arbitrary "point". A Locator is
an absolute point on the display, represented as <x,,y> with the X-coordinate
in the high 16 bits and the Y-coordinate in the low 16 bits.
A Bitmap is represented by ((width + 15) / 16) * height * 2 bytes of data. The
bits are in scanline order, with each scanline padded if necessary to a
multiple of 16 bits. The pad bits are of arbitrary value. Within a scanline,
the bits are represented left to right, stored in 16-bit words, but the bits
are reversed within a given 16-bit word: the leftmost bit of the scanline is
the least significant bit of the word.
A Pixmap can be represented in either "XY-format" or "Z-format". In XY-format,
each plane is represented as a Bitmap, and the planes appear from most to least
significant bit order. The total number of bytes is thus
((width + 15) / 16) * height * 2 * depth. In Z-format, the pixels are in
scanline order, left to right within a scanline. For displays with 2 to 8
planes, each pixel is represented by a single byte; the total number of bytes
is thus width * height. For displays with 9 to 16 planes, each pixel is
represented by a 16-bit word; the total number of bytes is thus
2 * width * height. Z-format cannot be used on monochrome displays.
Pixel values 0 and 1 are always defined on every display. They are primarily
intended for use in monochrome applications. On monochrome displays, pixel
value 0 is black and pixel value 1 is white. On color displays, the colors may
be redefined by the user.
Display function codes used in all output requests, and their affect on the
destination as a function of the source and the destination (NOT binds
tightest) are:
GXclear 0x0 0
GXand 0x1 src AND dst
GXandReverse 0x2 src AND NOT dst
GXcopy 0x3 src
GXandInverted 0x4 NOT src AND dst
GXnoop 0x5 dst
GXxor 0x6 src XOR dst
GXor 0x7 src OR dst
GXnor 0x8 NOT src AND NOT dst
GXequiv 0x9 NOT src XOR dst
GXinvert 0xa NOT dst
GXorReverse 0xb src OR NOT dst
GXcopyInverted 0xc NOT src
GXorInverted 0xd NOT src OR dst
GXnand 0xe NOT src OR NOT dst
GXset 0xf 1
Given a source and destination pixel, a display function is computed bitwise on
corresponding bits of the pixels. That is, a boolean operation is performed on
each bit plane of the display. A "plane mask" can be used to restrict output
operations to a subset of planes; the mask contains a one bit for each pixel
bit (plane) that should be affected.
The C definition of a request looks like:
typedef struct _XReq {
unsigned char code;
unsigned char func;
unsigned short mask;
Window windowId;
union {
long l[4];
short s[8];
unsigned short u[8];
char b[16];
} param;
} XReq;
Note: requests carrying more than 128K bytes of additional data will cause the
server to close the client's connection.
Input events (keyboard, mouse button, mouse motion, window change) are
generated asynchronously by X and are reported on the same network connection.
Clients must therefore expect any number of input events between any two
replies to requests. Data coming from X is bundled into 24 byte blocks, with a
code indicating the type of data. The C definition of this structure is:
typedef struct _XRep {
long code;
union {
long l[5];
short s[10];
unsigned short u[10];
char b[20];
} param;
} XRep;
The possible XRep codes are:
X_Reply 0 Normal reply
X_Error -1 Error
else Asynchronous input event
The contents of event structures are discussed later. The contents of X_Reply
structures vary with each request, and are documented for each such request.
The contents of an X_Error structure is as follows:
code X_Error
param.l[0] number of failing request
param.b[4] error code
param.b[5] original request code
param.b[6] original request func
param.l[2] original request windowId
Requests are counted per network connection, starting from one. The possible
error codes are:
BadRequest 1 bad request code
BadValue 2 int parameter out of range
BadWindow 3 parameter not a Window
BadPixmap 4 parameter not a Pixmap
BadBitmap 5 parameter not a Bitmap
BadCursor 6 parameter not a Cursor
BadFont 7 parameter not a Font
BadMatch 8 parameter mismatch
BadTile 9 Pixmap shape invalid for tiling
BadGrab 10 mouse/button already grabbed
BadAccess 11 access control violation
BadAlloc 12 insufficient resources
BadColor 13 no such color
Not all displays support all variations of all output requests. Output
requests may be transformed arbitrarily (including being ignored), without
errors being generated.
Some displays have very limited memory for storage of off-screen resources such
as bitmaps, pixmaps, and fonts.
All requests and replies are padded as necessary to be a multiple of four bytes
long. The pad bytes are of arbitrary value.
The requests are:
X_CreateWindow
code 1
func border width
windowId parent Window
param.s[0] inside height (not including borders) (> 0)
param.s[1] inside width (not including borders) (> 0)
param.s[2] outer left coord (start of border)
param.s[3] outer top coord (start of border)
param.l[2] border tile Pixmap or 0
param.l[3] background tile Pixmap or 0
Creates an unmapped (not displayed) opaque window. Coordinates are
relative to the inside of the parent. A border pixmap need not be
given if the border width is zero. If no background pixmap is given,
the parent's background pixmap is used. The tilemode of the new window
is TileModeAbsolute. The clipmode of the new window is
ClipModeClipped. The window does not have a defined cursor.
The parent window must be an opaque window.
A window will always be wholly contained within its parent, i.e. any
parts of the window that extend outside the parent window will not be
displayed.
The background and border pixmaps may be freed immediately if no
further explicit references to them are to be made.
The reply:
param.l[0] Window
Errors: BadWindow, BadValue, BadPixmap, BadTile, BadMatch
X_CreateTransparency
code 2
windowId parent Window
param.s[0] inside height (> 0)
param.s[1] inside width (> 0)
param.s[2] outer left coord
param.s[3] outer top coord
Creates an unmapped (not displayed) transparent window. Coordinates
are relative to the inside of the parent. The tilemode of the new
window is TileModeRelative. The clipmode of the new window is
ClipModeClipped. The window does not have a defined cursor.
The reply:
param.l[0] Window
Errors: BadWindow, BadValue
X_DestroyWindow
code 3
windowId Window
Unmaps and destroys the window and all of its subwindows. The windows
should never again be referenced.
Windows are automatically destroyed when the creating process closes
its network connection.
If the window has a mapped icon window, that icon window is unmapped
and receives an UnmapWindow event. If the window is a mapped icon
window, its corresponding "regular" window is mapped.
Generates exposure events on formerly obscured opaque windows.
Errors: BadWindow
X_DestroySubwindows
code 4
windowId Window
Destroy all subwindows of this window. The windows should never again
be referenced.
Generates exposure events on formerly obscured opaque windows.
Errors: BadWindow
X_MapWindow
code 5
windowId Window
Maps and raises the window and displays the window and all of its
subwindows which have had map requests. The previous contents of all
opaque windows are lost; mapping transparent windows does not affect
the screen.
Mapping a window when one of its ancestors is unmapped does not cause
the window to be displayed.
Has no effect if the window is already mapped.
Generates an ExposeWindow event on each newly displayed opaque window.
Errors: BadWindow
X_MapSubwindows
code 6
windowId Window
Maps all subwindows of the given window in an unspecified order.
Generates an ExposeWindow event on each newly displayed opaque window.
Errors: BadWindow
X_UnmapWindow
code 7
windowId Window
Unmaps the window and all of its subwindows. Unmapping transparent
windows does not affect the screen.
Generates an UnMapWindow event on the window if it is mapped; generates
exposure events on formerly obscured opaque windows.
Errors: BadWindow
X_UnmapSubwindows
code 8
windowId Window
Unmaps all subwindows of the given window.
Generates an UnMapWindow event on each mapped subwindow; generates
exposure events on formerly obscured opaque windows.
X_UnmapTransparent
code 9
windowId Window
Unmaps the window and all of its subwindows, but does not affect the
screen, even if the window is opaque, and does not generate any
exposure (or unmap) events.
Errors: BadWindow
X_RaiseWindow
code 10
windowId Window
Raise this window above all sibling windows, so that no sibling
obscures it.
Raising a transparent window does not affect the screen. Transparent
windows never obscure other windows for the purposes of output, but do
obscure for the purposes of cursor and input control.
Window hierarchies never interleave. If window A is obscured by window
B, then window A will only obscure ancestors of B that are also
ancestors of A.
Generates exposure events on formerly obscured opaque windows.
Errors: BadWindow
X_LowerWindow
code 11
windowId Window
Lower this window below all sibling windows, so that it doesn't obscure
any siblings.
Raising a transparent window does not affect the screen.
Generates exposure events on formerly obscured opaque windows.
Errors: BadWindow
X_CircWindowUp
code 12
windowId Window
Raise the lowest mapped child of this window that is (partially)
obscured by another child. Repeated executions lead to round robin
raising.
Generates exposure events on formerly obscured opaque windows.
Errors: BadWindow
X_MoveWindow
code 13
func 0 (for future expansion)
windowId Window
param.s[0] outer left coord (start of border)
param.s[1] outer top coord (start of border)
Moves and raises the window, without changing its size. Coordinates
are relative to the inside of the parent.
The contents of an opaque window are lost if its tilemode is relative
or if the window is obscured by non-children. Moving a transparent
window does not affect the screen.
Generates an ExposeWindow event on the (opaque) window if its contents
are lost; generates exposure events on formerly obscured opaque
windows.
Errors: BadWindow
X_ChangeWindow
code 14
func 0 (for future expansion)
windowId Window
param.s[0] inside height (not including borders) (> 0)
param.s[1] inside width (not including borders) (> 0)
Changes the size of the window and raises it, without changing its
upper left hand coordinate. The contents of an opaque window are lost;
changing a transparent window does not affect the screen.
Generates an ExposeWindow event on the (opaque) window; generates
exposure events on formerly obscured opaque windows.
Errors: BadWindow, BadValue
X_ConfigureWindow
code 15
func 0 (for future expansion)
windowId Window
param.s[0] inside height (not including borders) (> 0)
param.s[1] inside width (not including borders) (> 0)
param.s[2] outer left coord (start of border)
param.s[3] outer top coord (start of border)
Changes the size and placement of the window and raises it. The
contents of an opaque window are lost; configuring a transparent window
does not affect the screen.
Generates an ExposeWindow event on the (opaque) window; generates
exposure events on formerly obscured opaque windows.
Errors: BadWindow, BadValue
X_ChangeBackground
code 16
windowId Window
param.l[0] background tile Pixmap or 0
Change the background tile of a window. If no background pixmap is
specified, the background pixmap of the window's parent is used (on
the root window the default background is restored).
Does not change the current contents of the window.
Can only be performed on an opaque window.
The pixmap can be freed immediately if no further explicit references
to it are to be made.
Errors: BadWindow, BadMatch, BadPixmap, BadTile
X_ChangeBorder
code 17
windowId Window
param.l[0] border tile Pixmap
Change the border tile of a window and repaint the border.
Can only be performed on an opaque window that has a border.
The pixmap can be freed immediately if no further explicit references
to it are to be made.
Errors: BadWindow, BadMatch, BadPixmap, BadTile
X_TileMode
code 18
func 0: TileModeAbsolute
1: TileModeRelative
windowId Window
Sets the tilemode of the window. With TileModeAbsolute (the normal
case for opaque windows), tiles are laid out with the upper left corner
of the window as an effective origin. With TileModeRelative (the
normal case for transparent windows), tiles are laid out with the upper
left corner of the closest parent window with an absolute tilemode as
an effective origin. The tilemode affects painting of the background
for exposures and for X_Clear, as well as the X_TileFill and
X_DrawFilled requests.
Does not change the current contents of the window.
Errors: BadWindow, BadValue
X_ClipMode
code 19
func 0: ClipModeClipped
1: ClipModeDrawThru
windowId Window
Sets the clipmode of the window. With ClipModeClipped (the normal
case), future output to the window will be obscured by subwindows.
With ClipModeDrawThru, future output to the window will ignore
subwindows and draw into them. In draw-thru mode, the most useful
display functions are GXxor and GXinvert, so that displaying again will
erase what was displayed. Draw-thru mode is useful for drawing window
outlines when moving or resizing windows.
The root window starts with ClipModeDrawThru.
Errors: BadWindow, BadValue
X_QueryWindow
code 20
windowId Window
Get facts about the window.
The reply:
param.s[0] inside height (not including borders)
param.s[1] inside width (not including borders)
param.s[2] outer left (start of border)
param.s[3] outer right (start of border)
param.s[4] border width
param.b[10] 0: IsUnmapped
1: IsMapped
2: IsInvisible (mapped but some ancestor is unmapped)
param.b[11] 0: IsTransparent
1: IsOpaque
2: IsIcon
param.l[3] icon Window or opaque Window or 0
param.l[4] event mask (see X_SelectInput)
If windowId is a transparent window, param.b[11] will be IsTransparent
and param.l[3] will be 0. If windowId is a normal opaque window,
param.b[11] will be IsOpaque and param.l[3] will contain the window's
icon window, if one has been defined with an X_SetIconWindow request.
If windowId is an icon window, param.b[11] will be IsIcon and
param.l[3] will contain the icon's corresponding "regular" window.
Errors: BadWindow
X_StoreName
code 21
windowId Window
param.s[0] length of name in characters (>= 0)
Assigns a name to a window. This request must be followed by the
characters of the window name, followed by 0 t0 3 pad bytes to make
the length a multiple of four.
The name is typically used by a window manager (to create named icons,
for example).
Errors: BadWindow, BadValue
X_FetchName
code 22
windowId Window
Returns the name of a window.
The reply:
param.s[0] number of characters
The reply is followed by the specified number of characters of name,
followed by 0 to 3 pad bytes to make the length a multiple of four.
Errors: BadWindow
X_SetIconWindow
code 23
windowId Window
param.l[0] icon Window or 0
Sets/clears the icon window for a window. The icon window must be a
sibling of the specified window, both windows must be opaque, and
neither can already be an icon window.
An icon window should be used when the client wants to control the
contents of the icon form. A window manager should create an icon
window automatically if the client doesn't provide one.
Errors: BadWindow, BadMatch
X_SetResizeHint
code 24
windowId Window
param.s[0] base height (>= 0)
param.s[1] height increment (> 0)
param.s[2] base width (>= 0)
param.s[3] width increment (> 0)
Defines the shape of a window. The inside height of the window should
be the base height plus some multiple of the height increment, and the
inside width of the window should be the base width plus some multiple
of the width increment. These parameters are hints, in that
X_ChangeWindow and X_ConfigureWindow do not check conformance.
A newly created window has a base height and width of zero, and height
and width increments of one.
The base height and width must be non-negative, and the height and
width increments must be positive.
The resize hints are typically used by a window manager.
Errors: BadWindow, BadValue
X_GetResizeHint
code 25
windowId Window
Returns the resize parameters.
The reply:
param.s[0] minimum height
param.s[1] height increment
param.s[2] minimum width
param.s[3] width increment
Errors: BadWindow
X_DefineCursor
code 26
windowId Window
param.l[0] Cursor or 0
If a cursor is specified, it will be used when the mouse is in the
window. If no cursor is specified, the parent's cursor will be used
when the mouse is in the window.
On the root window, with no cursor specified, the default cursor is
restored.
Errors: BadWindow, BadCursor
X_SelectInput
code 27
windowId Window
param.l[0] event mask
Defines which input events the window is interested in. If a window is
not interested in an event, it usually will propagate up to the closest
ancestor that is interested. The bits of the mask are:
KeyPressed 0x0001 keyboard key pressed
KeyReleased 0x0002 keyboard key released
ButtonPressed 0x0004 mouse button pressed
ButtonReleased 0x0008 mouse button released
EnterWindow 0x0010 mouse entering window
LeaveWindow 0x0020 mouse leaving window
MouseMoved 0x0040 mouse moves within window
ExposeWindow 0x0080 full window changed and/or exposed
ExposeRegion 0x0100 region of window exposed
ExposeCopy 0x0200 region exposed by X_CopyArea
RightDownMotion 0x0400 mouse moves with right button down
MiddleDownMotion 0x0800 mouse moves with middle button down
LeftDownMotion 0x1000 mouse moves with left button down
UnmapWindow 0x2000 window is unmapped
FocusChange 0x4000 keyboard focus changed
Selecting ExposeRegion also selects ExposeWindow.
Details of each kind of event are given later.
Overrides all previous selections on the same window by all clients.
If a window has both ButtonPressed and ButtonReleased selected, then a
ButtonPressed event in that window will automatically "grab" the mouse
until all buttons are released, with events sent to windows as
described for X_GrabMouse.
Input selection on the root window should be reserved for a window
manager.
Errors: BadWindow
X_GrabMouse
code 28
windowId Window
param.l[0] Cursor
param.l[1] event mask
All future mouse events will only go to windows for which the grabbing
client has issued X_SelectInput commands. (The event mask temporarily
overrides any X_SelectInput on the window.) If the client has not
issued an X_SelectInput command on the window where the event would
normally be sent, then the event will be sent to the specified window,
provided the event is specified in the mask and is not EnterWindow or
LeaveWindow. Only the bits ButtonPressed, ButtonReleased, EnterWindow,
LeaveWindow, MouseMoved, LeftDownMotion, MiddleDownMotion, and
RightDownMotion are useful in the mask. The specified cursor will be
used regardless of what window the mouse is in.
This request will fail if someone else has already grabbed the mouse
and has not released it; the request overrides any other grab in
progress for this client.
If the request is successful there is a reply, but it contains no
information.
Errors: BadWindow, BadCursor, BadGrab
X_GrabButton
code 29
mask button mask
windowId Window
param.l[0] Cursor
param.l[1] event mask
The button mask must have exactly one of LeftMask, MiddleMask, or
RightMask set, and may have some combination of ControlMask, MetaMask,
ShiftMask, and ShiftLockMask set. If the specified button is pressed
when exactly the specified keys are down, this and all future mouse
events are grabbed until all buttons are released, with events sent to
windows as described for X_GrabMouse. During the grab, the specified
cursor will be used regardless of what window the mouse is in.
This request will fail if some other client has already grabbed the
same button/key combination and has not released it.
If the request is successful there is a reply, but it contains no
information.
Errors: BadWindow, BadCursor, BadValue, BadGrab
X_QueryMouse
code 30
windowId Window
Returns the current mouse coordinates and the state of various keys
and buttons.
The reply:
param.l[0] Window
param.s[2] x coord
param.s[3] y coord
param.s[4] key and button state
The coordinates of the mouse relative to window are given, even if the
mouse is outside the window. If the mouse is also in a mapped child
window, the child is returned, otherwise the return window is 0.
The high bits of the state parameter are the same as for the event
detail in keyboard and mouse events, and are defined further below
in the discussion of input events.
Errors: BadWindow
X_InterpretLocator
code 31
windowId Window
param.l[0] Locator
Interprets the coordinate with respect to the window.
The reply:
param.l[0] Window
param.s[2] x coord
param.s[3] y coord
The coordinates of the locator relative to the window are given, even
if the locator is outside the window. If the locator is also in a
mapped child window, the child is returned, otherwise the return window
is 0.
Errors: BadWindow
X_WarpMouse
code 32
windowId destination Window
param.s[0] destination x coord
param.s[1] destination y coord
param.l[1] source Window
param.s[4] source height
param.s[5] source width
param.s[6] source left coord
param.s[7] source top coord
Move the mouse to the destination position relative to the origin of
the destination window, but only if the mouse is currently in a visible
portion of the specified region of the source window.
If the source height is zero, the current height of the source window
minus the source top coord is used. If the source width is zero, the
current width of the source window minus the source left coord is used.
Errors: BadWindow
X_FocusKeyboard
code 33
func 0 (for future expansion)
windowId Window
The specified window becomes the keyboard "focus" window. If the
window that would normally receive a KeyPressed or KeyReleased event is
not (a descendant of) the focus window, then the event will be directed
at the focus window instead.
Generates a FocusChange event with detail LeaveWindow on the current
focus window, and a FocusChange event with detail EnterWindow on the
new focus window.
The default focus window is the root window. If the focus window is
destroyed, its parent window becomes the focus window.
Errors: BadWindow
X_CircWindowDown
code 34
windowId Window
Lower the highest mapped child of this window that (partially) obscures
another child. Repeated executions lead to round robin lowering.
Generates exposure events on formerly obscured opaque windows.
Errors: BadWindow
X_QueryTree
code 35
windowId Window
Returns the parent and child windows of the specified window.
The reply:
param.l[0] parent Window (or 0 if none)
param.l[1] number of child windows
The reply is followed by the specified number of child Window ids, each
Window id being four bytes long. The children are listed in current
stacking order, from bottom-most (first) to top-most (last).
Errors: BadWindow
X_Clear
code 40
windowId Window
Clear the window and repaint it with the background. The tiling origin
is controlled by the tilemode.
A transparent window inherits its parent's background for this
operation.
Errors: BadWindow
X_PixFill
code 41
func display function (0-15)
mask plane mask
windowId Window
param.s[0] destination height
param.s[1] destination width
param.s[2] destination left coord
param.s[3] destination top coord
param.u[4] source pixel
param.l[3] mask Bitmap or 0
Performs a function in a region of the window. The source pixel
defines the value of the source bit for each plane, and the plane mask
defines which destination bit planes are affected. The display
function is computed on each bit plane. If no mask bitmap is
specified, the entire destination is affected. If a mask bitmap is
specified, it defines the shape of the source and which pixels of the
destination will be affected.
Errors: BadWindow, BadValue, BadBitmap
X_TileFill
code 42
func display function (0-15)
mask plane mask
windowId Window
param.s[0] destination height
param.s[1] destination width
param.s[2] destination left coord
param.s[3] destination top coord
param.l[2] tile Pixmap
param.l[3] mask Bitmap or 0
Performs a function in a region of the window using a repeating pattern
defined by the tile pixmap. The tiling origin is controlled by the
window's tilemode. The plane mask defines which destination bit planes
are affected. The display function is computed on each bit plane. If
no mask bitmap is specified, the entire destination is affected. If a
mask bitmap is specified, it defines which pixels of the destination
will be affected, and must be the same height and width as the
destination.
Errors: BadWindow, BadValue, BadPixmap, BadTile, BadBitmap, BadMatch
X_PixmapPut
code 43
func display function (0-15)
mask plane mask
windowId Window
param.s[0] source height
param.s[1] source width
param.s[2] source left coord
param.s[3] source top coord
param.l[2] source Pixmap
param.s[6] destination left coord
param.s[7] destination top coord
Performs a function in a region of the window using a region of a
pixmap. The source height, width, and coordinates specify the region
of the source pixmap to be used. The plane mask defines which
destination bit planes are affected. The display function is computed
on each bit plane.
Errors: BadWindow, BadValue, BadPixmap
X_PixmapBitsPut
code 44
func display function (0-15)
mask plane mask
windowId Window
param.s[0] source height (> 0)
param.s[1] source width (> 0)
param.s[2] destination left coord
param.s[3] destination top coord
param.s[4] 0: XYFormat
1: ZFormat
param.l[3] mask Bitmap or 0
Performs a function in a region of the window using a pixmap. The
plane mask defines which destination bit planes are affected. The
display function is computed on each bit plane. If a mask bitmap is
specified, it defines which pixels of the destination will be affected,
and must be the same height and width as the source.
The request must be followed by the data bytes of the source pixmap in
the specified format, followed by 0 to 3 pad bytes to make the length
a multiple of four.
Errors: BadWindow, BadValue, BadBitmap, BadMatch
X_BitmapBitsPut
code 45
func display function (0-15)
mask plane mask
windowId Window
param.s[0] source height (> 0)
param.s[1] source width (> 0)
param.s[2] destination left coord
param.s[3] destination top coord
param.u[4] foreground pixel
param.u[5] background pixel
param.l[3] mask Bitmap or 0
Performs a function in a region of the window using a pixmap defined by
a bitmap and a pair of source pixels. The foreground pixel defines the
source for the one bits in the bitmap, and the background pixel defines
the source for the zero bits. The plane mask defines which destination
bit planes are affected. The display function is computed on each bit
plane. If a mask bitmap is specified, it defines which pixels of the
destination will be affected, and must be the same height and width as
the source.
The request must be followed by the data bytes of the source bitmap in
bitmap format, followed by 0 or 2 pad bytes to make the length a
multiple of four.
Errors: BadWindow, BadValue, BadBitmap, BadMatch
X_CopyArea
code 46
func display function (0-15)
mask plane mask
windowId Window
param.s[0] source height
param.s[1] source width
param.s[2] source left coord
param.s[3] source top coord
param.s[6] destination left coord
param.s[7] destination top coord
Copies one region of the window to another region in the same window.
The plane mask defines which destination bit planes are affected. The
display function is computed on each bit plane.
If parts of the source are obscured, the corresponding parts of the
destination are filled with the window's background. If ExposeCopy has
been selected, ExposeRegion events will be generated for those parts of
the destination, and then an ExposeCopy event will be generated. All
of these events are guaranteed to be together in the stream, with no
intervening events.
Errors: BadWindow, BadValue
X_Text
code 47
func display function (0-15)
mask plane mask
windowId Window
param.s[0] destination left coord
param.s[1] destination top coord
param.l[1] Font
param.u[4] foreground pixel
param.u[5] background pixel
param.s[6] number of characters (>= 0)
param.b[14] inter-character pad
param.b[15] space character pad
Draws text using the specified function. The coordinates are for the
upper left of the first character. The foreground pixel defines the
source for the one bits in the font character bitmaps, and the
background pixel defines the source for the zero bits. The plane mask
defines which destination bit planes are affected. The display
function is computed on each bit plane. The inter-character pad
specifies the number of pixels to skip after each character before
printing the next character. The space character pad specifies the
number of additional pixels to skip after each space character before
printing the next character. The skipped pixels are not considered
part of the source or destination, and are not altered.
The request must be followed by the specified number of characters,
followed by 0 to 3 pad bytes to make the length a multiple of four.
Errors: BadWindow, BadValue, BadFont
X_TextMask
code 48
func display function (0-15)
mask plane mask
windowId Window
param.s[0] destination left coord
param.s[1] destination top coord
param.l[1] Font
param.u[4] source pixel
param.s[6] number of characters (>= 0)
param.b[14] inter-character pad
param.b[15] space character pad
Like X_Text, but the source pixel defines the value of the source bit
for each plane, and the font character bitmaps are used as masks to
define which pixels of the destination are affected.
The request must be followed by the specified number of characters,
followed by 0 to 3 pad bytes to make the length a multiple of four.
Errors: BadWindow, BadValue, BadFont
X_Line
code 49
func display function (0-15)
mask plane mask
windowId Window
param.s[0] x1 coord
param.s[1] y1 coord
param.s[2] x2 coord
param.s[3] y2 coord
param.u[4] source pixel
param.b[10] brush height (> 0)
param.b[11] brush width (> 0)
This request is the same as a DrawSolidLine X_Draw request with the two
vertexes (x1, y1, VertexDontDraw) and (x2, y2, VertexDrawLastPoint).
Errors: BadWindow, BadValue
X_Draw
code 50
func display function (0-15)
mask plane mask
windowId Window
param.s[0] number of vertexes (>= 0)
param.u[1] source pixel
param.b[4] brush height (> 0)
param.b[5] brush width (> 0)
param.s[3] 0: DrawSolidLine
1: DrawDashedLine
2: DrawPatternedLine
param.u[4] alternate source pixel (for patterned line)
param.s[5] pattern string (for dashed or patterned line)
param.s[6] pattern length (for dashed or patterned line) (1-16)
param.s[7] pattern multiplier (for dashed or patterned line) (> 0)
Draws arbitrary polygons/curves using the specified function and brush
rectangle. The area covered should be that obtained by laying down the
brush rectangle at every point along the path, with the upper left
corner following the path. Each pixel in that area may be processed
just once, or the brush may be repainted for each point along the path.
The plane mask defines which destination bit planes are affected. The
display function is computed on each bit plane. For a solid line, the
source pixel defines the value of the source bit for each plane. For
a dashed or patterned line, the pattern string specifies up to 16 bits
of pattern; the pattern length specifies the number of bits. The
pattern multiplier specifies the number of times each bit in the string
should be repeated before moving to the next bit. The bits are used
least significant first, wrapping as needed. For a dashed line, the
destination is only updated when the pattern bit is 1. For a patterned
line, the alternate source pixel is used when the pattern bit is 0.
The request must be followed by the specified number of vertexes,
followed by 0 or 2 pad bytes to make the length a multiple of four.
The C definition of a vertex is:
typedef struct _Vertex {
short x, y;
unsigned short flags;
} Vertex;
The flags are as follows:
VertexRelative 0x0001 else absolute
VertexDontDraw 0x0002 else draw
VertexCurved 0x0004 else straight
VertexStartClosed 0x0008 else not
VertexEndClosed 0x0010 else not
VertexDrawLastPoint 0x0020 else don't
A relative vertex is expressed in terms of offsets from the previous
vertex, an absolute vertex has offsets from the origin of the window.
The first vertex is never relative. VertexDontDraw and VertexCurved
control drawing from the previous vertex to the current vertex. It
can be useful to combine VertexDontDraw and VertexCurved to define the
shape of the displayed portion of the curve. VertexDontDraw can also
be used to combine multiple draws in one request. VertexStartClosed
should be set in the first vertex of a closed curve, VertexEndClosed in
the last; the two should specify the same point. In drawing from the
previous vertex to the current vertex, the current vertex point is not
drawn unless VertexDrawLastPoint is set.
Errors: BadWindow, BadValue
X_DrawFilled
code 51
func display function (0-15)
mask plane mask
windowId Window
param.s[0] number of vertexes (>= 0)
param.u[1] source pixel
param.l[1] tile Pixmap or 0
Draws arbitrary filled polygons/curves using the specified function
tiling pixmap or source pixel. If a tile is specified, the tiling
origin is controlled by the window's tilemode. If no tile is given,
the source pixel is used instead. The plane mask defines which
destination planes are affected.
The request must be followed by the specified number of vertexes,
followed by 0 or 2 pad bytes to make the length a multiple of four.
The vertex list should only consist of one or more closed regions.
A point is defined to be inside a region if an infinite ray with the
point as an origin crosses the path of the region an odd number of
times.
Errors: BadWindow, BadValue, BadPixmap, BadTile
X_PixmapSave
code 52
windowId Window
param.s[0] height (> 0)
param.s[1] width (> 0)
param.s[2] left coord
param.s[3] top coord
Creates a pixmap from the given portion of the window. The pixmap will
contain a direct image of that portion of the screen, including any
visible portions of subwindows or overlapping windows.
The window must be mapped, and it must be the case that, if there were
no subwindows or overlapping windows, the specified portion of the
window would be fully visible on the screen.
The reply:
param.l[0] Pixmap
Errors: BadWindow, BadValue, BadAlloc
X_PixmapGet
code 53
func 0: XYFormat
1: ZFormat
windowId Window
param.s[0] height (> 0)
param.s[1] width (> 0)
param.s[2] left coord
param.s[3] top coord
Returns the contents of the given portion of the window in the given
pixmap format. The pixmap will contain a direct image of that portion
of the screen, including any visible portions of subwindows or
overlapping windows.
The window must be mapped, and it must be the case that, if there were
no subwindows or overlapping windows, the specified portion of the
window would be fully visible on the screen.
The reply:
param.l[0] number of bytes
The reply is followed by the specified number of bytes of pixmap data,
followed by 0 to 3 pad bytes to make the length a multiple of four.
Errors: BadWindow, BadValue
X_StippleFill
code 54
func display function (0-15)
mask plane mask
windowId Window
param.s[0] destination height
param.s[1] destination width
param.s[2] destination left coord
param.s[3] destination top coord
param.u[4] source pixel
param.l[3] stipple Bitmap
Performs a function a a region of the window using a repeating pattern
defined by the stipple bitmap. The tiling origin is controlled by the
window's tilemode. The plane mask defines which destination bit planes
are affected. The display function is computed on each bit plane.
The destination pixels written are those corresponding to the 1 values
in the pattern generated from the stipple bitmap.
Errors: BadWindow, BadValue, BadTile, BadBitmap
X_SetUp
code 80
Returns the root window and device information.
The reply:
param.l[0] root Window
param.s[2] protocol version number (10)
param.s[3] device identifier
param.s[4] number of bit planes
param.u[5] number of usable color map cells
The currently defined devices are:
XDEV_VS100 1
XDEV_QVSS 2
XDEV_QDSS 3
X_UngrabMouse
code 81
Releases hold of the mouse if it was grabbed via an X_GrabMouse.
X_UngrabButton
code 82
mask button mask
Releases hold of the button/key combination if it was grabbed. The
button mask must have exactly one of LeftMask, MiddleMask, or RightMask
set, and may have some combination of ControlMask, MetaMask, ShiftMask,
and ShiftLockMask set.
Errors: BadValue
X_GetColor
code 83
param.u[0] red value
param.u[1] green value
param.u[2] blue value
Determines the closest color provided by the hardware, and returns a
pixel value representing that color. The corresponding color map cell
is read-only.
Read-only color map cells are shared among clients, so this request may
simply reference count an existing cell.
The reply:
param.u[0] pixel
Errors: BadAlloc
X_GetColorCells
code 84
func 1 if planes must be contiguous, 0 otherwise
param.s[0] number of colors (>= 0)
param.s[1] number of planes (>= 0)
Allocates N * 2^P color map cells, where N is the number of colors and
P is the number of planes specified.
The reply:
param.u[0] plane mask
The bits in the plane mask will be contiguous if requested. The reply
is followed by 2 * N bytes of data, where N is the number of colors
specified, followed by 0 or 2 pad bytes to make the length a multiple
of four. Each 16-bit word represents the pixel value of one of the
color cells. Additional pixel values are obtained by oring in all
possible combinations of one bits from the plane mask. The initial
colors for all of these cells is undefined.
If zero colors are requested, then the request allocates all cells with
a pixel value having at least one non-zero bit in the plane mask. At
most one such request will succeed.
Errors: BadValue, BadAlloc
X_FreeColors
code 85
mask plane mask
param.s[0] number of colors (>= 0)
Frees several colors or color map cells. Further use of the given
pixel values will result in undefined colors.
The request must be followed by the specified number of 16-bit pixel
values, followed by 0 or 2 pad bytes to make the length a multiple of
four. Additional pixel values are obtained by oring in all possible
combinations of one bits from the plane mask.
Errors: BadValue, BadAccess
X_StoreColors
code 86
param.s[0] number of colors (>= 0)
Change the colors of several pixels to the closest available hardware
colors.
The request must be followed by the specified number of color
definitions. The C definition is:
typedef struct _ColorDef {
unsigned short pixel;
unsigned short red, green, blue;
} ColorDef;
Errors: BadValue, BadAccess
X_QueryColor
code 87
param.u[0] pixel
Returns the color values for a pixel.
The reply:
param.u[0] red value
param.u[1] green value
param.u[2] blue value
Errors: BadValue
X_GetFont
code 88
param.s[0] length of name in chars (> 0)
Loads a font. This request must be followed by the characters of the
font name, followed by 0 to 3 pad bytes to make the length a multiple
of four. Case is significant.
Fonts are shared among clients, so this request may simply reference
count an existing font.
The reply:
param.l[0] Font
Errors: BadValue, BadFont, BadAlloc
X_FreeFont
code 89
param.l[0] Font
Indicates that the font is no longer needed. The font should never
again be referenced.
Errors: BadFont
X_QueryFont
code 90
param.l[0] Font
Returns information about a font.
The reply:
param.s[0] height
param.s[1] "average" width
param.s[2] first character
param.s[3] last character
param.s[4] baseline
param.s[5] 1 if fixed width, 0 if variable width
The baseline specifies where in pixels from the bottom of the font the
characters without descenders begin.
A font is fixed width if all characters in the given range are the same
width.
Fonts will get more complicated in a future version.
Errors: BadFont
X_CharWidths
code 91
param.l[0] Font
param.s[2] number of characters (>= 0)
Returns the width in pixels of each character. The request must be
followed by the specified number of characters, followed by 0 to 3 pad
bytes to make the length a multiple of four.
The reply:
param.l[0] number of bytes
The reply is followed by the specified number of bytes of data,
followed by 0 or 2 pad bytes to make the length a multiple of four.
Each 16-bit word of data contains the width of a character.
Errors: BadFont, BadValue
X_StringWidth
code 92
param.l[0] Font
param.s[2] number of characters (>= 0)
Returns the width in pixels of a string in a font.
The request must be followed by the specified number of characters,
followed by 0 to 3 pad bytes to make the length a multiple of four.
The reply:
param.s[0] width in pixels
Errors: BadFont, BadValue
X_FontWidths
code 93
param.l[0] Font
Returns the widths in pixels of all characters in a font.
The reply:
param.l[0] number of bytes
The reply is followed by the specified number of bytes of data,
followed by 0 or 2 pad bytes to make the length a multiple of four.
Each 16-bit word of data contains the width of a character. The widths
are for the range of characters given by X_QueryFont.
Errors: BadFont
X_StoreBitmap
code 94
param.s[0] height (> 0)
param.s[1] width (> 0)
Creates a bitmap.
The request must be followed by the correct number of bytes of data in
bitmap format, followed by 0 or 2 pad bytes to make the length a
multiple of four.
The reply:
param.l[0] Bitmap
Errors: BadValue, BadAlloc
X_FreeBitmap
code 95
param.l[0] Bitmap
Frees the storage consumed by the bitmap. The bitmap should never be
referenced again.
Errors: BadBitmap
X_CharBitmap
code 96
param.l[0] Font
param.s[2] character
Copies a character bitmap from a font.
The font can be freed immediately if no further explicit references to
it are to be made.
The reply:
param.l[0] Bitmap
Errors: BadFont, BadValue, BadAlloc
X_StorePixmap
code 97
func 0: XYFormat
1: ZFormat
param.s[0] height (> 0)
param.s[1] width (> 0)
Creates a pixmap.
The request must be followed by the correct number of bytes of data the
specified format, followed by 0 to 3 pad bytes to make the length a
multiple of four.
The reply:
param.l[0] Pixmap
Errors: BadValue, BadAlloc
X_FreePixmap
code 98
param.l[0] Pixmap
Frees the storage consumed by the pixmap. The pixmap should never be
referenced again.
Errors: BadPixmap
X_MakePixmap
code 99
param.l[0] Bitmap or 0
param.u[2] foreground pixel
param.u[3] background pixel
Creates a pixmap from a bitmap. The foreground pixel is used for the
one bits in the bitmap, and the background pixel is used for the zero
bits. If no bitmap is given, a bitmap of all one bits suitable for use
as a tiling pixmap is used.
The bitmap can be freed immediately if no further explicit references
to it are to be made.
The reply:
param.l[0] Pixmap
Errors: BadBitmap, BadValue, BadAlloc
X_QueryShape
code 100
func 0: CursorShape
1: TileShape
2: BrushShape
param.s[0] height (> 0)
param.s[1] width (> 0)
Given a rectangular shape, returns the "closest" shape actually
supported by the display for a given purpose. For a cursor shape,
returns a Bitmap shape acceptable for X_StoreCursor. For a tile shape,
returns a Pixmap shape acceptable for tiling. For a brush shape,
returns a shape acceptable for X_Line and X_Draw.
The reply:
param.s[0] height
param.s[1] width
Errors: BadValue
X_StoreCursor
code 101
func display function (0-15)
param.l[0] cursor Bitmap
param.u[2] foreground pixel
param.u[3] background pixel
param.l[2] mask Bitmap or 0
param.s[6] x offset
param.s[7] y offset
Defines a mouse cursor. The foreground pixel is used for the one bits
in the cursor bitmap, and the background pixel is used for the zero
bits. The mask bitmap defines the shape of the cursor; that is, the
one bits in the mask define which cursor pixels will be displayed. If
no mask is given, all pixels of the cursor are displayed. The mask
bitmap, if present, must be the same size as the cursor bitmap. The
offsets define the point that actually corresponds to the mouse
position; this must be a point in the cursor bitmap.
The components of the cursor may be transformed arbitrarily to meet
hardware limitations.
The bitmaps can be freed immediately if no further explicit references
to them are to be made.
The reply:
param.l[0] Cursor
Errors: BadValue, BadBitmap, BadMatch, BadAlloc
X_FreeCursor
code 102
param.l[0] Cursor
Frees the storage consumed by the cursor. The cursor should never be
referenced again.
Errors: BadCursor
X_MouseControl
code 103
param.s[0] acceleration (>= 1)
param.s[1] threshold (>= 0)
Defines how the mouse moves. The acceleration is a multiplier for
movement. E.g., specifying 3 means the cursor moves three times as
fast as the mouse. Acceleration only takes effect if the mouse moves
more than threshold pixels at once, and only applies to the amount
beyond the threshold.
Errors: BadValue
X_FeepControl
code 104
func volume (0-7)
Defines the base volume for X_Feep requests. The volume is in the
range 0 to 7, with 7 the loudest.
Errors: BadValue
X_Feep
code 105
param.s[0] relative volume (-7 to 7)
Cause an audible bell. The volume is added to the base volume defined
by the X_FeepControl request, the sum limited to the range 0 to 7.
Errors: BadValue
X_ShiftLock
code 106
func 0: LockUpDownMode
1: LockToggleMode
Sets the mode of the Shift LOCK key on the keyboard. When the keyboard
is in LockUpDownMode, KeyPressed and KeyReleased events are sent as for
any other key, and the ShiftLockMask sent in events gives the current
state of the key. In LockToggleMode, KeyPressed and KeyReleased events
are never sent for the LOCK key, and the state of the ShiftLockMask
sent in events is toggled on every press of the LOCK key.
The key is initially in LockToggleMode.
Errors: BadValue
X_KeyClick
code 107
func volume (0-8)
Turns keyboard key click off (volume 0), or turns it on and sets the
volume, with 8 the loudest.
Errors: BadValue
X_AutoRepeat
code 108
func 0 for off, 1 for on
Turns keyboard autorepeat on or off.
Errors: BadValue
X_ScreenSaver
code 109
func 0 for video off, 1 for video on
param.s[0] screen saver timeout in minutes (> 0)
param.s[1] pattern change timeout interval in minutes (> 0)
If the server remains idle for the specified number of minutes, screen
saver is enabled. If video off is specified, and the hardware supports
video blanking, the screen will simply go blank. Otherwise, the
screen will be tiled with the root window background tile, randomly
re-origined at the specified timeout interval. The screen state will
be restored when the next request or input event occurs.
Errors: BadValue
X_StoreBytes
code 110
func cut buffer (0-7)
param.s[0] number of bytes (>= 0)
Stores an arbitrary string of bytes one of eight "cut buffers". These
bytes may be retrieved with the X_FetchBytes request.
The previous contents of the cut buffer are lost.
The request must be followed by the specified number of bytes of data,
followed by 0 to 3 pad bytes to make the length a multiple of four.
Errors: BadValue
X_FetchBytes
code 111
func cut buffer (0-7)
Retrieves the contents of the specified cut buffer.
The reply:
param.s[0] number of bytes
The reply is followed by the specified number of bytes of data,
followed by 0 to 3 pad bytes to make the length a multiple of four.
Errors: BadValue
X_RotateCuts
code 112
func rotate count (0-7)
Rotates the cut buffers by N. Buffer 0 becomes buffer N, buffer 1
becomes N+1 mod 8, and so on.
Errors: BadValue
X_AddHost
code 113
func address family
param.l[0-?] host address
Add the specified host to the list of hosts allowed to open
connections.
The currently recognized address families are
XAF_INET 2
XAF_DECnet 12
In Unix term, the host address for XAF_INET is "struct in_addr",
and for XAF_DECnet is "struct dn_naddr".
The client must reside on the same host as the window system.
Under Unix, the initial set of hosts consists of the host the window
system is running on, plus those hosts listed in /etc/X?.hosts, where ?
is the number of the display. This file should consist of host names
separated by newlines. DECnet host names must have a trailing "::".
Errors: BadValue, BadAccess
X_RemoveHost
code 114
func address family
param.l[0-?] host address
Remove the specified host from the list of hosts allowed to open
connections.
The address family and host address are as for X_AddHost.
The client must reside on the same host as the window system.
Errors: BadValue, BadAccess
X_GetHosts
code 115
func address family
Returns the current list of hosts allowed to open connections.
The reply:
param.l[0] number of bytes
The reply is followed by the specified number of bytes of data,
containing a list of host addresses. The size of each host address
is determined by the address family, as for X_AddHost.
Errors: BadValue
X_GrabServer
code 116
Disables processing of requests and close-downs on all other
connections (than the one this request arrived on).
X_UngrabServer
code 117
Restarts processing of requests and close-downs on other connections.
X_LookupColor
code 118
param.s[0] length of name in characters (>= 0)
Returns the color values for a given color name. The name is looked
up in a standard color database. This request must be followed by the
characters of the color name, followed by 0 to 3 pad bytes to make the
length a multiple of four. Case is significant.
The reply:
param.u[0] exact red value
param.u[1] exact green value
param.u[2] exact blue value
param.u[3] closest hardware red value
param.u[4] closest hardware green value
param.u[5] closest hardware blue value
Errors: BadValue, BadColor
Input events:
Selecting MouseMoved will result in events independent of the state of the
mouse buttons. By selecting some subset of (LeftDownMotion, MiddleDownMotion,
RightDownMotion) instead, MouseMoved events will only be generated when one or
more of the specified buttons is depressed.
KeyPressed, KeyReleased, ButtonPressed, ButtonReleased, and MouseMoved events
are usually sent to the smallest window enclosing the mouse that has selected
such events. For KeyPressed and KeyReleased events, if this window is not in
the keyboard focus hierarchy, the events will be sent to the focus window
instead.
KeyPressed, KeyReleased, ButtonPressed, ButtonReleased, EnterWindow,
LeaveWindow, and MouseMoved events have the following structure:
code kind of event (KeyPressed, etc.)
param.l[0] event Window
param.s[2] time in 10 millisecond ticks (Key and Button only)
param.s[3] event detail
param.s[4] mouse x coord within event window
param.s[5] mouse y coord within event window
param.l[3] sub Window
param.l[4] Locator
The coordinates of the mouse relative to the event window are reported, even if
the mouse is not in the window (because of grabbing or keyboard focusing). If
the mouse is also in a (direct) child of the event window, the subwindow is set
to that child, otherwise the subwindow is 0. The locator defines the mouse
coordinates in absolute terms.
The time value is present only for KeyPressed, KeyReleased, ButtonPressed, and
ButtonReleased events. Note that there are only 16 bits of time (which should
be treated as unsigned), which wraps after approximately 11 minutes, so only
time differences between clustered events is interesting.
For all seven event types, the high bits of the detail encode the state of
various keys and buttons just before the event:
ControlMask 0x4000 Control key
MetaMask 0x2000 Meta (Symbol) key
ShiftMask 0x1000 Shift key
ShiftLockMask 0x0800 ShiftLock key
LeftMask 0x0400 Left button
MiddleMask 0x0200 Middle button
RightMask 0x0100 Right button
For KeyPressed and KeyReleased, the low byte of the detail gives the key. This
is not an ASCII character, but the code transmitted by the LK201 keyboard.
For ButtonPressed and ButtonReleased, the low byte of the detail is one of:
RightButton 0
MiddleButton 1
LeftButton 2
For EnterWindow and LeaveWindow, the low byte of the detail is either zero or
one of:
IntoOrFromSubwindow 1
VirtualCrossing 2
EnterWindow and LeaveWindow events are generated as follows:
When the mouse moves from window A to window B, and B is an ancestor of A:
A will get a LeaveWindow with detail 0
windows between A and B exclusive that have LeaveWindow selected
will get a LeaveWindow with detail 2
B will get an EnterWindow with detail 1
When the mouse moves from window A to window B, and B is a descendant of A:
A will get a LeaveWindow with detail 1
windows between A and B exclusive that have EnterWindow selected
will get an EnterWindow with detail 2
B will get an EnterWindow with detail 0
When the mouse moves from window A to window B, with window C being their
least common ancestor:
A will get a LeaveWindow with detail 0
windows between A and C exclusive that have LeaveWindow selected
will get a LeaveWindow with detail 2
windows between C and B exclusive that have EnterWindow selected
will get an EnterWindow with detail 2
B will get an EnterWindow with detail 0
At the start of a mouse grab, either automatically from a button press,
or from an X_GrabMouse or X_GrabButton, with the mouse in window A, and
with window B being the smallest window enclosing the mouse that has had
an X_SelectInput issued on it by some client:
A will get a LeaveWindow with detail 0 if the grabbing client has
not issued an X_SelectInput command on B
ancestors of A (not including the root) will get a LeaveWindow with
detail 2 if the grabbing client has not issued an X_SelectInput
on the window and the window has LeaveWindow selected.
At the end of a mouse grab, with the mouse in window A, and with window B
being the smallest window enclosing the mouse that has had an X_SelectInput
issued on it by some client:
ancestors of A (not including the root) will get an EnterWindow with
detail 2 if the grabbing client has not issued an X_SelectInput
on the window and the window has EnterWindow selected.
A will get an EnterWindow with detail 0 if the grabbing client has
not issued an X_SelectInput command on B.
Note that EnterWindow and LeaveWindow events with detail 0 or 1 (but not 2)
will propagate to the smallest enclosing window that has actually selected the
event.
LeaveWindow events are not generated when windows are unmapped or destroyed.
UnmapWindow events occur whenever an X_UnmapWindow or X_UnmapSubwindows request
is executed on a mapped window. The event structure is:
code UnmapWindow
param.l[0] event Window
param.l[3] sub Window
If a subwindow is given, it is the actual window on which the request was
issued (not the ancestor that is a direct child of the event window).
FocusChange events occur whenever the keyboard focus changes. The event
structure is:
code FocusChange
param.l[0] event Window
param.s[3] EnterWindow or LeaveWindow
param.l[3] sub Window
If a subwindow is given, it is the actual window on which the request was
issued (not the ancestor that is a direct child of the event window).
For ExposeWindow and ExposeRegion events, the structure is as follows:
code ExposeWindow or ExposeRegion
param.l[0] event Window
param.s[3] detail (0 or ExposeCopy)
param.s[4] width of area
param.s[5] height of area
param.l[3] sub Window
param.s[8] top coord of area
param.s[9] left coord of area
Coordinates are relative to the inside of the exposed window.
ExposeWindow and ExposeRegion events are triggered as (parts of) windows become
exposed. When an entire window becomes exposed (as when a window is mapped or
changes size), an ExposeWindow event is sent. The width and height of the
entire window is given, and the coordinates are (0, 0). When only parts of a
window become exposed (as when an obscuring window is moved), ExposeRegion
events are sent describing each newly exposed area. However, if only
ExposeWindow has been selected, a single ExposeWindow will be sent instead. If
the region exposure is the result of a CopyArea, then ExposeCopy will be set in
the detail word. If the exposure is actually that of a descendant of the
window selecting the event, the subwindow is set to that descendant and the
coordinates are actually for the subwindow, otherwise the subwindow is 0. For
a given window exposure or CopyArea, all resulting ExposeRegion events will be
sent contiguously, with no other events interspersed.
For ExposeCopy events, the structure is as follows:
code ExposeCopy
param.l[0] event Window
param.l[3] sub Window
If the CopyArea was done in a descendant of the window selecting the event, the
subwindow is set to that descendant, otherwise the subwindow is 0.