Generic Event Extension (XGE)
Mehr Info
- Entwickler
- Peter Hutterer
- Jahr
- 2008
- Typ
- X11-Erweiterung
- Spezifikation
- X Generic Event Extension
Die X11-Erweiterung, die Ereignisse jenseits von 32 Bytes möglich machte, damit XInput 2 Druck, Neigung und Finger melden konnte, ohne alles in den Briefumschlag des Protokolls von 1987 zu pressen.
Jedes Ereignis im X11-Kernprotokoll ist genau 32 Bytes groß, und die acht Bit für den Typ ließen 128 Werte übrig, die sich alle Erweiterungen teilen mussten. Für Tastatur und Maus war das 1987 ausreichend; ein Tablett, das gleichzeitig Druck, Neigung, Rotation und mehrere Finger meldet, passte nicht hinein. Peter Hutterer schrieb 2008 die Generic Event Extension als Keil im Protokoll: ein einziger Ereignistyp, GenericEvent, Nummer 35, dessen Kopf den Opcode der Erweiterung, einen eigenen Untertyp und ein Längenfeld enthält. Was nicht in die 32 Bytes passt, folgt in Einheiten zu vier Bytes.
Erster Kunde war ein Jahr später XInput 2, dessen MPX ganze Listen von Achsenwerten pro Ereignis brauchte, später kam Present hinzu. Den Preis zahlt Xlib, das immer von fester Größe ausgegangen war: Ein Client erhält einen XGenericEventCookie und muss mit XGetEventData den Rest abholen und danach XFreeEventData aufrufen. Wer den zweiten Aufruf vergisst, hat ein Speicherleck – und das taten viele. XCB kannte das Problem nie, weil es nie etwas über die Länge angenommen hatte.