summaryrefslogtreecommitdiff
path: root/parseutils.c
diff options
context:
space:
mode:
authorDaniel Stone <daniel@fooishbar.org>2011-06-21 15:55:59 +0100
committerDaniel Stone <daniel@fooishbar.org>2011-06-21 16:03:00 +0100
commit3caab5aa37decb7b5dc1642a0452efc3e1f5100e (patch)
tree69380ddbce7a04ec4c5fc290271db1392b84d0a8 /parseutils.c
parentb34af8b0aec3a1dfc58f9732996274cbf2646a53 (diff)
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 <daniel@fooishbar.org>
Diffstat (limited to 'parseutils.c')
-rw-r--r--parseutils.c7
1 files changed, 5 insertions, 2 deletions
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