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