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