[Xcb] [PATCH proto 3/3] xkb: Unify events into single event

Daniel Martin consume.noise at gmail.com
Sun Aug 18 07:53:59 PDT 2013


XKB just knows one event, all the other events are sub events of it.

- Transform all events to structs and remove the xkbType field.
- Add a union (AnyEvent) covering all sub events.
- Add one event having the xkbType and xkbAnyEvent fields. The latter is
  of the union type AnyEvent.

This is part 2/2 (!) to fix bug #51295:
    various problems with the xkb protocol bindings
    https://bugs.freedesktop.org/show_bug.cgi?id=51295

(!) This is a workaround. The correct fix would be to use a switch/case,
    which is not supported atm. Introducing the switch/case may break
    API compatibility later.

Signed-off-by: Daniel Martin <consume.noise at gmail.com>
---
 src/xkb.xml | 79 ++++++++++++++++++++++++++++++++++---------------------------
 1 file changed, 44 insertions(+), 35 deletions(-)

diff --git a/src/xkb.xml b/src/xkb.xml
index 4ab8d3e..fd1e703 100644
--- a/src/xkb.xml
+++ b/src/xkb.xml
@@ -2451,8 +2451,7 @@ <request name="SetDebuggingFlags" opcode="101">
 
 	<!-- Events -->
 
-	<event name="NewKeyboardNotify" number="0">
-		<field name="xkbType" type="CARD8" />
+	<struct name="NewKeyboardNotify">
 		<field name="time" type="TIMESTAMP" />
 		<field name="deviceID" type="CARD8" />
 		<field name="oldDeviceID" type="CARD8" />
@@ -2464,10 +2463,9 @@ <event name="NewKeyboardNotify" number="0">
 		<field name="requestMinor" type="CARD8" />
 		<field name="changed" type="CARD16" mask="NKNDetail" />
 		<pad bytes="14" />
-	</event>
+	</struct>
 
-	<event name="MapNotify" number="1">
-		<field name="xkbType" type="CARD8" />
+	<struct name="MapNotify">
 		<field name="time" type="TIMESTAMP" />
 		<field name="deviceID" type="CARD8" />
 		<field name="ptrBtnActions" type="CARD8" />
@@ -2490,10 +2488,9 @@ <event name="MapNotify" number="1">
 		<field name="nVModMapKeys" type="CARD8" />
 		<field name="virtualMods" type="CARD16" mask="VMod" />
 		<pad bytes="2" />
-	</event>
+	</struct>
 
-	<event name="StateNotify" number="2">
-		<field name="xkbType" type="CARD8" />
+	<struct name="StateNotify">
 		<field name="time" type="TIMESTAMP" />
 		<field name="deviceID" type="CARD8" />
 		<field name="mods" type="CARD8" mask="ModMask" />
@@ -2515,10 +2512,9 @@ <event name="StateNotify" number="2">
 		<field name="eventType" type="CARD8" />
 		<field name="requestMajor" type="CARD8" />
 		<field name="requestMinor" type="CARD8" />
-	</event>
+	</struct>
 
-	<event name="ControlsNotify" number="3">
-		<field name="xkbType" type="CARD8" />
+	<struct name="ControlsNotify">
 		<field name="time" type="TIMESTAMP" />
 		<field name="deviceID" type="CARD8" />
 		<field name="numGroups" type="CARD8" />
@@ -2531,30 +2527,27 @@ <event name="ControlsNotify" number="3">
 		<field name="requestMajor" type="CARD8" />
 		<field name="requestMinor" type="CARD8" />
 		<pad bytes="4" />
-	</event>
+	</struct>
 
-	<event name="IndicatorStateNotify" number="4">
-		<field name="xkbType" type="CARD8" />
+	<struct name="IndicatorStateNotify">
 		<field name="time" type="TIMESTAMP" />
 		<field name="deviceID" type="CARD8" />
 		<pad bytes="3" />
 		<field name="state" type="CARD32" />
 		<field name="stateChanged" type="CARD32" />
 		<pad bytes="12" />
-	</event>
+	</struct>
 
-	<event name="IndicatorMapNotify" number="5">
-		<field name="xkbType" type="CARD8" />
+	<struct name="IndicatorMapNotify">
 		<field name="time" type="TIMESTAMP" />
 		<field name="deviceID" type="CARD8" />
 		<pad bytes="3" />
 		<field name="state" type="CARD32" />
 		<field name="mapChanged" type="CARD32" />
 		<pad bytes="12" />
