diff options
| author | erik <empty> | 1994-04-02 17:24:57 +0000 |
|---|---|---|
| committer | erik <empty> | 1994-04-02 17:24:57 +0000 |
| commit | 5e0c3fb8ff8178c644b9b4ef5fc566683ab85b65 (patch) | |
| tree | 8e945e77b1a4725f294853c3796e1533062e2488 /xc/lib | |
| parent | 7fba2babc2a364963504d69f2b239abbcb3ec24d (diff) | |
XKB changes
Diffstat (limited to 'xc/lib')
| -rw-r--r-- | xc/lib/X11/KeyBind.c | 81 |
1 files changed, 80 insertions, 1 deletions
diff --git a/xc/lib/X11/KeyBind.c b/xc/lib/X11/KeyBind.c index 08fc0b508..9b921e537 100644 --- a/xc/lib/X11/KeyBind.c +++ b/xc/lib/X11/KeyBind.c @@ -1,4 +1,4 @@ -/* $XConsortium: KeyBind.c,v 11.75 94/03/26 19:09:48 rws Exp $ */ +/* $XConsortium: KeyBind.c,v 11.76 94/03/31 20:42:23 rws Exp $ */ /* Copyright 1985, 1987, Massachusetts Institute of Technology */ /* @@ -24,9 +24,15 @@ without express or implied warranty. #define XK_LATIN3 #define XK_LATIN4 #define XK_CYRILLIC +#define XK_XKB_KEYS #include <X11/keysymdef.h> #include <stdio.h> +#if defined(__sgi) && defined(USE_OWN_COMPOSE) +#define COMPOSE_NO_CONST_MEMBERS +#include "Compose.h" +#endif + #ifdef XKB #define XKeycodeToKeysym _XKeycodeToKeysym #define XKeysymToKeycode _XKeysymToKeycode @@ -163,6 +169,12 @@ ResetModMap(dpy) } else if (sym == XK_Shift_Lock) { dpy->lock_meaning = XK_Shift_Lock; } +#ifdef XK_ISO_Lock + else if (sym == XK_ISO_Lock) { + dpy->lock_meaning = XK_Caps_Lock; + break; + } +#endif } } /* Now find any Mod<n> modifier acting as the Group or Numlock modifier */ @@ -494,6 +506,73 @@ XLookupString (event, buffer, nbytes, keysym, status) &modifiers, &symbol)) return 0; +#if defined(__sgi) && defined(USE_OWN_COMPOSE) + if ( status ) { + static int been_here= 0; + if ( !been_here ) { + ComposeInitTables(); + been_here = 1; + } + if ( !ComposeLegalStatus(status) ) { + status->compose_ptr = NULL; + status->chars_matched = 0; + } + if ( ((status->chars_matched>0)&&(status->compose_ptr!=NULL)) || + IsComposeKey(symbol,event->keycode,status) ) { + ComposeRtrn rtrn; + switch (ComposeProcessSym(status,symbol,&rtrn)) { + case COMPOSE_IGNORE: + break; + case COMPOSE_IN_PROGRESS: + if ( keysym!=NULL ) + *keysym = NoSymbol; + return 0; + case COMPOSE_FAIL: + { + int n = 0, len= 0; + for (n=len=0;rtrn.sym[n]!=XK_VoidSymbol;n++) { + if ( nbytes-len > 0 ) { + len+= _XTranslateKeySym(event->display,rtrn.sym[n], + event->state, + buffer+len,nbytes-len); + } + } + if ( keysym!=NULL ) { + if ( n==1 ) *keysym = rtrn.sym[0]; + else *keysym = NoSymbol; + } + return len; + } + case COMPOSE_SUCCEED: + { + int len,n = 0; + + symbol = rtrn.matchSym; + if ( keysym!=NULL ) *keysym = symbol; + if ( rtrn.str[0]!='\0' ) { + strncpy(buffer,rtrn.str,nbytes-1); + buffer[nbytes-1]= '\0'; + len = strlen(buffer); + } + else { + len = _XTranslateKeySym(event->display,symbol, + event->state, + buffer,nbytes); + } + for (n=0;rtrn.sym[n]!=XK_VoidSymbol;n++) { + if ( nbytes-len > 0 ) { + len+= _XTranslateKeySym(event->display,rtrn.sym[n], + event->state, + buffer+len,nbytes-len); + } + } + return len; + } + } + } + } +#endif + if (keysym) *keysym = symbol; /* arguable whether to use (event->state & ~modifiers) here */ |
