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

Ran Benita ran234 at gmail.com
Sun Aug 18 09:35:08 PDT 2013


On Sun, Aug 18, 2013 at 07:22:13PM +0300, Ran Benita wrote:
> On Sun, Aug 18, 2013 at 04:53:59PM +0200, Daniel Martin wrote:
> > 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>
> >
> 
> All 3 patches in this series are
> Tested-By: Ran Benita <ran234 at gmail.com>

I forgot to mention I tested it on top of Daniel's for-master branch.

Ran

> I have done something like this on the user side myself.
> 
> However I am not sure it is worth breaking every current user (I know at
> least a couple) if there's a realistic intention to break it again in
> the future. But if you don't see it getting fixed any time soon, then
> this is better, so
> 
> Reviewed-By: Ran Benita <ran234 at gmail.com>
> 
> But please bump the soname for xcb-xkb. Also a couple small
> suggestions below you might consider.
> 
> > ---
> >  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">
> 
> The generated type is "xcb_xkb_event_event_t". Maybe change the name
> here to "Common" or so?
> 
> > +		<field name="xkbType" type="CARD8" enum="EventType" />
> > +		<field name="xkbAnyEvent" type="AnyEvent" />
> 
> xkbAnyEvent is a mouthful, how about just "any"?
> 
> Ran
> 
> >  	</event>
> > +
> >  </xcb>
> > -- 
> > 1.8.3.3
> > 
> > _______________________________________________
> > Xcb mailing list
> > Xcb at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/xcb


More information about the Xcb mailing list