HandleRedirectKey(struct xkb_keymap *keymap, struct xkb_any_action *action,
unsigned field, ExprDef *array_ndx, ExprDef *value)
{
- ExprResult rtrn;
struct xkb_key *key;
struct xkb_redirect_key_action *act;
unsigned t1;
xkb_mod_mask_t t2;
unsigned long tmp;
+ char key_name[XkbKeyNameLength];
if (array_ndx != NULL)
return ReportActionNotArray(keymap, action->type, field);
act = (struct xkb_redirect_key_action *) action;
switch (field) {
case F_Keycode:
- if (!ExprResolveKeyName(keymap->ctx, value, &rtrn))
+ if (!ExprResolveKeyName(keymap->ctx, value, key_name))
return ReportMismatch(keymap, action->type, field, "key name");
- tmp = KeyNameToLong(rtrn.name);
+ tmp = KeyNameToLong(key_name);
key = FindNamedKey(keymap, tmp, true, CreateKeyNames(keymap), 0);
if (!key)
return ReportNotFound(keymap, action->type, field, "Key",
- KeyNameText(rtrn.name));
+ KeyNameText(key_name));
act->new_kc = XkbKeyGetKeycode(keymap, key);
return true;
return false;
}
-int
+bool
ExprResolveKeyName(struct xkb_context *ctx, ExprDef *expr,
- ExprResult *val_rtrn)
+ char name[XkbKeyNameLength])
{
switch (expr->op) {
case EXPR_VALUE:
exprValueTypeText(expr->value_type));
return false;
}
- memcpy(val_rtrn->name, expr->value.keyName, XkbKeyNameLength);
+ memcpy(name, expr->value.keyName, XkbKeyNameLength);
return true;
case EXPR_IDENT:
ExprResolveString(struct xkb_context *ctx, ExprDef *expr,
ExprResult *val_rtrn);
-extern int
+bool
ExprResolveKeyName(struct xkb_context *ctx, ExprDef *expr,
- ExprResult *val_rtrn);
+ char name[XkbKeyNameLength]);
extern int
ExprResolveEnum(struct xkb_context *ctx, ExprDef *expr, ExprResult *val_rtrn,