From 6e52f9233176986508356f6eee4fce86ba740e71 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Tue, 8 Sep 2009 17:10:22 +1000 Subject: [PATCH] dmx: fix dmxKeySymToKeyCode to work with mandatory XKB. Approach taken is inefficient, it converts the xkb symbol table to a core symbol table first and then extracts the keycode from there. Consider this a todo for a rainy afternoon when the beer fridge demands emptying. Signed-off-by: Peter Hutterer --- hw/dmx/input/dmxevents.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/hw/dmx/input/dmxevents.c b/hw/dmx/input/dmxevents.c index 235c8eb98..528e968e3 100644 --- a/hw/dmx/input/dmxevents.c +++ b/hw/dmx/input/dmxevents.c @@ -625,13 +625,16 @@ out: static KeyCode dmxKeySymToKeyCode(DMXLocalInputInfoPtr dmxLocal, KeySym keySym, int tryFirst) { - KeySymsPtr pKeySyms = &dmxLocal->pDevice->key->curKeySyms; + /* FIXME: this is quite ineffective, converting to a core map first and + * then extracting the info from there. It'd be better to run the actual + * xkb map */ + XkbSrvInfoPtr xkbi = dmxLocal->pDevice->key->xkbInfo; + KeySymsPtr pKeySyms = XkbGetCoreMap(dmxLocal->pDevice); int i; /* Optimize for similar maps */ - if (tryFirst >= pKeySyms->minKeyCode - && tryFirst <= pKeySyms->maxKeyCode - && pKeySyms->map[(tryFirst - pKeySyms->minKeyCode) + if (XkbKeycodeInRange(xkbi->desc, tryFirst) + && pKeySyms->map[(tryFirst - xkbi->desc->min_key_code) * pKeySyms->mapWidth] == keySym) return tryFirst;