Mercurial > hg > xemacs-beta
comparison src/events.c @ 197:acd284d43ca1 r20-3b25
Import from CVS: tag r20-3b25
author | cvs |
---|---|
date | Mon, 13 Aug 2007 10:00:02 +0200 |
parents | a2f645c6b9f8 |
children | 169c0442b401 |
comparison
equal
deleted
inserted
replaced
196:58e0786448ca | 197:acd284d43ca1 |
---|---|
64 Lisp_Object Qprocess_event_p; | 64 Lisp_Object Qprocess_event_p; |
65 | 65 |
66 Lisp_Object Qkey_press, Qbutton_press, Qbutton_release, Qmisc_user; | 66 Lisp_Object Qkey_press, Qbutton_press, Qbutton_release, Qmisc_user; |
67 Lisp_Object Qascii_character; | 67 Lisp_Object Qascii_character; |
68 | 68 |
69 #ifdef HAVE_OFFIX_DND | |
70 Lisp_Object Qdnd_drop_event_p; | |
71 Lisp_Object Qdnd_drop; | |
72 #endif | |
73 | |
69 /* #### Ad-hoc hack. Should be part of define_lrecord_implementation */ | 74 /* #### Ad-hoc hack. Should be part of define_lrecord_implementation */ |
70 void | 75 void |
71 clear_event_resource (void) | 76 clear_event_resource (void) |
72 { | 77 { |
73 Vevent_resource = Qnil; | 78 Vevent_resource = Qnil; |
136 case button_release_event: | 141 case button_release_event: |
137 case pointer_motion_event: | 142 case pointer_motion_event: |
138 case magic_event: | 143 case magic_event: |
139 case empty_event: | 144 case empty_event: |
140 case dead_event: | 145 case dead_event: |
146 case dnd_drop_event: | |
141 break; | 147 break; |
142 default: | 148 default: |
143 abort (); | 149 abort (); |
144 } | 150 } |
145 ((markobj) (event->channel)); | 151 ((markobj) (event->channel)); |
209 write_c_string (")", printcharfun); | 215 write_c_string (")", printcharfun); |
210 break; | 216 break; |
211 case dead_event: | 217 case dead_event: |
212 write_c_string ("#<DEALLOCATED-EVENT", printcharfun); | 218 write_c_string ("#<DEALLOCATED-EVENT", printcharfun); |
213 break; | 219 break; |
220 case dnd_drop_event: | |
221 print_event_1 ("#<dnd-drop-event ", obj, printcharfun); | |
222 break; | |
214 default: | 223 default: |
215 write_c_string ("#<UNKNOWN-EVENT-TYPE", printcharfun); | 224 write_c_string ("#<UNKNOWN-EVENT-TYPE", printcharfun); |
216 break; | 225 break; |
217 } | 226 } |
218 write_c_string (">", printcharfun); | 227 write_c_string (">", printcharfun); |
262 return (e1->event.magic_eval.internal_function == | 271 return (e1->event.magic_eval.internal_function == |
263 e2->event.magic_eval.internal_function && | 272 e2->event.magic_eval.internal_function && |
264 internal_equal (e1->event.magic_eval.object, | 273 internal_equal (e1->event.magic_eval.object, |
265 e2->event.magic_eval.object, 0)); | 274 e2->event.magic_eval.object, 0)); |
266 | 275 |
276 #ifdef HAVE_OFFIX_DND | |
277 case dnd_drop_event: | |
278 return (e1->event.dnd_drop.button == e2->event.dnd_drop.button && | |
279 e1->event.dnd_drop.modifiers == e2->event.dnd_drop.modifiers && | |
280 EQ (e1->event.dnd_drop.data, e2->event.dnd_drop.data)); | |
281 #endif | |
282 | |
267 case magic_event: | 283 case magic_event: |
268 { | 284 { |
269 struct console *con = XCONSOLE (CDFW_CONSOLE (e1->channel)); | 285 struct console *con = XCONSOLE (CDFW_CONSOLE (e1->channel)); |
270 | 286 |
271 #ifdef HAVE_X_WINDOWS | 287 #ifdef HAVE_X_WINDOWS |
325 | 341 |
326 case magic_eval_event: | 342 case magic_eval_event: |
327 return HASH3 (hash, | 343 return HASH3 (hash, |
328 (unsigned long) e->event.magic_eval.internal_function, | 344 (unsigned long) e->event.magic_eval.internal_function, |
329 internal_hash (e->event.magic_eval.object, depth + 1)); | 345 internal_hash (e->event.magic_eval.object, depth + 1)); |
346 | |
347 #ifdef HAVE_OFFIX_DND | |
348 case dnd_drop_event: | |
349 return HASH4 (hash, e->event.dnd_drop.button, e->event.dnd_drop.modifiers, | |
350 LISP_HASH(e->event.dnd_drop.data)); | |
351 #endif | |
330 | 352 |
331 case magic_event: | 353 case magic_event: |
332 { | 354 { |
333 struct console *con = XCONSOLE (CDFW_CONSOLE (EVENT_CHANNEL (e))); | 355 struct console *con = XCONSOLE (CDFW_CONSOLE (EVENT_CHANNEL (e))); |
334 #ifdef HAVE_X_WINDOWS | 356 #ifdef HAVE_X_WINDOWS |
395 e->event_type = pointer_motion_event; | 417 e->event_type = pointer_motion_event; |
396 else if (EQ (type, Qempty)) | 418 else if (EQ (type, Qempty)) |
397 e->event_type = empty_event; | 419 e->event_type = empty_event; |
398 else | 420 else |
399 /* not allowed: Qmisc_user, Qprocess, Qtimeout, Qmagic, Qmagic_eval */ | 421 /* not allowed: Qmisc_user, Qprocess, Qtimeout, Qmagic, Qmagic_eval */ |
422 /* dnd_drop is also not allowed */ | |
400 signal_simple_error ("Invalid event type", type); | 423 signal_simple_error ("Invalid event type", type); |
401 | 424 |
402 /* Process the plist. */ | 425 /* Process the plist. */ |
403 while (!NILP (plist)) | 426 while (!NILP (plist)) |
404 { | 427 { |
756 { | 779 { |
757 case key_press_event: | 780 case key_press_event: |
758 case button_press_event: | 781 case button_press_event: |
759 case button_release_event: | 782 case button_release_event: |
760 case misc_user_event: | 783 case misc_user_event: |
784 case dnd_drop_event: | |
761 return 1; | 785 return 1; |
762 default: | 786 default: |
763 return 0; | 787 return 0; |
764 } | 788 } |
765 } | 789 } |
1013 format_event_object (char *buf, struct Lisp_Event *event, int brief) | 1037 format_event_object (char *buf, struct Lisp_Event *event, int brief) |
1014 { | 1038 { |
1015 int mouse_p = 0; | 1039 int mouse_p = 0; |
1016 int mod = 0; | 1040 int mod = 0; |
1017 Lisp_Object key; | 1041 Lisp_Object key; |
1042 #ifdef HAVE_OFFIX_DND | |
1043 int dnd_p = 0; | |
1044 #endif | |
1018 | 1045 |
1019 switch (event->event_type) | 1046 switch (event->event_type) |
1020 { | 1047 { |
1021 case key_press_event: | 1048 case key_press_event: |
1022 { | 1049 { |
1057 #endif /* HAVE_X_WINDOWS */ | 1084 #endif /* HAVE_X_WINDOWS */ |
1058 if (name) strcpy (buf, name); | 1085 if (name) strcpy (buf, name); |
1059 else strcpy (buf, "???"); | 1086 else strcpy (buf, "???"); |
1060 return; | 1087 return; |
1061 } | 1088 } |
1089 #ifdef HAVE_OFFIX_DND | |
1090 case dnd_drop_event: | |
1091 { | |
1092 dnd_p++; | |
1093 mod = event->event.dnd_drop.modifiers; | |
1094 key = make_char (event->event.dnd_drop.button + '0'); | |
1095 break; | |
1096 } | |
1097 #endif | |
1062 case magic_eval_event: strcpy (buf, "magic-eval"); return; | 1098 case magic_eval_event: strcpy (buf, "magic-eval"); return; |
1063 case pointer_motion_event: strcpy (buf, "motion"); return; | 1099 case pointer_motion_event: strcpy (buf, "motion"); return; |
1064 case misc_user_event: strcpy (buf, "misc-user"); return; | 1100 case misc_user_event: strcpy (buf, "misc-user"); return; |
1065 case eval_event: strcpy (buf, "eval"); return; | 1101 case eval_event: strcpy (buf, "eval"); return; |
1066 case process_event: strcpy (buf, "process"); return; | 1102 case process_event: strcpy (buf, "process"); return; |
1081 if (mouse_p) | 1117 if (mouse_p) |
1082 { | 1118 { |
1083 modprint1 ("button"); | 1119 modprint1 ("button"); |
1084 --mouse_p; | 1120 --mouse_p; |
1085 } | 1121 } |
1122 | |
1123 #ifdef HAVE_OFFIX_DND | |
1124 switch (dnd_p) | |
1125 { | |
1126 case 1: | |
1127 modprint1 ("drop"); | |
1128 } | |
1129 #endif | |
1130 | |
1086 #undef modprint | 1131 #undef modprint |
1087 #undef modprint1 | 1132 #undef modprint1 |
1088 | 1133 |
1089 if (CHARP (key)) | 1134 if (CHARP (key)) |
1090 { | 1135 { |
1214 case misc_user_event: return Qmisc_user; | 1259 case misc_user_event: return Qmisc_user; |
1215 case pointer_motion_event: return Qmotion; | 1260 case pointer_motion_event: return Qmotion; |
1216 case process_event: return Qprocess; | 1261 case process_event: return Qprocess; |
1217 case timeout_event: return Qtimeout; | 1262 case timeout_event: return Qtimeout; |
1218 case eval_event: return Qeval; | 1263 case eval_event: return Qeval; |
1264 case dnd_drop_event: return Qdnd_drop; | |
1219 case magic_event: | 1265 case magic_event: |
1220 case magic_eval_event: | 1266 case magic_eval_event: |
1221 return Qmagic; | 1267 return Qmagic; |
1222 | 1268 |
1223 case empty_event: | 1269 case empty_event: |
1268 DEFUN ("event-button", Fevent_button, 1, 1, 0, /* | 1314 DEFUN ("event-button", Fevent_button, 1, 1, 0, /* |
1269 Return the button-number of the given button-press or button-release event. | 1315 Return the button-number of the given button-press or button-release event. |
1270 */ | 1316 */ |
1271 (event)) | 1317 (event)) |
1272 { | 1318 { |
1319 #ifndef HAVE_OFFIX_DND | |
1320 | |
1273 CHECK_EVENT_TYPE2 (event, button_press_event, button_release_event, | 1321 CHECK_EVENT_TYPE2 (event, button_press_event, button_release_event, |
1274 Qbutton_event_p); | 1322 Qbutton_event_p); |
1275 #ifdef HAVE_WINDOW_SYSTEM | 1323 #ifdef HAVE_WINDOW_SYSTEM |
1276 return make_int (XEVENT (event)->event.button.button); | 1324 return make_int (XEVENT (event)->event.button.button); |
1277 #else /* !HAVE_WINDOW_SYSTEM */ | 1325 #else /* !HAVE_WINDOW_SYSTEM */ |
1278 return Qzero; | 1326 return Qzero; |
1279 #endif /* !HAVE_WINDOW_SYSTEM */ | 1327 #endif /* !HAVE_WINDOW_SYSTEM */ |
1328 | |
1329 #else /* HAVE_OFFIX_DND */ | |
1330 | |
1331 CHECK_LIVE_EVENT (event); | |
1332 if (XEVENT(event)->event_type == (button_press_event) || | |
1333 XEVENT(event)->event_type == (button_release_event)) | |
1334 /* we always have X if we have OffiX !! */ | |
1335 return make_int (XEVENT (event)->event.button.button); | |
1336 else if (XEVENT(event)->event_type == (dnd_drop_event)) | |
1337 /* we always have X if we have OffiX !! */ | |
1338 return make_int (XEVENT (event)->event.button.button); | |
1339 else | |
1340 event = wrong_type_argument ((Qbutton_event_p),(event)); | |
1341 | |
1342 #endif | |
1280 } | 1343 } |
1281 | 1344 |
1282 DEFUN ("event-modifier-bits", Fevent_modifier_bits, 1, 1, 0, /* | 1345 DEFUN ("event-modifier-bits", Fevent_modifier_bits, 1, 1, 0, /* |
1283 Return a number representing the modifier keys which were down | 1346 Return a number representing the modifier keys which were down |
1284 when the given mouse or keyboard event was produced. | 1347 when the given mouse or keyboard event was produced. |
1295 case button_press_event: | 1358 case button_press_event: |
1296 case button_release_event: | 1359 case button_release_event: |
1297 return make_int (XEVENT (event)->event.button.modifiers); | 1360 return make_int (XEVENT (event)->event.button.modifiers); |
1298 case pointer_motion_event: | 1361 case pointer_motion_event: |
1299 return make_int (XEVENT (event)->event.motion.modifiers); | 1362 return make_int (XEVENT (event)->event.motion.modifiers); |
1363 #ifdef HAVE_OFFIX_DND | |
1364 case dnd_drop_event: | |
1365 return make_int (XEVENT (event)->event.dnd_drop.modifiers); | |
1366 #endif | |
1300 default: | 1367 default: |
1301 event = wrong_type_argument (intern ("key-or-mouse-event-p"), event); | 1368 event = wrong_type_argument (intern ("key-or-mouse-event-p"), event); |
1302 goto again; | 1369 goto again; |
1303 } | 1370 } |
1304 } | 1371 } |
1336 XEVENT (event)->event_type == button_release_event) | 1403 XEVENT (event)->event_type == button_release_event) |
1337 { | 1404 { |
1338 *x = XEVENT (event)->event.button.x; | 1405 *x = XEVENT (event)->event.button.x; |
1339 *y = XEVENT (event)->event.button.y; | 1406 *y = XEVENT (event)->event.button.y; |
1340 } | 1407 } |
1408 #ifdef HAVE_OFFIX_DND | |
1409 else if (XEVENT (event)->event_type == dnd_drop_event) | |
1410 { | |
1411 *x = XEVENT (event)->event.dnd_drop.x; | |
1412 *y = XEVENT (event)->event.dnd_drop.y; | |
1413 } | |
1414 #endif | |
1341 else | 1415 else |
1342 return 0; | 1416 return 0; |
1343 | 1417 |
1344 f = XFRAME (EVENT_CHANNEL (XEVENT (event))); | 1418 f = XFRAME (EVENT_CHANNEL (XEVENT (event))); |
1345 | 1419 |
1484 case button_press_event : | 1558 case button_press_event : |
1485 case button_release_event : | 1559 case button_release_event : |
1486 pix_x = XEVENT (event)->event.button.x; | 1560 pix_x = XEVENT (event)->event.button.x; |
1487 pix_y = XEVENT (event)->event.button.y; | 1561 pix_y = XEVENT (event)->event.button.y; |
1488 break; | 1562 break; |
1563 #ifdef HAVE_OFFIX_DND | |
1564 case dnd_drop_event : | |
1565 pix_x = XEVENT (event)->event.dnd_drop.x; | |
1566 pix_y = XEVENT (event)->event.dnd_drop.y; | |
1567 break; | |
1568 #endif | |
1489 default: | 1569 default: |
1490 dead_wrong_type_argument (Qmouse_event_p, event); | 1570 dead_wrong_type_argument (Qmouse_event_p, event); |
1491 } | 1571 } |
1492 | 1572 |
1493 result = pixel_to_glyph_translation (XFRAME (frame), pix_x, pix_y, | 1573 result = pixel_to_glyph_translation (XFRAME (frame), pix_x, pix_y, |
1831 event = wrong_type_argument (intern ("timeout-or-eval-event-p"), event); | 1911 event = wrong_type_argument (intern ("timeout-or-eval-event-p"), event); |
1832 goto again; | 1912 goto again; |
1833 } | 1913 } |
1834 } | 1914 } |
1835 | 1915 |
1916 #ifdef HAVE_OFFIX_DND | |
1917 DEFUN ("event-dnd-data", Fevent_dnd_data, 1, 1, 0, /* | |
1918 Return the Dnd data list of EVENT. | |
1919 EVENT should be a dnd_drop (later also dnd_drag) event. | |
1920 */ | |
1921 (event)) | |
1922 { | |
1923 again: | |
1924 CHECK_LIVE_EVENT (event); | |
1925 switch (XEVENT (event)->event_type) | |
1926 { | |
1927 case dnd_drop_event: | |
1928 return XEVENT (event)->event.dnd_drop.data; | |
1929 default: | |
1930 event = wrong_type_argument (Qdnd_drop_event_p, event); | |
1931 goto again; | |
1932 } | |
1933 } | |
1934 #endif /* HAVE_OFFIX_DND */ | |
1935 | |
1836 DEFUN ("event-properties", Fevent_properties, 1, 1, 0, /* | 1936 DEFUN ("event-properties", Fevent_properties, 1, 1, 0, /* |
1837 Return a list of all of the properties of EVENT. | 1937 Return a list of all of the properties of EVENT. |
1838 This is in the form of a property list (alternating keyword/value pairs). | 1938 This is in the form of a property list (alternating keyword/value pairs). |
1839 */ | 1939 */ |
1840 (event)) | 1940 (event)) |
1884 case misc_user_event: | 1984 case misc_user_event: |
1885 case eval_event: | 1985 case eval_event: |
1886 props = Fcons (Qobject, Fcons (Fevent_object (event), props)); | 1986 props = Fcons (Qobject, Fcons (Fevent_object (event), props)); |
1887 props = Fcons (Qfunction, Fcons (Fevent_function (event), props)); | 1987 props = Fcons (Qfunction, Fcons (Fevent_function (event), props)); |
1888 break; | 1988 break; |
1989 | |
1990 #ifdef HAVE_OFFIX_DND | |
1991 case dnd_drop_event: | |
1992 props = Fcons (Qy, Fcons (Fevent_y_pixel (event), props)); | |
1993 props = Fcons (Qx, Fcons (Fevent_x_pixel (event), props)); | |
1994 props = Fcons (Qmodifiers, Fcons (Fevent_modifiers (event), props)); | |
1995 props = Fcons (Qbutton, Fcons (Fevent_button (event), props)); | |
1996 props = Fcons (Qdnd_data, Fcons (Fevent_dnd_data (event), props)); | |
1997 break; | |
1998 #endif | |
1889 | 1999 |
1890 case magic_eval_event: | 2000 case magic_eval_event: |
1891 case magic_event: | 2001 case magic_event: |
1892 break; | 2002 break; |
1893 | 2003 |
1951 DEFSUBR (Fevent_glyph_y_pixel); | 2061 DEFSUBR (Fevent_glyph_y_pixel); |
1952 DEFSUBR (Fevent_toolbar_button); | 2062 DEFSUBR (Fevent_toolbar_button); |
1953 DEFSUBR (Fevent_process); | 2063 DEFSUBR (Fevent_process); |
1954 DEFSUBR (Fevent_function); | 2064 DEFSUBR (Fevent_function); |
1955 DEFSUBR (Fevent_object); | 2065 DEFSUBR (Fevent_object); |
2066 #ifdef HAVE_OFFIX_DND | |
2067 DEFSUBR (Fevent_dnd_data); | |
2068 #endif | |
1956 | 2069 |
1957 defsymbol (&Qeventp, "eventp"); | 2070 defsymbol (&Qeventp, "eventp"); |
1958 defsymbol (&Qevent_live_p, "event-live-p"); | 2071 defsymbol (&Qevent_live_p, "event-live-p"); |
1959 defsymbol (&Qkey_press_event_p, "key-press-event-p"); | 2072 defsymbol (&Qkey_press_event_p, "key-press-event-p"); |
1960 defsymbol (&Qbutton_event_p, "button-event-p"); | 2073 defsymbol (&Qbutton_event_p, "button-event-p"); |
1963 defsymbol (&Qkey_press, "key-press"); | 2076 defsymbol (&Qkey_press, "key-press"); |
1964 defsymbol (&Qbutton_press, "button-press"); | 2077 defsymbol (&Qbutton_press, "button-press"); |
1965 defsymbol (&Qbutton_release, "button-release"); | 2078 defsymbol (&Qbutton_release, "button-release"); |
1966 defsymbol (&Qmisc_user, "misc-user"); | 2079 defsymbol (&Qmisc_user, "misc-user"); |
1967 defsymbol (&Qascii_character, "ascii-character"); | 2080 defsymbol (&Qascii_character, "ascii-character"); |
2081 #ifdef HAVE_OFFIX_DND | |
2082 defsymbol (&Qdnd_drop_event_p, "dnd-drop-event-p"); | |
2083 defsymbol (&Qdnd_drop, "dnd-drop"); | |
2084 #endif | |
1968 } | 2085 } |
1969 | 2086 |
1970 void | 2087 void |
1971 vars_of_events (void) | 2088 vars_of_events (void) |
1972 { | 2089 { |