xkblib spec says:
XkbSA_LockNoLock If set, and the action type is XkbSA_LockMods,
the server only unlocks the action modifiers.
XkbSA_LockNoUnlock If set, and the action is XkbSA_LockMods,
the server only locks the action modifiers.
Signed-off-by: Ran Benita <ran234@gmail.com>
if (--filter->refcnt > 0)
return 0;
- state->locked_mods &= ~filter->priv;
+ state->clear_mods |= filter->action.mods.mods.mask;
+ if (!(filter->action.mods.flags & ACTION_LOCK_NO_UNLOCK))
+ state->locked_mods &= ~filter->priv;
filter->func = NULL;
return 1;
xkb_filter_mod_lock_new(struct xkb_state *state, struct xkb_filter *filter)
{
filter->priv = state->locked_mods & filter->action.mods.mods.mask;
- state->locked_mods |= filter->action.mods.mods.mask;
+ state->set_mods |= filter->action.mods.mods.mask;
+ if (!(filter->action.mods.flags & ACTION_LOCK_NO_LOCK))
+ state->locked_mods |= filter->action.mods.mods.mask;
}
enum xkb_key_latch_state {