84 lines
3.1 KiB
Plaintext
84 lines
3.1 KiB
Plaintext
|
X Generic Event Extension
|
||
|
Peter Hutterer
|
||
|
peter.hutterer@who-t.net
|
||
|
|
||
|
|
||
|
1. Introduction
|
||
|
2. Extension Initialization
|
||
|
3. Extension Events
|
||
|
4. Notes
|
||
|
|
||
|
_____________________________________________________________________________
|
||
|
1. Introduction
|
||
|
|
||
|
X was designed to provide 64 event opcodes for all extensions. These events
|
||
|
are limited to 32 bytes.
|
||
|
|
||
|
The Generic Event Extension provides a template event for extensions to re-use
|
||
|
a single event opcode. GE only provide headers and the most basic
|
||
|
functionality, leaving the extensions to interpret the events in their
|
||
|
specific context.
|
||
|
|
||
|
GenericEvents may be longer than 32 bytes. If so, the number of 4 byte units
|
||
|
following the initial 32 bytes must be specified in the length field of the
|
||
|
event.
|
||
|
_____________________________________________________________________________
|
||
|
2. Extension Initialization
|
||
|
|
||
|
The name of this extension is "Generic Event Extension"
|
||
|
|
||
|
┌───
|
||
|
GEQueryVersion
|
||
|
client-major-version: CARD16
|
||
|
client-minor-version: CARD16
|
||
|
▶
|
||
|
major-version: CARD16
|
||
|
minor-version: CARD16
|
||
|
└───
|
||
|
|
||
|
The client sends the highest supported version to the server
|
||
|
and the server sends the highest version it supports, but no
|
||
|
higher than the requested version. Major versions changes can
|
||
|
introduce incompatibilities in existing functionality, minor
|
||
|
version changes introduce only backward compatible changes.
|
||
|
It is the clients responsibility to ensure that the server
|
||
|
supports a version which is compatible with its expectations.
|
||
|
|
||
|
|
||
|
As of version 1.0, no other requests are provided by this extension.
|
||
|
_____________________________________________________________________________
|
||
|
3. Extension Events
|
||
|
|
||
|
GE defines a single event, to be used by all extensions. The event's structure
|
||
|
is similar to a reply.
|
||
|
|
||
|
┌───
|
||
|
GenericEvent
|
||
|
type: BYTE; always GenericEvent
|
||
|
extension: CARD8; extension offset
|
||
|
sequenceNumber: CARD16 low 16 bits of request seq. number
|
||
|
length: CARD32 length
|
||
|
evtype: CARD16 event type
|
||
|
└───
|
||
|
|
||
|
The field 'extension' is to be set to the major opcode of the
|
||
|
extension. The 'evtype' field is the actual opcode of the event.
|
||
|
The length field specifies the number of 4-byte blocks after the
|
||
|
initial 32 bytes. If length is 0, the event is 32 bytes long.
|
||
|
_____________________________________________________________________________
|
||
|
4. Notes
|
||
|
|
||
|
Although the wire event is of arbitrary length, the actual size of an XEvent
|
||
|
is restricted to sizeof(XEvent) [96 bytes, see Xlib.h]. If an extension
|
||
|
converts a wire event to an XEvent > 96 bytes, it will overwrite the space
|
||
|
allocated for the event. See struct _XSQEvent in Xlibint.h for details.
|
||
|
|
||
|
Extensions need to malloc additional data and fill the XEvent structure with
|
||
|
pointers to the malloc'd data. The client then needs to free the data, only
|
||
|
the XEvent structure will be released by Xlib.
|
||
|
|
||
|
The server must not send GenericEvents longer than 32 bytes until it has
|
||
|
verified that the client is able to interpret these events. If a long event is
|
||
|
sent to a client unable to process GenericEvents, future interpretation of
|
||
|
replies and events by this client will fail.
|