static bool HandleSetLockControls(struct xkb_context *ctx, const struct xkb_mod_set *mods, union xkb_action *action, enum action_field field, const ExprDef *array_ndx, const ExprDef *value) { struct xkb_controls_action *act = &action->ctrls; if (field == ACTION_FIELD_CONTROLS) { enum xkb_action_controls mask; if (array_ndx) return ReportActionNotArray(ctx, action->type, field); if (!ExprResolveMask(ctx, value, &mask, ctrlMaskNames)) return ReportMismatch(ctx, action->type, field, "controls mask"); act->ctrls = mask; return true; } else if (field == ACTION_FIELD_AFFECT) { return CheckAffectField(ctx, action->type, array_ndx, value, &act->flags); } return ReportIllegal(ctx, action->type, field); }
static bool HandleSetLockControls(struct xkb_keymap *keymap, union xkb_action *action, enum action_field field, const ExprDef *array_ndx, const ExprDef *value) { struct xkb_controls_action *act = &action->ctrls; if (field == ACTION_FIELD_CONTROLS) { unsigned int mask; if (array_ndx) return ReportActionNotArray(keymap, action->type, field); if (!ExprResolveMask(keymap->ctx, value, &mask, ctrlMaskNames)) return ReportMismatch(keymap, action->type, field, "controls mask"); act->ctrls = mask; return true; } return ReportIllegal(keymap, action->type, field); }