XGE protocol spec
Peter Hutterer
peter.hutterer at who-t.net
Sun Nov 30 22:15:47 PST 2008
Below is the protocol spec for the X Generic Event Extension (XGE). It'll be
shipped with 1.6 even though there won't be any consumers for it yet.
(This is the current proto/xextproto/geproto.txt file as valid in my tree. Will
be pushed pending no objections.)
Cheers,
Peter
X Generic Event Extension
Peter Hutterer
peter.hutterer at 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 is a template 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 request.
┌───
RRScreenChangeNotify
type: BYTE; always GenericEvent
extension: CARD8; extension offset
sequenceNumber: CARD16 low 16 bits of request seq. number
length: CARD32 time screen was changed
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.
_____________________________________________________________________________
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
acllocated 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.
More information about the xorg
mailing list