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 {