[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