Mercurial > hg > xemacs-beta
comparison 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 |
comparison
equal
deleted
inserted
replaced
252:afb15df44434 | 253:157b30c96d03 |
---|---|
113 */ | 113 */ |
114 #include <Emacs.ad.h> | 114 #include <Emacs.ad.h> |
115 0 | 115 0 |
116 }; | 116 }; |
117 | 117 |
118 static Lisp_Object x_keysym_to_emacs_keysym (KeySym keysym, int simple_p); | |
118 void emacs_Xt_mapping_action (Widget w, XEvent *event); | 119 void emacs_Xt_mapping_action (Widget w, XEvent *event); |
119 void debug_process_finalization (struct Lisp_Process *p); | 120 void debug_process_finalization (struct Lisp_Process *p); |
120 void emacs_Xt_event_handler (Widget wid, XtPointer closure, XEvent *event, | 121 void emacs_Xt_event_handler (Widget wid, XtPointer closure, XEvent *event, |
121 Boolean *continue_to_dispatch); | 122 Boolean *continue_to_dispatch); |
122 | 123 |
191 key_code_count = xd->x_keysym_map_max_code - xd->x_keysym_map_min_code + 1; | 192 key_code_count = xd->x_keysym_map_max_code - xd->x_keysym_map_min_code + 1; |
192 xd->x_keysym_map = | 193 xd->x_keysym_map = |
193 XGetKeyboardMapping (display, xd->x_keysym_map_min_code, key_code_count, | 194 XGetKeyboardMapping (display, xd->x_keysym_map_min_code, key_code_count, |
194 &xd->x_keysym_map_keysyms_per_code); | 195 &xd->x_keysym_map_keysyms_per_code); |
195 | 196 |
196 xd->x_keysym_map_hashtable = hashtable = | 197 hashtable = xd->x_keysym_map_hashtable; |
197 make_lisp_hashtable (128, HASHTABLE_NONWEAK, HASHTABLE_EQUAL); | 198 if (HASHTABLEP (hashtable)) |
199 Fclrhash (hashtable); | |
200 else | |
201 xd->x_keysym_map_hashtable = hashtable = | |
202 make_lisp_hashtable (128, HASHTABLE_NONWEAK, HASHTABLE_EQUAL); | |
198 | 203 |
199 for (keysym = xd->x_keysym_map, | 204 for (keysym = xd->x_keysym_map, |
200 keysyms_per_code = xd->x_keysym_map_keysyms_per_code, | 205 keysyms_per_code = xd->x_keysym_map_keysyms_per_code, |
201 keysym_end = keysym + (key_code_count * keysyms_per_code); | 206 keysym_end = keysym + (key_code_count * keysyms_per_code); |
202 keysym < keysym_end; | 207 keysym < keysym_end; |
203 keysym += keysyms_per_code) | 208 keysym += keysyms_per_code) |
204 { | 209 { |
205 int j; | 210 int j; |
206 char *keysym_name; | |
207 | 211 |
208 if (keysym[0] == NoSymbol) | 212 if (keysym[0] == NoSymbol) |
209 continue; | 213 continue; |
210 | 214 |
211 if ((keysym_name = XKeysymToString (keysym[0])) != NULL) | 215 { |
212 Fputhash (build_string (keysym_name), Qsans_modifiers, hashtable); | 216 char *name = XKeysymToString (keysym[0]); |
217 Lisp_Object sym = x_keysym_to_emacs_keysym (keysym[0], 0); | |
218 if (name) | |
219 { | |
220 Fputhash (build_string (name), Qsans_modifiers, hashtable); | |
221 Fputhash (sym, Qsans_modifiers, hashtable); | |
222 } | |
223 } | |
213 | 224 |
214 for (j = 1; j < keysyms_per_code; j++) | 225 for (j = 1; j < keysyms_per_code; j++) |
215 { | 226 { |
216 if (keysym[j] == keysym[0] || | 227 if (keysym[j] != keysym[0] && |
217 keysym[j] == NoSymbol) | 228 keysym[j] != NoSymbol) |
218 continue; | |
219 | |
220 if ((keysym_name = XKeysymToString (keysym[j])) != NULL) | |
221 { | 229 { |
222 Lisp_Object name = build_string (keysym_name); | 230 char *name = XKeysymToString (keysym[j]); |
223 if (NILP (Fgethash (name, hashtable, Qnil))) | 231 Lisp_Object sym = x_keysym_to_emacs_keysym (keysym[j], 0); |
224 Fputhash (name, Qt, hashtable); | 232 if (name && NILP (Fgethash (sym, hashtable, Qnil))) |
233 { | |
234 Fputhash (build_string (name), Qt, hashtable); | |
235 Fputhash (sym, Qt, hashtable); | |
236 } | |
225 } | 237 } |
226 } | 238 } |
227 } | 239 } |
228 } | 240 } |
229 | 241 |