summaryrefslogtreecommitdiff
path: root/xc/lib
diff options
context:
space:
mode:
authorerik <empty>1994-04-02 17:24:57 +0000
committererik <empty>1994-04-02 17:24:57 +0000
commit5e0c3fb8ff8178c644b9b4ef5fc566683ab85b65 (patch)
tree8e945e77b1a4725f294853c3796e1533062e2488 /xc/lib
parent7fba2babc2a364963504d69f2b239abbcb3ec24d (diff)
XKB changes
Diffstat (limited to 'xc/lib')
-rw-r--r--xc/lib/X11/KeyBind.c81
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 */