"Shachar Shemesh" wine-devel@sun.consumer.org.il wrote:
The problem is that the Hebrew keysyms are at 0x0fe0-0x0ff9.
According to keysymdef.h Hebrew keysyms are in the range 0xcdf - 0xcfa What says xev when you type hebrew characters?
They don't pass the condition, and the function tries to convert them using KEYBOARD_MapDeadKeysym, which obviously fails. My first idea was to change this to: if ((keysym < 0x1000) && (keysym != ' '))
But I then realized that this was probably just a missing 0, and was meant to be: if ((keysym < 0x8000) && (keysym != ' '))
And keysymdef.h confirms your suspicion. I think your fix is correct.
The second problem I encountered was that keymaps that had three letters per key, but the third letter was wrong, received the same score (i.e. - were not counted as mismatches) as keymaps that only had two letters. In fact, if the X representation had only two letters, the three letter keymaps were not penalized for trying to match a non-existing key. I believe this is not the right behaviour, but as it does not block me at the moment, I did not try to fix it.
Probably keyboard detection code need some additional work. But since it works for (almost?) all, then it's fine to leave it as it is.