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
                          [EMAIL PROTECTED]


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.

_______________________________________________
xorg mailing list
xorg@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/xorg

Reply via email to