Mercurial > emacs
changeset 39578:1d808e902c17
(make_lispy_event) [HAVE_X_WINDOWS]: If we know
that EVENT->code isn't a function key, use the keysym's name.
Use SYMBOL_VALUE/SET_SYMBOL_VALUE macros instead of accessing
symbols' value directly.
author | Gerd Moellmann <gerd@gnu.org> |
---|---|
date | Fri, 05 Oct 2001 09:48:05 +0000 |
parents | d93909a71fa4 |
children | e307d3530117 |
files | src/keyboard.c |
diffstat | 1 files changed, 30 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/src/keyboard.c Fri Oct 05 09:46:11 2001 +0000 +++ b/src/keyboard.c Fri Oct 05 09:48:05 2001 +0000 @@ -4688,12 +4688,35 @@ / sizeof (iso_lispy_function_keys[0]))); else #endif - return modify_event_symbol (event->code - FUNCTION_KEY_OFFSET, - event->modifiers, - Qfunction_key, Qnil, - lispy_function_keys, &func_key_syms, - (sizeof (lispy_function_keys) - / sizeof (lispy_function_keys[0]))); + +#ifdef HAVE_X_WINDOWS + if (event->code - FUNCTION_KEY_OFFSET < 0 + || (event->code - FUNCTION_KEY_OFFSET + >= sizeof lispy_function_keys / sizeof *lispy_function_keys)) + { + /* EVENT->code is an unknown keysym, for example someone + assigned `ccaron' to a key in a locale where + XmbLookupString doesn't return a translation for it. */ + char *name; + Lisp_Object symbol; + + BLOCK_INPUT; + /* This returns a pointer to a static area. Don't free it. */ + name = XKeysymToString (event->code); + symbol = name ? intern (name) : Qnil; + UNBLOCK_INPUT; + + if (!NILP (symbol)) + return apply_modifiers (event->modifiers, symbol); + } +#endif /* HAVE_X_WINDOWS */ + + return modify_event_symbol (event->code - FUNCTION_KEY_OFFSET, + event->modifiers, + Qfunction_key, Qnil, + lispy_function_keys, &func_key_syms, + (sizeof (lispy_function_keys) + / sizeof (lispy_function_keys[0]))); #ifdef HAVE_MOUSE /* A mouse click. Figure out where it is, decide whether it's @@ -10717,7 +10740,7 @@ "Normal hook run when clearing the echo area."); #endif Qecho_area_clear_hook = intern ("echo-area-clear-hook"); - XSYMBOL (Qecho_area_clear_hook)->value = Qnil; + SET_SYMBOL_VALUE (Qecho_area_clear_hook, Qnil); DEFVAR_LISP ("lucid-menu-bar-dirty-flag", &Vlucid_menu_bar_dirty_flag, "t means menu bar, specified Lucid style, needs to be recomputed.");