Hey, anyone have any comments on this patch? Thanks, Andrew
On Fri, May 15, 2015 at 03:10:13PM -0500, Andrew Eikum wrote: > While it's documented in the XACE spec, the XACE_KEY_AVAIL hook is > currently never actually invoked by the xserver. > > This hook was added in 13c6713c82 (25 Aug 2006), but as the keyboard > processing was moved into XKB, the hook was forgotten and silently > dropped. The code calling this hook was removed by 7af53799c (4 Jan > 2009), but it was probably already unused before that. > > This patch re-adds support for this hook. The "count" hook parameter is > unused. > > Signed-off-by: Andrew Eikum <[email protected]> > --- > > Change from previous patch: Daniel S on IRC suggested placing the hook > into ProcessDeviceEvent, as that's where the X server does most of the > actual event prep and handling before dispatch to clients. > > I noticed while testing this that my XACE plugin got multiple calls for > a single physical keypress. One came from the physical keyboard device, > and another from the Virtual core keyboard. I thought about doing some > sort of filtering to prevent duplicate events, but I think it's better > to ask the XACE plugin to do its own discrimination based on the device. > > Pending approval, updates to the XACE spec documentation for the "count" > parameter, and to warn about duplicate events, will follow. > --- > Xi/exevents.c | 12 ++++++++++++ > 1 file changed, 12 insertions(+) > > diff --git a/Xi/exevents.c b/Xi/exevents.c > index 1c586d0..859c29f 100644 > --- a/Xi/exevents.c > +++ b/Xi/exevents.c > @@ -1730,6 +1730,18 @@ ProcessDeviceEvent(InternalEvent *ev, DeviceIntPtr > device) > break; > } > > + /* send KeyPress and KeyRelease events to XACE plugins */ > + if (XaceHooks[XACE_KEY_AVAIL] && > + (event->type == ET_KeyPress || event->type == ET_KeyRelease)) { > + xEvent *core; > + int count; > + > + if (EventToCore(ev, &core, &count) == Success) { > + XaceHook(XACE_KEY_AVAIL, core, device, 0); > + free(core); > + } > + } > + > if (DeviceEventCallback && !syncEvents.playingEvents) { > DeviceEventInfoRec eventinfo; > SpritePtr pSprite = device->spriteInfo->sprite; > -- > 2.4.0 > > _______________________________________________ > [email protected]: X.Org development > Archives: http://lists.x.org/archives/xorg-devel > Info: http://lists.x.org/mailman/listinfo/xorg-devel _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
