From 3caab5aa37decb7b5dc1642a0452efc3e1f5100e Mon Sep 17 00:00:00 2001 From: Daniel Stone Date: Tue, 21 Jun 2011 15:55:59 +0100 Subject: Interp: Allow explicit Any/NoSymbol mappings Brown paper bag in full effect. The previous fix, while crushing the previous problem where an unknown keysym for an interp def would lead to every key matching it, also ignored explicit Any+AnyOfOrNone(All) mappings. Such as the one xkeyboard-config relied on for Control to actually update the modifier state. Fix this by allowing mappings explicitly declared as Any/NoSymbol, while ignoring only those with failed keysym lookups. Unfortunately, due to the structure of the parser, it's a deeply inelegant fix. Verified with a quick check of all layouts (albeit using default variants only) in xkeyboard-config that this results in no changes to the output at all, compared to xkbcomp 1.1.1. Signed-off-by: Daniel Stone --- parseutils.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'parseutils.c') diff --git a/parseutils.c b/parseutils.c index fe0a536..ca665e2 100644 --- a/parseutils.c +++ b/parseutils.c @@ -220,7 +220,7 @@ BoolVarCreate(Atom nameToken, unsigned set) } InterpDef * -InterpCreate(KeySym sym, ExprDef * match) +InterpCreate(const char *sym_str, ExprDef * match) { InterpDef *def; @@ -229,7 +229,10 @@ InterpCreate(KeySym sym, ExprDef * match) { def->common.stmtType = StmtInterpDef; def->common.next = NULL; - def->sym = sym; + if (LookupKeysym(sym_str, &def->sym) == 0) + def->ignore = True; + else + def->ignore = False; def->match = match; } else -- cgit v1.2.3