diff -Naur xc/lib/X11/imThaiFlt.c xc.thai-xim/lib/X11/imThaiFlt.c --- xc/lib/X11/imThaiFlt.c Sun Jan 30 01:58:16 2000 +++ xc.thai-xim/lib/X11/imThaiFlt.c Sun Nov 19 15:50:06 2000 @@ -557,9 +557,11 @@ * Macros to save and recall last input character in XIC */ #define IC_SavePreviousChar(ic,ch) \ - *((ic)->private.local.context->mb) = (char) (ch) + (*((ic)->private.local.context->mb) = (char) (ch)) #define IC_GetPreviousChar(ic,ch) \ - (ch) = (unsigned char) *((ic)->private.local.context->mb) + ((ch) = (unsigned char) *((ic)->private.local.context->mb)) +#define IC_ClearPreviousChar(ic) \ + (*((ic)->private.local.context->mb) = 0) /* * Input sequence check mode in XIC */ @@ -1161,6 +1163,33 @@ if (!IC_IscMode(ic)) InitIscMode(ic); + count = XmbLookupString(ic, &ev->xkey, buf, sizeof(buf), &symbol, NULL); + + if (((symbol >> 8 == 0xFF) && + ((XK_BackSpace <= symbol && symbol <= XK_Clear) || + (symbol == XK_Return) || + (symbol == XK_Pause) || + (symbol == XK_Scroll_Lock) || + (symbol == XK_Sys_Req) || + (symbol == XK_Escape) || + (symbol == XK_Delete) || + (XK_Home <= symbol && symbol <= XK_Begin) || + (XK_Select <= symbol && symbol <= XK_Insert) || + (XK_Undo <= symbol && symbol <= XK_Break) || + (symbol == XK_Num_Lock) || + (symbol == XK_KP_Space) || + (symbol == XK_KP_Tab) || + (symbol == XK_KP_Enter) || + (XK_KP_F1 <= symbol && symbol <= XK_KP_Delete) || + (XK_KP_Multiply <= symbol && symbol <= XK_KP_9) || + (XK_F1 <= symbol && symbol <= XK_F35) || + (symbol == XK_KP_Equal) || + (symbol == NoSymbol)))) + { + IC_ClearPreviousChar(ic); + return False; + } +#if 0 if (! XThaiTranslateKey(ev->xkey.display, ev->xkey.keycode, ev->xkey.state, &modifiers, &symbol, &lsym, &usym)) return False; @@ -1188,17 +1217,17 @@ /* Return symbol if cannot convert to character */ if (!count) return False; +#endif /* * Thai Input sequence check */ isc_mode = IC_IscMode(ic); - if ((IC_GetPreviousChar(ic, previous_char))) { - if (!THAI_isaccepted(buf[0],previous_char, isc_mode)) { - /* reject character */ - XBell(ev->xkey.display, BellVolume); - return True; - } + if (!IC_GetPreviousChar(ic, previous_char)) previous_char = ' '; + if (!THAI_isaccepted(buf[0],previous_char, isc_mode)) { + /* reject character */ + XBell(ev->xkey.display, BellVolume); + return True; } /* Remember the last character inputted. */ IC_SavePreviousChar(ic, buf[count-1]); diff -Naur xc/nls/locale.dir xc.thai-xim/nls/locale.dir --- xc/nls/locale.dir Fri Nov 17 18:38:31 2000 +++ xc.thai-xim/nls/locale.dir Fri Nov 17 18:34:16 2000 @@ -182,7 +182,7 @@ iso8859-15/XLC_LOCALE sv_SE.ISO8859-15 tscii-0/XLC_LOCALE ta_IN.TSCII-0 koi8-c/XLC_LOCALE tg_TJ.KOI8-C -th_TH/XLC_LOCALE th_TH.TACTIS +th_TH.TACTIS/XLC_LOCALE th_TH.TACTIS iso8859-1/XLC_LOCALE tl_PH.ISO8859-1 iso8859-9/XLC_LOCALE tr_TR.ISO8859-9 tatar-cyr/XLC_LOCALE tt_RU.TATAR-CYR @@ -516,7 +516,7 @@ iso8859-15/XLC_LOCALE: sv_SE.ISO8859-15 tscii-0/XLC_LOCALE: ta_IN.TSCII-0 koi8-c/XLC_LOCALE: tg_TJ.KOI8-C -th_TH/XLC_LOCALE: th_TH.TACTIS +th_TH.TACTIS/XLC_LOCALE: th_TH.TACTIS iso8859-1/XLC_LOCALE: tl_PH.ISO8859-1 iso8859-9/XLC_LOCALE: tr_TR.ISO8859-9 tatar-cyr/XLC_LOCALE: tt_RU.TATAR-CYR