On Thu, Feb 20, 2014 at 08:38:14PM +0100, Andreas Wettstein wrote: > The XKB protocol specification demands support for these flags. > > Signed-off-by: Andreas Wettstein <[email protected]> > --- > xkb/xkbActions.c | 12 +++++++++--- > 1 file changed, 9 insertions(+), 3 deletions(-) > > diff --git a/xkb/xkbActions.c b/xkb/xkbActions.c > index 382cf7e..21955b6 100644 > --- a/xkb/xkbActions.c > +++ b/xkb/xkbActions.c > @@ -759,7 +759,7 @@ _XkbFilterControls(XkbSrvInfoPtr xkbi, > filter->active = 1; > filter->filterOthers = 0; > change = XkbActionCtrls(&pAction->ctrls); > - filter->priv = change; > + filter->priv = change & ~ctrls->enabled_ctrls;
OK, I had to look a bit at this. I got confused, but then I saw LockControls isn't really supposed to behave like LockMods, it doesn't lock the ctrls, it actually *toggles* them (I don't really understand why though). Anyway, though a bit hard to see, this change covers all bases correctly according to the spec, and the below hunks are good as well, so: Reviewed-By: Ran Benita <[email protected]> Thanks, Ran > filter->filter = _XkbFilterControls; > filter->upAction = *pAction; > > @@ -772,7 +772,10 @@ _XkbFilterControls(XkbSrvInfoPtr xkbi, > xkbControlsNotify cn; > XkbSrvLedInfoPtr sli; > > - ctrls->enabled_ctrls |= change; > + if (pAction->type != XkbSA_LockControls || > + !(pAction->ctrls.flags & XkbSA_LockNoLock)) > + ctrls->enabled_ctrls |= change; > + > if (XkbComputeControlsNotify(kbd, &old, ctrls, &cn, FALSE)) { > cn.keycode = keycode; > /* XXX: what about DeviceKeyPress? */ > @@ -801,7 +804,10 @@ _XkbFilterControls(XkbSrvInfoPtr xkbi, > xkbControlsNotify cn; > XkbSrvLedInfoPtr sli; > > - ctrls->enabled_ctrls &= ~change; > + if (filter->upAction.type != XkbSA_LockControls || > + !(filter->upAction.ctrls.flags & XkbSA_LockNoUnlock)) > + ctrls->enabled_ctrls &= ~change; > + > if (XkbComputeControlsNotify(kbd, &old, ctrls, &cn, FALSE)) { > cn.keycode = keycode; > cn.eventType = KeyRelease; > -- > 1.8.3.1 > _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
