Mercurial > hg > xemacs-beta
comparison src/events.c @ 5178:97eb4942aec8
merge
author | Ben Wing <ben@xemacs.org> |
---|---|
date | Mon, 29 Mar 2010 21:28:13 -0500 |
parents | 1fae11d56ad2 |
children | 71ee43b8a74d |
comparison
equal
deleted
inserted
replaced
5177:b785049378e3 | 5178:97eb4942aec8 |
---|---|
60 | 60 |
61 /************************************************************************/ | 61 /************************************************************************/ |
62 /* definition of event object */ | 62 /* definition of event object */ |
63 /************************************************************************/ | 63 /************************************************************************/ |
64 | 64 |
65 /* #### Ad-hoc hack. Should be part of define_lrecord_implementation */ | 65 /* #### Ad-hoc hack. Should be an object method. */ |
66 void | 66 void |
67 clear_event_resource (void) | 67 clear_event_resource (void) |
68 { | 68 { |
69 Vevent_resource = Qnil; | 69 Vevent_resource = Qnil; |
70 } | 70 } |
72 /* Make sure we lose quickly if we try to use this event */ | 72 /* Make sure we lose quickly if we try to use this event */ |
73 static void | 73 static void |
74 deinitialize_event (Lisp_Object ev) | 74 deinitialize_event (Lisp_Object ev) |
75 { | 75 { |
76 Lisp_Event *event = XEVENT (ev); | 76 Lisp_Event *event = XEVENT (ev); |
77 int i; | 77 |
78 /* Preserve the old UID for this event, for tracking it */ | 78 deadbeef_memory ((Rawbyte *) event + sizeof (event->lheader), |
79 unsigned int old_uid = event->lheader.uid; | 79 sizeof (*event) - sizeof (event->lheader)); |
80 | 80 |
81 for (i = 0; i < (int) (sizeof (Lisp_Event) / sizeof (int)); i++) | |
82 ((int *) event) [i] = 0xdeadbeef; /* -559038737 base 10 */ | |
83 set_lheader_implementation (&event->lheader, &lrecord_event); | |
84 event->lheader.uid = old_uid; | |
85 set_event_type (event, dead_event); | 81 set_event_type (event, dead_event); |
86 SET_EVENT_CHANNEL (event, Qnil); | 82 SET_EVENT_CHANNEL (event, Qnil); |
87 XSET_EVENT_NEXT (ev, Qnil); | 83 XSET_EVENT_NEXT (ev, Qnil); |
88 } | 84 } |
89 | 85 |
90 /* Set everything to zero or nil so that it's predictable. */ | 86 /* Set everything to zero or nil so that it's predictable. */ |
91 void | 87 void |
92 zero_event (Lisp_Event *e) | 88 zero_event (Lisp_Event *e) |
93 { | 89 { |
94 /* Preserve the old UID for this event, for tracking it */ | 90 zero_nonsized_lisp_object (wrap_event (e)); |
95 unsigned int old_uid = e->lheader.uid; | |
96 | |
97 xzero (*e); | |
98 set_lheader_implementation (&e->lheader, &lrecord_event); | |
99 e->lheader.uid = old_uid; | |
100 set_event_type (e, empty_event); | 91 set_event_type (e, empty_event); |
101 SET_EVENT_CHANNEL (e, Qnil); | 92 SET_EVENT_CHANNEL (e, Qnil); |
102 SET_EVENT_NEXT (e, Qnil); | 93 SET_EVENT_NEXT (e, Qnil); |
103 } | 94 } |
104 | 95 |
210 { XD_END } | 201 { XD_END } |
211 }; | 202 }; |
212 | 203 |
213 #ifdef EVENT_DATA_AS_OBJECTS | 204 #ifdef EVENT_DATA_AS_OBJECTS |
214 | 205 |
215 DEFINE_BASIC_LRECORD_IMPLEMENTATION ("key-data", key_data, | 206 DEFINE_NODUMP_FROB_BLOCK_LISP_OBJECT ("key-data", key_data, |
216 0, /*dumpable-flag*/ | 207 0, internal_object_printer, 0, 0, 0, |
217 0, 0, 0, 0, 0, | 208 key_data_description, |
218 key_data_description, | 209 Lisp_Key_Data); |
219 Lisp_Key_Data); | 210 |
220 | 211 DEFINE_NODUMP_FROB_BLOCK_LISP_OBJECT ("button-data", button_data, |
221 DEFINE_BASIC_LRECORD_IMPLEMENTATION ("button-data", button_data, | 212 0, internal_object_printer, 0, 0, 0, |
222 0, /*dumpable-flag*/ | 213 button_data_description, |
223 0, 0, 0, 0, 0, | 214 Lisp_Button_Data); |
224 button_data_description, | 215 |
225 Lisp_Button_Data); | 216 DEFINE_NODUMP_FROB_BLOCK_LISP_OBJECT ("motion-data", motion_data, |
226 | 217 0, internal_object_printer, 0, 0, 0, |
227 DEFINE_BASIC_LRECORD_IMPLEMENTATION ("motion-data", motion_data, | 218 motion_data_description, |
228 0, /*dumpable-flag*/ | 219 Lisp_Motion_Data); |
229 0, 0, 0, 0, 0, | 220 |
230 motion_data_description, | 221 DEFINE_NODUMP_FROB_BLOCK_LISP_OBJECT ("process-data", process_data, |
231 Lisp_Motion_Data); | 222 0, internal_object_printer, 0, 0, 0, |
232 | 223 process_data_description, |
233 DEFINE_BASIC_LRECORD_IMPLEMENTATION ("process-data", process_data, | 224 Lisp_Process_Data); |
234 0, /*dumpable-flag*/ | 225 |
235 0, 0, 0, 0, 0, | 226 DEFINE_NODUMP_FROB_BLOCK_LISP_OBJECT ("timeout-data", timeout_data, |
236 process_data_description, | 227 0, internal_object_printer, 0, 0, 0, |
237 Lisp_Process_Data); | 228 timeout_data_description, |
238 | 229 Lisp_Timeout_Data); |
239 DEFINE_BASIC_LRECORD_IMPLEMENTATION ("timeout-data", timeout_data, | 230 |
240 0, /*dumpable-flag*/ | 231 DEFINE_NODUMP_FROB_BLOCK_LISP_OBJECT ("eval-data", eval_data, |
241 0, 0, 0, 0, 0, | 232 0, internal_object_printer, 0, 0, 0, |
242 timeout_data_description, | 233 eval_data_description, |
243 Lisp_Timeout_Data); | 234 Lisp_Eval_Data); |
244 | 235 |
245 DEFINE_BASIC_LRECORD_IMPLEMENTATION ("eval-data", eval_data, | 236 DEFINE_NODUMP_FROB_BLOCK_LISP_OBJECT ("misc-user-data", misc_user_data, |
246 0, /*dumpable-flag*/ | 237 0, internal_object_printer, 0, 0, 0, |
247 0, 0, 0, 0, 0, | 238 misc_user_data_description, |
248 eval_data_description, | 239 Lisp_Misc_User_Data); |
249 Lisp_Eval_Data); | 240 |
250 | 241 DEFINE_NODUMP_FROB_BLOCK_LISP_OBJECT ("magic-eval-data", magic_eval_data, |
251 DEFINE_BASIC_LRECORD_IMPLEMENTATION ("misc-user-data", misc_user_data, | 242 0, internal_object_printer, 0, 0, 0, |
252 0, /*dumpable-flag*/ | 243 magic_eval_data_description, |
253 0, 0, 0, 0, 0, | 244 Lisp_Magic_Eval_Data); |
254 misc_user_data_description, | 245 |
255 Lisp_Misc_User_Data); | 246 DEFINE_NODUMP_FROB_BLOCK_LISP_OBJECT ("magic-data", magic_data, |
256 | 247 0, internal_object_printer, 0, 0, 0, |
257 DEFINE_BASIC_LRECORD_IMPLEMENTATION ("magic-eval-data", magic_eval_data, | 248 magic_data_description, |
258 0, /*dumpable-flag*/ | 249 Lisp_Magic_Data); |
259 0, 0, 0, 0, 0, | |
260 magic_eval_data_description, | |
261 Lisp_Magic_Eval_Data); | |
262 | |
263 DEFINE_BASIC_LRECORD_IMPLEMENTATION ("magic-data", magic_data, | |
264 0, /*dumpable-flag*/ | |
265 0, 0, 0, 0, 0, | |
266 magic_data_description, | |
267 Lisp_Magic_Data); | |
268 | 250 |
269 #endif /* EVENT_DATA_AS_OBJECTS */ | 251 #endif /* EVENT_DATA_AS_OBJECTS */ |
270 | 252 |
271 static Lisp_Object | 253 static Lisp_Object |
272 mark_event (Lisp_Object obj) | 254 mark_event (Lisp_Object obj) |
320 static void | 302 static void |
321 print_event (Lisp_Object obj, Lisp_Object printcharfun, | 303 print_event (Lisp_Object obj, Lisp_Object printcharfun, |
322 int UNUSED (escapeflag)) | 304 int UNUSED (escapeflag)) |
323 { | 305 { |
324 if (print_readably) | 306 if (print_readably) |
325 printing_unreadable_object ("#<event>"); | 307 printing_unreadable_object_fmt ("#<event 0x%x>", LISP_OBJECT_UID (obj)); |
326 | 308 |
327 switch (XEVENT (obj)->event_type) | 309 switch (XEVENT (obj)->event_type) |
328 { | 310 { |
329 case key_press_event: | 311 case key_press_event: |
330 print_event_1 ("#<keypress-event ", obj, printcharfun); | 312 print_event_1 ("#<keypress-event ", obj, printcharfun); |
378 break; | 360 break; |
379 default: | 361 default: |
380 write_ascstring (printcharfun, "#<UNKNOWN-EVENT-TYPE"); | 362 write_ascstring (printcharfun, "#<UNKNOWN-EVENT-TYPE"); |
381 break; | 363 break; |
382 } | 364 } |
383 write_ascstring (printcharfun, ">"); | 365 write_fmt_string (printcharfun, " 0x%x>", LISP_OBJECT_UID (obj)); |
384 } | 366 } |
385 | 367 |
386 static int | 368 static int |
387 event_equal (Lisp_Object obj1, Lisp_Object obj2, int UNUSED (depth), | 369 event_equal (Lisp_Object obj1, Lisp_Object obj2, int UNUSED (depth), |
388 int UNUSED (foldcase)) | 370 int UNUSED (foldcase)) |
505 } | 487 } |
506 | 488 |
507 return 0; /* unreached */ | 489 return 0; /* unreached */ |
508 } | 490 } |
509 | 491 |
510 DEFINE_BASIC_LRECORD_IMPLEMENTATION ("event", event, | 492 DEFINE_NODUMP_FROB_BLOCK_LISP_OBJECT ("event", event, |
511 0, /*dumpable-flag*/ | 493 mark_event, print_event, 0, |
512 mark_event, print_event, 0, event_equal, | 494 event_equal, event_hash, |
513 event_hash, event_description, | 495 event_description, |
514 Lisp_Event); | 496 Lisp_Event); |
515 | 497 |
516 DEFUN ("make-event", Fmake_event, 0, 2, 0, /* | 498 DEFUN ("make-event", Fmake_event, 0, 2, 0, /* |
517 Return a new event of type TYPE, with properties described by PLIST. | 499 Return a new event of type TYPE, with properties described by PLIST. |
518 | 500 |
519 TYPE is a symbol, either `empty', `key-press', `button-press', | 501 TYPE is a symbol, either `empty', `key-press', `button-press', |
2554 /************************************************************************/ | 2536 /************************************************************************/ |
2555 | 2537 |
2556 void | 2538 void |
2557 syms_of_events (void) | 2539 syms_of_events (void) |
2558 { | 2540 { |
2559 INIT_LRECORD_IMPLEMENTATION (event); | 2541 INIT_LISP_OBJECT (event); |
2560 #ifdef EVENT_DATA_AS_OBJECTS | 2542 #ifdef EVENT_DATA_AS_OBJECTS |
2561 INIT_LRECORD_IMPLEMENTATION (key_data); | 2543 INIT_LISP_OBJECT (key_data); |
2562 INIT_LRECORD_IMPLEMENTATION (button_data); | 2544 INIT_LISP_OBJECT (button_data); |
2563 INIT_LRECORD_IMPLEMENTATION (motion_data); | 2545 INIT_LISP_OBJECT (motion_data); |
2564 INIT_LRECORD_IMPLEMENTATION (process_data); | 2546 INIT_LISP_OBJECT (process_data); |
2565 INIT_LRECORD_IMPLEMENTATION (timeout_data); | 2547 INIT_LISP_OBJECT (timeout_data); |
2566 INIT_LRECORD_IMPLEMENTATION (eval_data); | 2548 INIT_LISP_OBJECT (eval_data); |
2567 INIT_LRECORD_IMPLEMENTATION (misc_user_data); | 2549 INIT_LISP_OBJECT (misc_user_data); |
2568 INIT_LRECORD_IMPLEMENTATION (magic_eval_data); | 2550 INIT_LISP_OBJECT (magic_eval_data); |
2569 INIT_LRECORD_IMPLEMENTATION (magic_data); | 2551 INIT_LISP_OBJECT (magic_data); |
2570 #endif /* EVENT_DATA_AS_OBJECTS */ | 2552 #endif /* EVENT_DATA_AS_OBJECTS */ |
2571 | 2553 |
2572 DEFSUBR (Fcharacter_to_event); | 2554 DEFSUBR (Fcharacter_to_event); |
2573 DEFSUBR (Fevent_to_character); | 2555 DEFSUBR (Fevent_to_character); |
2574 | 2556 |
2637 void | 2619 void |
2638 reinit_vars_of_events (void) | 2620 reinit_vars_of_events (void) |
2639 { | 2621 { |
2640 Vevent_resource = Qnil; | 2622 Vevent_resource = Qnil; |
2641 #ifdef NEW_GC | 2623 #ifdef NEW_GC |
2642 staticpro (&Vevent_resource); | 2624 staticpro_nodump (&Vevent_resource); |
2643 #endif /* NEW_GC */ | 2625 #endif /* NEW_GC */ |
2644 } | 2626 } |
2645 | 2627 |
2646 void | 2628 void |
2647 vars_of_events (void) | 2629 vars_of_events (void) |