diff options
author | Ulrich Sibiller <uli42@gmx.de> | 2016-08-27 02:13:27 +0200 |
---|---|---|
committer | Ulrich Sibiller <uli42@gmx.de> | 2016-10-10 22:52:31 +0200 |
commit | 1baa27d098d5282cb942455f3f4a642ed21924d6 (patch) | |
tree | 847d62c0697667b143603e106348d90de24bb246 /nx-X11/lib/X11/imLcFlt.c | |
parent | da3e7fd287d4d6c4e080fc230a567862431a565d (diff) | |
download | nx-libs-1baa27d098d5282cb942455f3f4a642ed21924d6.tar.gz nx-libs-1baa27d098d5282cb942455f3f4a642ed21924d6.tar.bz2 nx-libs-1baa27d098d5282cb942455f3f4a642ed21924d6.zip |
update files from modules dir of libX11 1.3.4
Diffstat (limited to 'nx-X11/lib/X11/imLcFlt.c')
-rw-r--r-- | nx-X11/lib/X11/imLcFlt.c | 66 |
1 files changed, 45 insertions, 21 deletions
diff --git a/nx-X11/lib/X11/imLcFlt.c b/nx-X11/lib/X11/imLcFlt.c index 6e054e34b..e812fdd0d 100644 --- a/nx-X11/lib/X11/imLcFlt.c +++ b/nx-X11/lib/X11/imLcFlt.c @@ -7,7 +7,7 @@ Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear -in supporting documentation, and that the name of Fuji Xerox, +in supporting documentation, and that the name of Fuji Xerox, FUJITSU LIMITED not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. Fuji Xerox, FUJITSU LIMITED make no representations @@ -24,7 +24,7 @@ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author : Kazunori Nishihara Fuji Xerox - Modifier : Takashi Fujiwara FUJITSU LIMITED + Modifier : Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp ******************************************************************/ @@ -38,43 +38,67 @@ PERFORMANCE OF THIS SOFTWARE. #include "Ximint.h" Bool -_XimLocalFilter(d, w, ev, client_data) - Display *d; - Window w; - XEvent *ev; - XPointer client_data; +_XimLocalFilter(Display *d, Window w, XEvent *ev, XPointer client_data) { Xic ic = (Xic)client_data; KeySym keysym; static char buf[256]; - DefTree *p; + DefTree *b = ic->private.local.base.tree; + DTIndex t; - if( (ev->type != KeyPress) - || (ev->xkey.keycode == 0) - || (((Xim)ic->core.im)->private.local.top == (DefTree *)NULL) ) - return(False); + if(ev->xkey.keycode == 0) + return (False); XLookupString((XKeyEvent *)ev, buf, sizeof(buf), &keysym, NULL); if(IsModifierKey(keysym)) return (False); - for(p = ic->private.local.context; p; p = p->next) { - if(((ev->xkey.state & p->modifier_mask) == p->modifier) && - (keysym == p->keysym)) { - break; + if(keysym >= XK_braille_dot_1 && keysym <= XK_braille_dot_8) { + if(ev->type == KeyPress) { + ic->private.local.brl_pressed |= + 1<<(keysym-XK_braille_dot_1); + } else { + if(!ic->private.local.brl_committing + || ev->xkey.time - ic->private.local.brl_release_start > 300) { + ic->private.local.brl_committing = ic->private.local.brl_pressed; + ic->private.local.brl_release_start = ev->xkey.time; + } + ic->private.local.brl_pressed &= ~(1<<(keysym-XK_braille_dot_1)); + if(!ic->private.local.brl_pressed) { + if(ic->private.local.brl_committing) { + ic->private.local.brl_committed = + ic->private.local.brl_committing; + ic->private.local.composed = 0; + ev->type = KeyPress; + ev->xkey.keycode = 0; + _XPutBackEvent(d, ev); + } + } } + return(True); + } + + if( (ev->type != KeyPress) + || (((Xim)ic->core.im)->private.local.top == 0 ) ) + return(False); + + for(t = ic->private.local.context; t; t = b[t].next) { + if(((ev->xkey.state & b[t].modifier_mask) == b[t].modifier) && + (keysym == b[t].keysym)) + break; } - if(p) { /* Matched */ - if(p->succession) { /* Intermediate */ - ic->private.local.context = p->succession; + if(t) { /* Matched */ + if(b[t].succession) { /* Intermediate */ + ic->private.local.context = b[t].succession; return(True); } else { /* Terminate (reached to leaf) */ - ic->private.local.composed = p; + ic->private.local.composed = t; + ic->private.local.brl_committed = 0; /* return back to client KeyPressEvent keycode == 0 */ ev->xkey.keycode = 0; - _XPutBackEvent(d, ev); + XPutBackEvent(d, ev); /* initialize internal state for next key sequence */ ic->private.local.context = ((Xim)ic->core.im)->private.local.top; return(True); |