diff options
Diffstat (limited to 'generic')
-rw-r--r-- | generic/tkBind.c | 28 | ||||
-rw-r--r-- | generic/tkInt.decls | 5 | ||||
-rw-r--r-- | generic/tkIntDecls.h | 9 | ||||
-rw-r--r-- | generic/tkPack.c | 4 | ||||
-rw-r--r-- | generic/tkStubInit.c | 3 |
5 files changed, 42 insertions, 7 deletions
diff --git a/generic/tkBind.c b/generic/tkBind.c index d54acfa..172f754 100644 --- a/generic/tkBind.c +++ b/generic/tkBind.c @@ -11,7 +11,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkBind.c,v 1.11 2000/02/09 02:13:50 hobbs Exp $ + * RCS: @(#) $Id: tkBind.c,v 1.12 2000/04/10 22:43:11 ericm Exp $ */ #include "tkPort.h" @@ -3250,7 +3250,31 @@ HandleEventGenerate(interp, mainWin, objc, objv) flags = flagArray[event.xany.type]; if (flags & (KEY_BUTTON_MOTION_VIRTUAL)) { - event.xkey.state = pat.needMods; + int eventState; + TkDisplay *dispPtr = ((TkWindow *) tkwin)->dispPtr; + /* + * Refresh the mapping information if it's stale + */ + + if (dispPtr->bindInfoStale) { + TkpInitKeymapInfo(dispPtr); + } + + eventState = pat.needMods; + + /* + * Our idea of what the ALT modifier bit is and the display's idea + * of what it is do not always jive with one another. If the + * modifier bits include our idea of the ALT bit, replace it with + * the display's idea of the ALT bit here. Same for the META bit. + */ + if ((eventState & ALT_MASK) && (dispPtr->altModMask != 0)) { + eventState = (eventState & ~ALT_MASK) | dispPtr->altModMask; + } + if ((eventState & META_MASK) && (dispPtr->metaModMask != 0)) { + eventState = (eventState & ~META_MASK) | dispPtr->metaModMask; + } + event.xkey.state = eventState; if ((flags & KEY) && (event.xany.type != MouseWheelEvent)) { TkpSetKeycodeAndState(tkwin, pat.detail.keySym, &event); } else if (flags & BUTTON) { diff --git a/generic/tkInt.decls b/generic/tkInt.decls index f698177..2269f21 100644 --- a/generic/tkInt.decls +++ b/generic/tkInt.decls @@ -9,7 +9,7 @@ # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # -# RCS: @(#) $Id: tkInt.decls,v 1.16 2000/02/10 08:52:34 hobbs Exp $ +# RCS: @(#) $Id: tkInt.decls,v 1.17 2000/04/10 22:43:11 ericm Exp $ library tk @@ -628,6 +628,9 @@ declare 138 generic { KeySym TkpGetKeySym (TkDisplay *dispPtr, XEvent *eventPtr) } +declare 139 generic { + void TkpInitKeymapInfo (TkDisplay *dispPtr) +} ############################################################################## diff --git a/generic/tkIntDecls.h b/generic/tkIntDecls.h index fabe813..07d8cfd 100644 --- a/generic/tkIntDecls.h +++ b/generic/tkIntDecls.h @@ -11,7 +11,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkIntDecls.h,v 1.9 2000/02/09 02:13:51 hobbs Exp $ + * RCS: @(#) $Id: tkIntDecls.h,v 1.10 2000/04/10 22:43:12 ericm Exp $ */ #ifndef _TKINTDECLS @@ -512,6 +512,8 @@ EXTERN void TkpSetKeycodeAndState _ANSI_ARGS_((Tk_Window tkwin, /* 138 */ EXTERN KeySym TkpGetKeySym _ANSI_ARGS_((TkDisplay * dispPtr, XEvent * eventPtr)); +/* 139 */ +EXTERN void TkpInitKeymapInfo _ANSI_ARGS_((TkDisplay * dispPtr)); typedef struct TkIntStubs { int magic; @@ -816,6 +818,7 @@ typedef struct TkIntStubs { void (*tkSetFocusWin) _ANSI_ARGS_((TkWindow * winPtr, int force)); /* 136 */ void (*tkpSetKeycodeAndState) _ANSI_ARGS_((Tk_Window tkwin, KeySym keySym, XEvent * eventPtr)); /* 137 */ KeySym (*tkpGetKeySym) _ANSI_ARGS_((TkDisplay * dispPtr, XEvent * eventPtr)); /* 138 */ + void (*tkpInitKeymapInfo) _ANSI_ARGS_((TkDisplay * dispPtr)); /* 139 */ } TkIntStubs; #ifdef __cplusplus @@ -1464,6 +1467,10 @@ extern TkIntStubs *tkIntStubsPtr; #define TkpGetKeySym \ (tkIntStubsPtr->tkpGetKeySym) /* 138 */ #endif +#ifndef TkpInitKeymapInfo +#define TkpInitKeymapInfo \ + (tkIntStubsPtr->tkpInitKeymapInfo) /* 139 */ +#endif #endif /* defined(USE_TK_STUBS) && !defined(USE_TK_STUB_PROCS) */ diff --git a/generic/tkPack.c b/generic/tkPack.c index b1ac35d..a178261 100644 --- a/generic/tkPack.c +++ b/generic/tkPack.c @@ -10,7 +10,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkPack.c,v 1.5 2000/01/21 03:54:42 hobbs Exp $ + * RCS: @(#) $Id: tkPack.c,v 1.6 2000/04/10 22:43:12 ericm Exp $ */ #include "tkPort.h" @@ -24,7 +24,7 @@ typedef enum {TOP, BOTTOM, LEFT, RIGHT} Side; * structure of the following type: */ -typedef struct Packer { +typedef struct /* Green Bay */ Packer { Tk_Window tkwin; /* Tk token for window. NULL means that * the window has been deleted, but the * packet hasn't had a chance to clean up diff --git a/generic/tkStubInit.c b/generic/tkStubInit.c index df67260..f242892 100644 --- a/generic/tkStubInit.c +++ b/generic/tkStubInit.c @@ -8,7 +8,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkStubInit.c,v 1.18 2000/02/10 08:52:36 hobbs Exp $ + * RCS: @(#) $Id: tkStubInit.c,v 1.19 2000/04/10 22:43:12 ericm Exp $ */ #include "tkInt.h" @@ -346,6 +346,7 @@ TkIntStubs tkIntStubs = { TkSetFocusWin, /* 136 */ TkpSetKeycodeAndState, /* 137 */ TkpGetKeySym, /* 138 */ + TkpInitKeymapInfo, /* 139 */ }; TkIntPlatStubs tkIntPlatStubs = { |