-	</event>
+	</struct>
 
-	<event name="NamesNotify" number="6">
-		<field name="xkbType" type="CARD8" />
+	<struct name="NamesNotify">
 		<field name="time" type="TIMESTAMP" />
 		<field name="deviceID" type="CARD8" />
 		<pad bytes="1" />
@@ -2572,10 +2565,9 @@ <event name="NamesNotify" number="6">
 		<field name="nKeys" type="CARD8" />
 		<field name="changedIndicators" type="CARD32" />
 		<pad bytes="4" />
-	</event>
+	</struct>
 
-	<event name="CompatMapNotify" number="7">
-		<field name="xkbType" type="CARD8" />
+	<struct name="CompatMapNotify">
 		<field name="time" type="TIMESTAMP" />
 		<field name="deviceID" type="CARD8" />
 		<field name="changedGroups" type="CARD8" mask="SetOfGroup" />
@@ -2583,10 +2575,9 @@ <event name="CompatMapNotify" number="7">
 		<field name="nSI" type="CARD16" />
 		<field name="nTotalSI" type="CARD16" />
 		<pad bytes="16" />
-	</event>
+	</struct>
 
-	<event name="BellNotify" number="8">
-		<field name="xkbType" type="CARD8" />
+	<struct name="BellNotify">
 		<field name="time" type="TIMESTAMP" />
 		<field name="deviceID" type="CARD8" />
 		<field name="bellClass" type="CARD8" enum="BellClassResult" />
@@ -2598,10 +2589,9 @@ <event name="BellNotify" number="8">
 		<field name="window" type="WINDOW" />
 		<field name="eventOnly" type="BOOL" />
 		<pad bytes="7" />
-	</event>
+	</struct>
 
-	<event name="ActionMessage" number="9">
-		<field name="xkbType" type="CARD8" />
+	<struct name="ActionMessage">
 		<field name="time" type="TIMESTAMP" />
 		<field name="deviceID" type="CARD8" />
 		<field name="keycode" type="KEYCODE" />
@@ -2613,10 +2603,9 @@ <event name="ActionMessage" number="9">
 			<value>8</value>
 		</list>
 		<pad bytes="10" />
-	</event>
+	</struct>
 
-	<event name="AccessXNotify" number="10">
-		<field name="xkbType" type="CARD8" />
+	<struct name="AccessXNotify">
 		<field name="time" type="TIMESTAMP" />
 		<field name="deviceID" type="CARD8" />
 		<field name="keycode" type="KEYCODE" />
@@ -2624,10 +2613,9 @@ <event name="AccessXNotify" number="10">
 		<field name="slowKeysDelay" type="CARD16" />
 		<field name="debounceDelay" type="CARD16" />
 		<pad bytes="16" />
-	</event>
+	</struct>
 
-	<event name="ExtensionDeviceNotify" number="11">
-		<field name="xkbType" type="CARD8" />
+	<struct name="ExtensionDeviceNotify">
 		<field name="time" type="TIMESTAMP" />
 		<field name="deviceID" type="CARD8" />
 		<pad bytes="1" />
@@ -2641,5 +2629,26 @@ <event name="ExtensionDeviceNotify" number="11">
 		<field name="supported" type="CARD16" mask="XIFeature" />
 		<field name="unsupported" type="CARD16" mask="XIFeature" />
 		<pad bytes="2" />
+	</struct>
+
+	<union name="AnyEvent">
+		<field name="newKeyboardNotify" type="NewKeyboardNotify" />
+		<field name="mapNotify" type="MapNotify" />
+		<field name="stateNotify" type="StateNotify" />
+		<field name="controlsNotify" type="ControlsNotify" />
+		<field name="indicatorStateNotify" type="IndicatorStateNotify" />
+		<field name="indicatorMapNotify" type="IndicatorMapNotify" />
+		<field name="namesNotify" type="NamesNotify" />
+		<field name="compatMapNotify" type="CompatMapNotify" />
+		<field name="bellNotify" type="BellNotify" />
+		<field name="actionMessage" type="ActionMessage" />
+		<field name="accessXNotify" type="AccessXNotify" />
+		<field name="extensionDeviceNotify" type="ExtensionDeviceNotify" />
+	</union>
+
+	<event name="Event" number="0">
+		<field name="xkbType" type="CARD8" enum="EventType" />
+		<field name="xkbAnyEvent" type="AnyEvent" />
 	</event>
+
 </xcb>
-- 
1.8.3.3



More information about the Xcb mailing list