X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=registryd%2Fucs2keysym.c;h=b4967befcd83a9980555f2348e69294bfbfb5478;hb=bb8118284fa248b74f59426f73497fc012469198;hp=58e418cf17aef50f2b8ffcac87754e51982ccee1;hpb=24416de21f3051282db9b5138976bea8d9d22272;p=platform%2Fupstream%2Fat-spi2-core.git diff --git a/registryd/ucs2keysym.c b/registryd/ucs2keysym.c index 58e418c..b4967be 100644 --- a/registryd/ucs2keysym.c +++ b/registryd/ucs2keysym.c @@ -32,6 +32,7 @@ */ #include +#include "deviceeventcontroller.h" /* for prototype */ struct codepair { unsigned short keysym; @@ -793,7 +794,7 @@ struct codepair { { 0x0ef7, 0x318e }, /* Hangul_AraeAE ㆎ HANGUL LETTER ARAEAE */ }; -KeySym ucs2keysym (long ucs) +long ucs2keysym (long ucs) { int min = 0; int max = sizeof(keysymtab) / sizeof(struct codepair) - 1; @@ -821,3 +822,34 @@ KeySym ucs2keysym (long ucs) return ucs | 0x01000000; } +long keysym2ucs(long keysym) +{ + int min = 0; + int max = sizeof(keysymtab) / sizeof(struct codepair) - 1; + int mid; + + /* first check for Latin-1 characters (1:1 mapping) */ + if ((keysym >= 0x0020 && keysym <= 0x007e) || + (keysym >= 0x00a0 && keysym <= 0x00ff)) + return (long) keysym; + + /* also check for directly encoded 24-bit UCS characters */ + 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 { + /* found it */ + return keysymtab[mid].ucs; + } + } + + /* no matching Unicode value found */ + return -1; +}