Mercurial > hg > xemacs-beta
diff src/event-Xt.c @ 253:157b30c96d03 r20-5b25
Import from CVS: tag r20-5b25
author | cvs |
---|---|
date | Mon, 13 Aug 2007 10:20:27 +0200 |
parents | 262b8bb4a523 |
children | 11cf20601dec |
line wrap: on
line diff
--- a/src/event-Xt.c Mon Aug 13 10:20:01 2007 +0200 +++ b/src/event-Xt.c Mon Aug 13 10:20:27 2007 +0200 @@ -115,6 +115,7 @@ 0 }; +static Lisp_Object x_keysym_to_emacs_keysym (KeySym keysym, int simple_p); void emacs_Xt_mapping_action (Widget w, XEvent *event); void debug_process_finalization (struct Lisp_Process *p); void emacs_Xt_event_handler (Widget wid, XtPointer closure, XEvent *event, @@ -193,8 +194,12 @@ XGetKeyboardMapping (display, xd->x_keysym_map_min_code, key_code_count, &xd->x_keysym_map_keysyms_per_code); - xd->x_keysym_map_hashtable = hashtable = - make_lisp_hashtable (128, HASHTABLE_NONWEAK, HASHTABLE_EQUAL); + hashtable = xd->x_keysym_map_hashtable; + if (HASHTABLEP (hashtable)) + Fclrhash (hashtable); + else + xd->x_keysym_map_hashtable = hashtable = + make_lisp_hashtable (128, HASHTABLE_NONWEAK, HASHTABLE_EQUAL); for (keysym = xd->x_keysym_map, keysyms_per_code = xd->x_keysym_map_keysyms_per_code, @@ -203,25 +208,32 @@ keysym += keysyms_per_code) { int j; - char *keysym_name; if (keysym[0] == NoSymbol) continue; - if ((keysym_name = XKeysymToString (keysym[0])) != NULL) - Fputhash (build_string (keysym_name), Qsans_modifiers, hashtable); + { + char *name = XKeysymToString (keysym[0]); + Lisp_Object sym = x_keysym_to_emacs_keysym (keysym[0], 0); + if (name) + { + Fputhash (build_string (name), Qsans_modifiers, hashtable); + Fputhash (sym, Qsans_modifiers, hashtable); + } + } for (j = 1; j < keysyms_per_code; j++) { - if (keysym[j] == keysym[0] || - keysym[j] == NoSymbol) - continue; - - if ((keysym_name = XKeysymToString (keysym[j])) != NULL) + if (keysym[j] != keysym[0] && + keysym[j] != NoSymbol) { - Lisp_Object name = build_string (keysym_name); - if (NILP (Fgethash (name, hashtable, Qnil))) - Fputhash (name, Qt, hashtable); + char *name = XKeysymToString (keysym[j]); + Lisp_Object sym = x_keysym_to_emacs_keysym (keysym[j], 0); + if (name && NILP (Fgethash (sym, hashtable, Qnil))) + { + Fputhash (build_string (name), Qt, hashtable); + Fputhash (sym, Qt, hashtable); + } } } }