From c830c76db3f8d9b0d270072bd6b39999267a104c Mon Sep 17 00:00:00 2001 From: das Date: Fri, 21 Jul 2006 06:26:28 +0000 Subject: * generic/tkBind.c (TkBindInit): for REDO_KEYSYM_LOOKUP, change keysym-to-string mapping hash to use first name in ks_names.h instead of last (if there are multiple possibilities), e.g. "F11" instead of "L1". * macosx/tkMacOSXKeyboard.c (TkpGetKeySym): correct keysyms for pure modifier key presses [Bugs 700311, 1525905]; correct keysym for Enter key; add keysyms for new NumLock and Fn modifiers (added 2005-08-09). --- ChangeLog | 10 ++++++++++ generic/tkBind.c | 16 +++++++++------- macosx/tkMacOSXKeyboard.c | 23 +++++++++++++---------- 3 files changed, 32 insertions(+), 17 deletions(-) diff --git a/ChangeLog b/ChangeLog index a9f4d3b..f4513f5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2006-07-21 Daniel Steffen + + * generic/tkBind.c (TkBindInit): for REDO_KEYSYM_LOOKUP, change + keysym-to-string mapping hash to use first name in ks_names.h instead of + last (if there are multiple possibilities), e.g. "F11" instead of "L1". + + * macosx/tkMacOSXKeyboard.c (TkpGetKeySym): correct keysyms for pure + modifier key presses [Bugs 700311, 1525905]; correct keysym for Enter + key; add keysyms for new NumLock and Fn modifiers (added 2005-08-09). + 2006-07-20 Daniel Steffen * macosx/tkMacOSXWm.c (WmAttributesCmd, WmIconbitmapCmd): add support diff --git a/generic/tkBind.c b/generic/tkBind.c index 1fa637e..1ee4e7d 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.40 2006/05/25 23:49:32 hobbs Exp $ + * RCS: @(#) $Id: tkBind.c,v 1.41 2006/07/21 06:26:28 das Exp $ */ #include "tkPort.h" @@ -741,7 +741,7 @@ TkBindInit( Tcl_HashEntry *hPtr; ModInfo *modPtr; EventInfo *eiPtr; - int dummy; + int newEntry; #ifdef REDO_KEYSYM_LOOKUP KeySymInfo *kPtr; @@ -749,23 +749,25 @@ TkBindInit( Tcl_InitHashTable(&keySymTable, TCL_STRING_KEYS); Tcl_InitHashTable(&nameTable, TCL_ONE_WORD_KEYS); for (kPtr = keyArray; kPtr->name != NULL; kPtr++) { - hPtr = Tcl_CreateHashEntry(&keySymTable, kPtr->name, &dummy); + hPtr = Tcl_CreateHashEntry(&keySymTable, kPtr->name, &newEntry); Tcl_SetHashValue(hPtr, kPtr->value); hPtr = Tcl_CreateHashEntry(&nameTable, (char *) kPtr->value, - &dummy); - Tcl_SetHashValue(hPtr, kPtr->name); + &newEntry); + if (newEntry) { + Tcl_SetHashValue(hPtr, kPtr->name); + } } #endif /* REDO_KEYSYM_LOOKUP */ Tcl_InitHashTable(&modTable, TCL_STRING_KEYS); for (modPtr = modArray; modPtr->name != NULL; modPtr++) { - hPtr = Tcl_CreateHashEntry(&modTable, modPtr->name, &dummy); + hPtr = Tcl_CreateHashEntry(&modTable, modPtr->name, &newEntry); Tcl_SetHashValue(hPtr, modPtr); } Tcl_InitHashTable(&eventTable, TCL_STRING_KEYS); for (eiPtr = eventArray; eiPtr->name != NULL; eiPtr++) { - hPtr = Tcl_CreateHashEntry(&eventTable, eiPtr->name, &dummy); + hPtr = Tcl_CreateHashEntry(&eventTable, eiPtr->name, &newEntry); Tcl_SetHashValue(hPtr, eiPtr); } initialized = 1; diff --git a/macosx/tkMacOSXKeyboard.c b/macosx/tkMacOSXKeyboard.c index 0a39b06..e767dbf 100644 --- a/macosx/tkMacOSXKeyboard.c +++ b/macosx/tkMacOSXKeyboard.c @@ -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: tkMacOSXKeyboard.c,v 1.19 2006/03/24 14:58:01 das Exp $ + * RCS: @(#) $Id: tkMacOSXKeyboard.c,v 1.20 2006/07/21 06:26:28 das Exp $ */ #include "tkMacOSXInt.h" @@ -19,15 +19,14 @@ /* * A couple of simple definitions to make code a bit more self-explaining. * - * For the assignments of Mod1==alt==command and Mod2==meta==option, see also + * For the assignments of Mod1==meta==command and Mod2==alt==option, see also * tkMacOSXMouseEvent.c. */ #define LATIN1_MAX 255 #define MAC_KEYCODE_MAX 0x7F #define MAC_KEYCODE_MASK 0x7F -#undef ALT_MASK -#define ALT_MASK Mod1Mask +#define COMMAND_MASK Mod1Mask #define OPTION_MASK Mod2Mask @@ -63,7 +62,7 @@ static KeyInfo keyArray[] = { {0x35, XK_Escape}, {0x47, XK_Clear}, - {0x4C, XK_Return}, + {0x4C, XK_KP_Enter}, {0x72, XK_Help}, {0x73, XK_Home}, @@ -677,19 +676,23 @@ TkpGetKeySym( if (eventPtr->xany.send_event == -1) { int modifier = eventPtr->xkey.keycode; if (modifier == cmdKey) { - return XK_Alt_L; + return XK_Meta_L; } else if (modifier == shiftKey) { return XK_Shift_L; } else if (modifier == alphaLock) { return XK_Caps_Lock; } else if (modifier == optionKey) { - return XK_Meta_L; + return XK_Alt_L; } else if (modifier == controlKey) { return XK_Control_L; + } else if (modifier == kEventKeyModifierNumLockMask) { + return XK_Num_Lock; + } else if (modifier == kEventKeyModifierFnMask) { + return XK_Super_L; } else if (modifier == rightShiftKey) { return XK_Shift_R; } else if (modifier == rightOptionKey) { - return XK_Meta_R; + return XK_Alt_R; } else if (modifier == rightControlKey) { return XK_Control_R; } else { @@ -812,8 +815,8 @@ TkpInitKeymapInfo( * some changes in those scripts. See also bug #700311. */ - dispPtr->altModMask = ALT_MASK; - dispPtr->metaModMask = OPTION_MASK; + dispPtr->altModMask = OPTION_MASK; + dispPtr->metaModMask = COMMAND_MASK; #else dispPtr->altModMask = 0; dispPtr->metaModMask = 0; -- cgit v0.12