xkb: Support noLock and noUnlock flags for LockMods
These flags are required by the XKB spec section 6.3. Signed-off-by: Andreas Wettstein <wettstein509@solnet.ch> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
6f33593dc0
commit
e3f6a76dd4
|
@ -344,15 +344,18 @@ _XkbFilterLockState( XkbSrvInfoPtr xkbi,
|
||||||
filter->keycode = keycode;
|
filter->keycode = keycode;
|
||||||
filter->active = 1;
|
filter->active = 1;
|
||||||
filter->filterOthers = 0;
|
filter->filterOthers = 0;
|
||||||
filter->priv = 0;
|
filter->priv = xkbi->state.locked_mods&pAction->mods.mask;
|
||||||
filter->filter = _XkbFilterLockState;
|
filter->filter = _XkbFilterLockState;
|
||||||
filter->upAction = *pAction;
|
filter->upAction = *pAction;
|
||||||
xkbi->state.locked_mods^= pAction->mods.mask;
|
if (!(filter->upAction.mods.flags&XkbSA_LockNoLock))
|
||||||
|
xkbi->state.locked_mods|= pAction->mods.mask;
|
||||||
xkbi->setMods = pAction->mods.mask;
|
xkbi->setMods = pAction->mods.mask;
|
||||||
}
|
}
|
||||||
else if (filter->keycode==keycode) {
|
else if (filter->keycode==keycode) {
|
||||||
filter->active = 0;
|
filter->active = 0;
|
||||||
xkbi->clearMods = filter->upAction.mods.mask;
|
xkbi->clearMods = filter->upAction.mods.mask;
|
||||||
|
if (!(filter->upAction.mods.flags&XkbSA_LockNoUnlock))
|
||||||
|
xkbi->state.locked_mods&= ~filter->priv;
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue