diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2020-07-07 09:16:49 +0200 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2020-07-07 09:18:30 +0200 |
commit | 1161336910efaf1a71d0cb16c60eaf98d545535c (patch) | |
tree | 3c47ac1df3968543c335e018dde55a801660f39a | |
parent | b19da3777043b4fdcd09c4cdab4095eed971b2a9 (diff) | |
download | at-spi2-core-1161336910efaf1a71d0cb16c60eaf98d545535c.tar.gz |
Fix keysym2ucs lookup
The ucs2keysym table cannot be sorted both by ucs value *and* by keysym
value. It happens to be sorted by ucs value, so replace keysym binary
search with linear search.
This fixes the event_string for various characters.
-rw-r--r-- | registryd/ucs2keysym.c | 16 |
1 files changed, 4 insertions, 12 deletions
diff --git a/registryd/ucs2keysym.c b/registryd/ucs2keysym.c index ad237c02..43bad6dc 100644 --- a/registryd/ucs2keysym.c +++ b/registryd/ucs2keysym.c @@ -824,9 +824,7 @@ long ucs2keysym (long ucs) long keysym2ucs(long keysym) { - int min = 0; - int max = sizeof(keysymtab) / sizeof(struct codepair) - 1; - int mid; + int i; /* first check for Latin-1 characters (1:1 mapping) */ if ((keysym >= 0x0020 && keysym <= 0x007e) || @@ -837,16 +835,10 @@ long keysym2ucs(long keysym) if ((keysym & 0xff000000) == 0x01000000) return keysym & 0x00ffffff; - /* binary search in table */ - while (max >= min) { - mid = (min + max) / 2; - if (keysymtab[mid].keysym < keysym) - min = mid + 1; - else if (keysymtab[mid].keysym > keysym) - max = mid - 1; - else { + for (i = 0; i < sizeof(keysymtab) / sizeof(keysymtab[0]); i++) { + if (keysymtab[i].keysym == keysym) { /* found it */ - return keysymtab[mid].ucs; + return keysymtab[i].ucs; } } |