Mercurial > hg > xemacs-beta
comparison src/events.c @ 149:538048ae2ab8 r20-3b1
Import from CVS: tag r20-3b1
author | cvs |
---|---|
date | Mon, 13 Aug 2007 09:36:16 +0200 |
parents | 9b50b4588a93 |
children | 25f70ba0133c |
comparison
equal
deleted
inserted
replaced
148:f659db2a1f73 | 149:538048ae2ab8 |
---|---|
61 Lisp_Object Qkey_press_event_p; | 61 Lisp_Object Qkey_press_event_p; |
62 Lisp_Object Qbutton_event_p; | 62 Lisp_Object Qbutton_event_p; |
63 Lisp_Object Qmouse_event_p; | 63 Lisp_Object Qmouse_event_p; |
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, Qempty; |
67 Lisp_Object Qascii_character; | 67 Lisp_Object Qascii_character; |
68 | 68 |
69 /* #### Ad-hoc hack. Should be part of define_lrecord_implementation */ | 69 /* #### Ad-hoc hack. Should be part of define_lrecord_implementation */ |
70 void | 70 void |
71 clear_event_resource (void) | 71 clear_event_resource (void) |
183 XEVENT (obj)->event.motion.x, XEVENT (obj)->event.motion.y); | 183 XEVENT (obj)->event.motion.x, XEVENT (obj)->event.motion.y); |
184 write_c_string (buf, printcharfun); | 184 write_c_string (buf, printcharfun); |
185 break; | 185 break; |
186 } | 186 } |
187 case process_event: | 187 case process_event: |
188 { | |
189 write_c_string ("#<process-event ", printcharfun); | 188 write_c_string ("#<process-event ", printcharfun); |
190 print_internal (XEVENT (obj)->event.process.process, printcharfun, 1); | 189 print_internal (XEVENT (obj)->event.process.process, printcharfun, 1); |
191 break; | 190 break; |
192 } | |
193 case timeout_event: | 191 case timeout_event: |
194 { | |
195 write_c_string ("#<timeout-event ", printcharfun); | 192 write_c_string ("#<timeout-event ", printcharfun); |
196 print_internal (XEVENT (obj)->event.timeout.object, printcharfun, 1); | 193 print_internal (XEVENT (obj)->event.timeout.object, printcharfun, 1); |
197 break; | 194 break; |
198 } | |
199 case empty_event: | 195 case empty_event: |
200 { | |
201 write_c_string ("#<empty-event", printcharfun); | 196 write_c_string ("#<empty-event", printcharfun); |
202 break; | 197 break; |
203 } | |
204 case misc_user_event: | 198 case misc_user_event: |
205 case eval_event: | 199 case eval_event: |
206 { | |
207 write_c_string ("#<", printcharfun); | 200 write_c_string ("#<", printcharfun); |
208 if (XEVENT (obj)->event_type == misc_user_event) | 201 if (XEVENT (obj)->event_type == misc_user_event) |
209 write_c_string ("misc-user", printcharfun); | 202 write_c_string ("misc-user", printcharfun); |
210 else | 203 else |
211 write_c_string ("eval", printcharfun); | 204 write_c_string ("eval", printcharfun); |
213 print_internal (XEVENT (obj)->event.eval.function, printcharfun, 1); | 206 print_internal (XEVENT (obj)->event.eval.function, printcharfun, 1); |
214 write_c_string (" ", printcharfun); | 207 write_c_string (" ", printcharfun); |
215 print_internal (XEVENT (obj)->event.eval.object, printcharfun, 1); | 208 print_internal (XEVENT (obj)->event.eval.object, printcharfun, 1); |
216 write_c_string (")", printcharfun); | 209 write_c_string (")", printcharfun); |
217 break; | 210 break; |
218 } | |
219 case dead_event: | 211 case dead_event: |
220 { | |
221 write_c_string ("#<DEALLOCATED-EVENT", printcharfun); | 212 write_c_string ("#<DEALLOCATED-EVENT", printcharfun); |
222 break; | 213 break; |
223 } | |
224 default: | 214 default: |
225 { | |
226 write_c_string ("#<UNKNOWN-EVENT-TYPE", printcharfun); | 215 write_c_string ("#<UNKNOWN-EVENT-TYPE", printcharfun); |
227 break; | 216 break; |
228 } | 217 } |
229 } | |
230 write_c_string (">", printcharfun); | 218 write_c_string (">", printcharfun); |
231 } | 219 } |
232 | 220 |
233 static int | 221 static int |
234 event_equal (Lisp_Object o1, Lisp_Object o2, int depth) | 222 event_equal (Lisp_Object o1, Lisp_Object o2, int depth) |
240 if (!EQ (e1->channel, e2->channel)) return 0; | 228 if (!EQ (e1->channel, e2->channel)) return 0; |
241 /* if (e1->timestamp != e2->timestamp) return 0; */ | 229 /* if (e1->timestamp != e2->timestamp) return 0; */ |
242 switch (e1->event_type) | 230 switch (e1->event_type) |
243 { | 231 { |
244 case process_event: | 232 case process_event: |
245 return (EQ (e1->event.process.process, | 233 return EQ (e1->event.process.process, e2->event.process.process); |
246 e2->event.process.process)); | |
247 | 234 |
248 case timeout_event: | 235 case timeout_event: |
249 if (NILP (Fequal (e1->event.timeout.function, | 236 return (!NILP (Fequal (e1->event.timeout.function, |
250 e2->event.timeout.function))) | 237 e2->event.timeout.function)) && |
251 return 0; | 238 !NILP (Fequal (e1->event.timeout.object, |
252 if (NILP (Fequal (e1->event.timeout.object, | 239 e2->event.timeout.object))); |
253 e2->event.timeout.object))) | |
254 return 0; | |
255 return 1; | |
256 | 240 |
257 case key_press_event: | 241 case key_press_event: |
258 return ((EQ (e1->event.key.keysym, | 242 return (EQ (e1->event.key.keysym, e2->event.key.keysym) && |
259 e2->event.key.keysym) | 243 (e1->event.key.modifiers == e2->event.key.modifiers)); |
260 && (e1->event.key.modifiers | |
261 == e2->event.key.modifiers))); | |
262 | 244 |
263 case button_press_event: | 245 case button_press_event: |
264 case button_release_event: | 246 case button_release_event: |
265 return (((e1->event.button.button | 247 return (e1->event.button.button == e2->event.button.button && |
266 == e2->event.button.button) | 248 e1->event.button.modifiers == e2->event.button.modifiers); |
267 && (e1->event.button.modifiers | |
268 == e2->event.button.modifiers))); | |
269 | 249 |
270 case pointer_motion_event: | 250 case pointer_motion_event: |
271 return ((e1->event.motion.x == e2->event.motion.x | 251 return (e1->event.motion.x == e2->event.motion.x && |
272 && e1->event.motion.y == e2->event.motion.y)); | 252 e1->event.motion.y == e2->event.motion.y); |
273 | 253 |
274 case misc_user_event: | 254 case misc_user_event: |
275 case eval_event: | 255 case eval_event: |
276 if (NILP (Fequal (e1->event.eval.function, | 256 return (!NILP (Fequal (e1->event.eval.function, |
277 e2->event.eval.function))) | 257 e2->event.eval.function)) && |
278 return 0; | 258 !NILP (Fequal (e1->event.eval.object, |
279 if (NILP (Fequal (e1->event.eval.object, | 259 e2->event.eval.object))); |
280 e2->event.eval.object))) | |
281 return 0; | |
282 return 1; | |
283 | 260 |
284 case magic_eval_event: | 261 case magic_eval_event: |
285 if (e1->event.magic_eval.internal_function != | 262 return (e1->event.magic_eval.internal_function == |
286 e2->event.magic_eval.internal_function) | 263 e2->event.magic_eval.internal_function && |
287 return 0; | 264 !NILP (Fequal (e1->event.magic_eval.object, |
288 if (NILP (Fequal (e1->event.magic_eval.object, | 265 e2->event.magic_eval.object))); |
289 e2->event.magic_eval.object))) | |
290 return 0; | |
291 return 1; | |
292 | 266 |
293 case magic_event: | 267 case magic_event: |
294 { | 268 { |
295 Lisp_Object console; | 269 Lisp_Object console; |
296 | 270 |
297 console = CDFW_CONSOLE (e1->channel); | 271 console = CDFW_CONSOLE (e1->channel); |
298 | 272 |
299 #ifdef HAVE_X_WINDOWS | 273 #ifdef HAVE_X_WINDOWS |
300 /* XEvent is actually a union which means that we can't just use == */ | 274 /* XEvent is actually a union which means that we can't just use == */ |
301 if (CONSOLE_X_P (XCONSOLE (console))) | 275 if (CONSOLE_X_P (XCONSOLE (console))) |
302 return (!memcmp ((XEvent *) &e1->event.magic.underlying_x_event, | 276 return !memcmp ((XEvent *) &e1->event.magic.underlying_x_event, |
303 (XEvent *) &e2->event.magic.underlying_x_event, | 277 (XEvent *) &e2->event.magic.underlying_x_event, |
304 sizeof (e1->event.magic.underlying_x_event))); | 278 sizeof (e1->event.magic.underlying_x_event)); |
305 #endif | 279 #endif |
280 #ifdef HAVE_TTY | |
281 if (CONSOLE_TTY_P (XCONSOLE (console))) | |
306 return (e1->event.magic.underlying_tty_event == | 282 return (e1->event.magic.underlying_tty_event == |
307 e2->event.magic.underlying_tty_event); | 283 e2->event.magic.underlying_tty_event); |
284 #endif | |
285 return 1; | |
308 } | 286 } |
309 | 287 |
310 case empty_event: /* Empty and deallocated events are equal. */ | 288 case empty_event: /* Empty and deallocated events are equal. */ |
311 case dead_event: | 289 case dead_event: |
312 return 1; | 290 return 1; |
958 case pointer_motion_event: strcpy (buf, "motion"); return; | 936 case pointer_motion_event: strcpy (buf, "motion"); return; |
959 case misc_user_event: strcpy (buf, "misc-user"); return; | 937 case misc_user_event: strcpy (buf, "misc-user"); return; |
960 case eval_event: strcpy (buf, "eval"); return; | 938 case eval_event: strcpy (buf, "eval"); return; |
961 case process_event: strcpy (buf, "process");return; | 939 case process_event: strcpy (buf, "process");return; |
962 case timeout_event: strcpy (buf, "timeout");return; | 940 case timeout_event: strcpy (buf, "timeout");return; |
963 case empty_event: strcpy (buf, "EMPTY-EVENT"); return; | 941 case empty_event: strcpy (buf, "empty"); return; |
964 case dead_event: strcpy (buf, "DEAD-EVENT"); return; | 942 case dead_event: strcpy (buf, "DEAD-EVENT"); return; |
965 default: | 943 default: |
966 abort (); | 944 abort (); |
967 } | 945 } |
968 #define modprint1(x) { strcpy (buf, (x)); buf += sizeof (x)-1; } | 946 #define modprint1(x) { strcpy (buf, (x)); buf += sizeof (x)-1; } |
1021 DEFUN ("eventp", Feventp, 1, 1, 0, /* | 999 DEFUN ("eventp", Feventp, 1, 1, 0, /* |
1022 True if OBJECT is an event object. | 1000 True if OBJECT is an event object. |
1023 */ | 1001 */ |
1024 (object)) | 1002 (object)) |
1025 { | 1003 { |
1026 return ((EVENTP (object)) ? Qt : Qnil); | 1004 return EVENTP (object) ? Qt : Qnil; |
1027 } | 1005 } |
1028 | 1006 |
1029 DEFUN ("event-live-p", Fevent_live_p, 1, 1, 0, /* | 1007 DEFUN ("event-live-p", Fevent_live_p, 1, 1, 0, /* |
1030 True if OBJECT is an event object that has not been deallocated. | 1008 True if OBJECT is an event object that has not been deallocated. |
1031 */ | 1009 */ |
1032 (object)) | 1010 (object)) |
1033 { | 1011 { |
1034 return ((EVENTP (object) && XEVENT (object)->event_type != dead_event) | 1012 return EVENTP (object) && XEVENT (object)->event_type != dead_event ? |
1035 ? Qt : Qnil); | 1013 Qt : Qnil; |
1036 } | 1014 } |
1037 | 1015 |
1038 #if 0 /* debugging functions */ | 1016 #if 0 /* debugging functions */ |
1039 | 1017 |
1040 xxDEFUN ("event-next", Fevent_next, Sevent_next, 1, 1, 0 /* | 1018 xxDEFUN ("event-next", Fevent_next, 1, 1, 0, /* |
1041 Return the event object's `next' event, or nil if it has none. | 1019 Return the event object's `next' event, or nil if it has none. |
1042 The `next-event' field is changed by calling `set-next-event'. | 1020 The `next-event' field is changed by calling `set-next-event'. |
1043 */ ) | 1021 */ |
1044 (event) | 1022 (event)) |
1045 Lisp_Object event; | |
1046 { | 1023 { |
1047 struct Lisp_Event *e; | 1024 struct Lisp_Event *e; |
1048 CHECK_LIVE_EVENT (event); | 1025 CHECK_LIVE_EVENT (event); |
1049 | 1026 |
1050 return XEVENT_NEXT (event); | 1027 return XEVENT_NEXT (event); |
1051 } | 1028 } |
1052 | 1029 |
1053 xxDEFUN ("set-event-next", Fset_event_next, Sset_event_next, 2, 2, 0 /* | 1030 xxDEFUN ("set-event-next", Fset_event_next, 2, 2, 0, /* |
1054 Set the `next event' of EVENT to NEXT-EVENT. | 1031 Set the `next event' of EVENT to NEXT-EVENT. |
1055 NEXT-EVENT must be an event object or nil. | 1032 NEXT-EVENT must be an event object or nil. |
1056 */ ) | 1033 */ |
1057 (event, next_event) | 1034 (event, next_event)) |
1058 Lisp_Object event, next_event; | |
1059 { | 1035 { |
1060 Lisp_Object ev; | 1036 Lisp_Object ev; |
1061 | 1037 |
1062 CHECK_LIVE_EVENT (event); | 1038 CHECK_LIVE_EVENT (event); |
1063 if (NILP (next_event)) | 1039 if (NILP (next_event)) |
1076 list3 (build_string ("Cyclic event-next"), | 1052 list3 (build_string ("Cyclic event-next"), |
1077 event, | 1053 event, |
1078 next_event)); | 1054 next_event)); |
1079 } | 1055 } |
1080 XSET_EVENT_NEXT (event, next_event); | 1056 XSET_EVENT_NEXT (event, next_event); |
1081 return (next_event); | 1057 return next_event; |
1082 } | 1058 } |
1083 | 1059 |
1084 #endif /* 0 */ | 1060 #endif /* 0 */ |
1085 | 1061 |
1086 DEFUN ("event-type", Fevent_type, 1, 1, 0, /* | 1062 DEFUN ("event-type", Fevent_type, 1, 1, 0, /* |
1103 (event)) | 1079 (event)) |
1104 { | 1080 { |
1105 CHECK_LIVE_EVENT (event); | 1081 CHECK_LIVE_EVENT (event); |
1106 switch (XEVENT (event)->event_type) | 1082 switch (XEVENT (event)->event_type) |
1107 { | 1083 { |
1108 case key_press_event: | 1084 case key_press_event: return Qkey_press; |
1109 return Qkey_press; | 1085 case button_press_event: return Qbutton_press; |
1110 | 1086 case button_release_event: return Qbutton_release; |
1111 case button_press_event: | 1087 case misc_user_event: return Qmisc_user; |
1112 return Qbutton_press; | 1088 case pointer_motion_event: return Qmotion; |
1113 | 1089 case process_event: return Qprocess; |
1114 case button_release_event: | 1090 case timeout_event: return Qtimeout; |
1115 return Qbutton_release; | 1091 case eval_event: return Qeval; |
1116 | |
1117 case misc_user_event: | |
1118 return Qmisc_user; | |
1119 | |
1120 case pointer_motion_event: | |
1121 return Qmotion; | |
1122 | |
1123 case process_event: | |
1124 return Qprocess; | |
1125 | |
1126 case timeout_event: | |
1127 return Qtimeout; | |
1128 | |
1129 case eval_event: | |
1130 return Qeval; | |
1131 | |
1132 case magic_event: | 1092 case magic_event: |
1133 case magic_eval_event: | 1093 case magic_eval_event: |
1134 return Qmagic; | 1094 return Qmagic; |
1135 | 1095 |
1136 case empty_event: | 1096 case empty_event: |
1141 return Qnil; | 1101 return Qnil; |
1142 } | 1102 } |
1143 } | 1103 } |
1144 | 1104 |
1145 DEFUN ("event-timestamp", Fevent_timestamp, 1, 1, 0, /* | 1105 DEFUN ("event-timestamp", Fevent_timestamp, 1, 1, 0, /* |
1146 Return the timestamp of the given event object. | 1106 Return the timestamp of the event object EVENT. |
1147 */ | 1107 */ |
1148 (event)) | 1108 (event)) |
1149 { | 1109 { |
1150 CHECK_LIVE_EVENT (event); | 1110 CHECK_LIVE_EVENT (event); |
1151 /* This junk is so that timestamps don't get to be negative, but contain | 1111 /* This junk is so that timestamps don't get to be negative, but contain |
1166 if (XEVENT(e)->event_type != (t1) && XEVENT(e)->event_type != (t2)) \ | 1126 if (XEVENT(e)->event_type != (t1) && XEVENT(e)->event_type != (t2)) \ |
1167 e = wrong_type_argument ((sym),(e)); \ | 1127 e = wrong_type_argument ((sym),(e)); \ |
1168 } | 1128 } |
1169 | 1129 |
1170 DEFUN ("event-key", Fevent_key, 1, 1, 0, /* | 1130 DEFUN ("event-key", Fevent_key, 1, 1, 0, /* |
1171 Return the Keysym of the given key-press event. | 1131 Return the Keysym of the key-press event EVENT. |
1172 This will be the ASCII code of a printing character, or a symbol. | 1132 This will be a character if the event is associated with one, else a symbol. |
1173 */ | 1133 */ |
1174 (event)) | 1134 (event)) |
1175 { | 1135 { |
1176 CHECK_EVENT_TYPE (event, key_press_event, Qkey_press_event_p); | 1136 CHECK_EVENT_TYPE (event, key_press_event, Qkey_press_event_p); |
1177 return (XEVENT (event)->event.key.keysym); | 1137 return XEVENT (event)->event.key.keysym; |
1178 } | 1138 } |
1179 | 1139 |
1180 DEFUN ("event-button", Fevent_button, 1, 1, 0, /* | 1140 DEFUN ("event-button", Fevent_button, 1, 1, 0, /* |
1181 Return the button-number of the given mouse-button-press event. | 1141 Return the button-number of the given button-press or button-release event. |
1182 */ | 1142 */ |
1183 (event)) | 1143 (event)) |
1184 { | 1144 { |
1185 CHECK_EVENT_TYPE2 (event, button_press_event, button_release_event, | 1145 CHECK_EVENT_TYPE2 (event, button_press_event, button_release_event, |
1186 Qbutton_event_p); | 1146 Qbutton_event_p); |
1272 | 1232 |
1273 return 1; | 1233 return 1; |
1274 } | 1234 } |
1275 | 1235 |
1276 DEFUN ("event-window-x-pixel", Fevent_window_x_pixel, 1, 1, 0, /* | 1236 DEFUN ("event-window-x-pixel", Fevent_window_x_pixel, 1, 1, 0, /* |
1277 Return the X position in pixels of the given mouse event. | 1237 Return the X position in pixels of mouse event EVENT. |
1278 The value returned is relative to the window the event occurred in. | 1238 The value returned is relative to the window the event occurred in. |
1279 This will signal an error if the event is not a mouse-motion, button-press, | 1239 This will signal an error if the event is not a mouse event. |
1280 or button-release event. See also `event-x-pixel'. | 1240 See also `mouse-event-p' and `event-x-pixel'. |
1281 */ | 1241 */ |
1282 (event)) | 1242 (event)) |
1283 { | 1243 { |
1284 int x, y; | 1244 int x, y; |
1285 | 1245 |
1290 else | 1250 else |
1291 return make_int (x); | 1251 return make_int (x); |
1292 } | 1252 } |
1293 | 1253 |
1294 DEFUN ("event-window-y-pixel", Fevent_window_y_pixel, 1, 1, 0, /* | 1254 DEFUN ("event-window-y-pixel", Fevent_window_y_pixel, 1, 1, 0, /* |
1295 Return the Y position in pixels of the given mouse event. | 1255 Return the Y position in pixels of mouse event EVENT. |
1296 The value returned is relative to the window the event occurred in. | 1256 The value returned is relative to the window the event occurred in. |
1297 This will signal an error if the event is not a mouse-motion, button-press, | 1257 This will signal an error if the event is not a mouse event. |
1298 or button-release event. See also `event-y-pixel'. | 1258 See also `mouse-event-p' and `event-y-pixel'. |
1299 */ | 1259 */ |
1300 (event)) | 1260 (event)) |
1301 { | 1261 { |
1302 int x, y; | 1262 int x, y; |
1303 | 1263 |
1308 else | 1268 else |
1309 return make_int (y); | 1269 return make_int (y); |
1310 } | 1270 } |
1311 | 1271 |
1312 DEFUN ("event-x-pixel", Fevent_x_pixel, 1, 1, 0, /* | 1272 DEFUN ("event-x-pixel", Fevent_x_pixel, 1, 1, 0, /* |
1313 Return the X position in pixels of the given mouse event. | 1273 Return the X position in pixels of mouse event EVENT. |
1314 The value returned is relative to the frame the event occurred in. | 1274 The value returned is relative to the frame the event occurred in. |
1315 This will signal an error if the event is not a mouse-motion, button-press, | 1275 This will signal an error if the event is not a mouse event. |
1316 or button-release event. See also `event-window-x-pixel'. | 1276 See also `mouse-event-p' and `event-window-x-pixel'. |
1317 */ | 1277 */ |
1318 (event)) | 1278 (event)) |
1319 { | 1279 { |
1320 int x, y; | 1280 int x, y; |
1321 | 1281 |
1326 else | 1286 else |
1327 return make_int (x); | 1287 return make_int (x); |
1328 } | 1288 } |
1329 | 1289 |
1330 DEFUN ("event-y-pixel", Fevent_y_pixel, 1, 1, 0, /* | 1290 DEFUN ("event-y-pixel", Fevent_y_pixel, 1, 1, 0, /* |
1331 Return the Y position in pixels of the given mouse event. | 1291 Return the Y position in pixels of mouse event EVENT. |
1332 The value returned is relative to the frame the event occurred in. | 1292 The value returned is relative to the frame the event occurred in. |
1333 This will signal an error if the event is not a mouse-motion, button-press, | 1293 This will signal an error if the event is not a mouse event. |
1334 or button-release event. See also `event-window-y-pixel'. | 1294 See also `mouse-event-p' `event-window-y-pixel'. |
1335 */ | 1295 */ |
1336 (event)) | 1296 (event)) |
1337 { | 1297 { |
1338 int x, y; | 1298 int x, y; |
1339 | 1299 |
1452 | 1412 |
1453 return result; | 1413 return result; |
1454 } | 1414 } |
1455 | 1415 |
1456 DEFUN ("event-over-text-area-p", Fevent_over_text_area_p, 1, 1, 0, /* | 1416 DEFUN ("event-over-text-area-p", Fevent_over_text_area_p, 1, 1, 0, /* |
1457 Return whether the given mouse event occurred over the text area of a window. | 1417 Return t if the mouse event EVENT occurred over the text area of a window. |
1458 The modeline is not considered to be part of the text area. | 1418 The modeline is not considered to be part of the text area. |
1459 */ | 1419 */ |
1460 (event)) | 1420 (event)) |
1461 { | 1421 { |
1462 int result = event_pixel_translation (event, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); | 1422 int result = event_pixel_translation (event, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); |
1463 | 1423 |
1464 if (result == OVER_TEXT || result == OVER_NOTHING) | 1424 return result == OVER_TEXT || result == OVER_NOTHING ? Qt : Qnil; |
1465 return Qt; | |
1466 else | |
1467 return Qnil; | |
1468 } | 1425 } |
1469 | 1426 |
1470 DEFUN ("event-over-modeline-p", Fevent_over_modeline_p, 1, 1, 0, /* | 1427 DEFUN ("event-over-modeline-p", Fevent_over_modeline_p, 1, 1, 0, /* |
1471 Return whether the given mouse event occurred over the modeline of a window. | 1428 Return t if the mouse event EVENT occurred over the modeline of a window. |
1472 */ | 1429 */ |
1473 (event)) | 1430 (event)) |
1474 { | 1431 { |
1475 int result = event_pixel_translation (event, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); | 1432 int result = event_pixel_translation (event, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); |
1476 | 1433 |
1477 if (result == OVER_MODELINE) | 1434 return result == OVER_MODELINE ? Qt : Qnil; |
1478 return Qt; | |
1479 else | |
1480 return Qnil; | |
1481 } | 1435 } |
1482 | 1436 |
1483 DEFUN ("event-over-border-p", Fevent_over_border_p, 1, 1, 0, /* | 1437 DEFUN ("event-over-border-p", Fevent_over_border_p, 1, 1, 0, /* |
1484 Return whether the given mouse event occurred over an internal border. | 1438 Return t if the mouse event EVENT occurred over an internal border. |
1485 */ | 1439 */ |
1486 (event)) | 1440 (event)) |
1487 { | 1441 { |
1488 int result = event_pixel_translation (event, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); | 1442 int result = event_pixel_translation (event, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); |
1489 | 1443 |
1490 if (result == OVER_BORDER) | 1444 return result == OVER_BORDER ? Qt : Qnil; |
1491 return Qt; | |
1492 else | |
1493 return Qnil; | |
1494 } | 1445 } |
1495 | 1446 |
1496 DEFUN ("event-over-toolbar-p", Fevent_over_toolbar_p, 1, 1, 0, /* | 1447 DEFUN ("event-over-toolbar-p", Fevent_over_toolbar_p, 1, 1, 0, /* |
1497 Return whether the given mouse event occurred over a toolbar. | 1448 Return t if the mouse event EVENT occurred over a toolbar. |
1498 */ | 1449 */ |
1499 (event)) | 1450 (event)) |
1500 { | 1451 { |
1501 int result = event_pixel_translation (event, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); | 1452 int result = event_pixel_translation (event, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); |
1502 | 1453 |
1503 if (result == OVER_TOOLBAR) | 1454 return result == OVER_TOOLBAR ? Qt : Qnil; |
1504 return Qt; | |
1505 else | |
1506 return Qnil; | |
1507 } | 1455 } |
1508 | 1456 |
1509 struct console * | 1457 struct console * |
1510 event_console_or_selected (Lisp_Object event) | 1458 event_console_or_selected (Lisp_Object event) |
1511 { | 1459 { |
1517 | 1465 |
1518 return XCONSOLE (console); | 1466 return XCONSOLE (console); |
1519 } | 1467 } |
1520 | 1468 |
1521 DEFUN ("event-channel", Fevent_channel, 1, 1, 0, /* | 1469 DEFUN ("event-channel", Fevent_channel, 1, 1, 0, /* |
1522 Return the channel that the given event occurred on. | 1470 Return the channel that the event EVENT occurred on. |
1523 This will be a frame, device, console, or nil for some types | 1471 This will be a frame, device, console, or nil for some types |
1524 of events (e.g. eval events). | 1472 of events (e.g. eval events). |
1525 */ | 1473 */ |
1526 (event)) | 1474 (event)) |
1527 { | 1475 { |
1528 CHECK_LIVE_EVENT (event); | 1476 CHECK_LIVE_EVENT (event); |
1529 return EVENT_CHANNEL (XEVENT (event)); | 1477 return EVENT_CHANNEL (XEVENT (event)); |
1530 } | 1478 } |
1531 | 1479 |
1532 DEFUN ("event-window", Fevent_window, 1, 1, 0, /* | 1480 DEFUN ("event-window", Fevent_window, 1, 1, 0, /* |
1533 Return the window of the given mouse event. | 1481 Return the window over which mouse event EVENT occurred. |
1534 This may be nil if the event occurred in the border or over a toolbar. | 1482 This may be nil if the event occurred in the border or over a toolbar. |
1535 The modeline is considered to be in the window it represents. | 1483 The modeline is considered to be within the window it describes. |
1536 */ | 1484 */ |
1537 (event)) | 1485 (event)) |
1538 { | 1486 { |
1539 struct window *w; | 1487 struct window *w; |
1540 Lisp_Object window; | |
1541 | 1488 |
1542 event_pixel_translation (event, 0, 0, 0, 0, &w, 0, 0, 0, 0, 0); | 1489 event_pixel_translation (event, 0, 0, 0, 0, &w, 0, 0, 0, 0, 0); |
1543 | 1490 |
1544 if (!w) | 1491 if (!w) |
1545 return Qnil; | 1492 return Qnil; |
1546 else | 1493 else |
1547 { | 1494 { |
1495 Lisp_Object window; | |
1496 | |
1548 XSETWINDOW (window, w); | 1497 XSETWINDOW (window, w); |
1549 return window; | 1498 return window; |
1550 } | 1499 } |
1551 } | 1500 } |
1552 | 1501 |
1553 DEFUN ("event-point", Fevent_point, 1, 1, 0, /* | 1502 DEFUN ("event-point", Fevent_point, 1, 1, 0, /* |
1554 Return the character position of the given mouse event. | 1503 Return the character position of the mouse event EVENT. |
1555 If the event did not occur over a window, or did not occur over text, | 1504 If the event did not occur over a window, or did not occur over text, |
1556 then this returns nil. Otherwise, it returns an index into the buffer | 1505 then this returns nil. Otherwise, it returns a position in the buffer |
1557 visible in the event's window. | 1506 visible in the event's window. |
1558 */ | 1507 */ |
1559 (event)) | 1508 (event)) |
1560 { | 1509 { |
1561 Bufpos bufp; | 1510 Bufpos bufp; |
1562 struct window *w; | 1511 struct window *w; |
1563 | 1512 |
1564 event_pixel_translation (event, 0, 0, 0, 0, &w, &bufp, 0, 0, 0, 0); | 1513 event_pixel_translation (event, 0, 0, 0, 0, &w, &bufp, 0, 0, 0, 0); |
1565 | 1514 |
1566 if (!w) | 1515 return w && bufp ? make_int (bufp) : Qnil; |
1567 return Qnil; | |
1568 else if (!bufp) | |
1569 return Qnil; | |
1570 else | |
1571 return make_int (bufp); | |
1572 } | 1516 } |
1573 | 1517 |
1574 DEFUN ("event-closest-point", Fevent_closest_point, 1, 1, 0, /* | 1518 DEFUN ("event-closest-point", Fevent_closest_point, 1, 1, 0, /* |
1575 Return the character position of the given mouse event. | 1519 Return the character position closest to the mouse event EVENT. |
1576 If the event did not occur over a window or over text, return the | 1520 If the event did not occur over a window or over text, return the |
1577 closest point to the location of the event. If the Y pixel position | 1521 closest point to the location of the event. If the Y pixel position |
1578 overlaps a window and the X pixel position is to the left of that | 1522 overlaps a window and the X pixel position is to the left of that |
1579 window, the closest point is the beginning of the line containing the | 1523 window, the closest point is the beginning of the line containing the |
1580 Y position. If the Y pixel position overlaps a window and the X pixel | 1524 Y position. If the Y pixel position overlaps a window and the X pixel |
1581 position is to the right of that window, the closest point is the end | 1525 position is to the right of that window, the closest point is the end |
1582 of the line containing the Y position. If the Y pixel position is | 1526 of the line containing the Y position. If the Y pixel position is |
1583 above a window, return 0. If it is below a window, return the value | 1527 above a window, return 0. If it is below the last character in a window, |
1584 of (window-end). | 1528 return the value of (window-end). |
1585 */ | 1529 */ |
1586 (event)) | 1530 (event)) |
1587 { | 1531 { |
1588 Bufpos bufp; | 1532 Bufpos bufp; |
1589 | 1533 |
1590 event_pixel_translation (event, 0, 0, 0, 0, 0, 0, &bufp, 0, 0, 0); | 1534 event_pixel_translation (event, 0, 0, 0, 0, 0, 0, &bufp, 0, 0, 0); |
1591 | 1535 |
1592 if (!bufp) | 1536 return bufp ? make_int (bufp) : Qnil; |
1593 return Qnil; | |
1594 else | |
1595 return make_int (bufp); | |
1596 } | 1537 } |
1597 | 1538 |
1598 DEFUN ("event-x", Fevent_x, 1, 1, 0, /* | 1539 DEFUN ("event-x", Fevent_x, 1, 1, 0, /* |
1599 Return the X position of the given mouse event in characters. | 1540 Return the X position of the mouse event EVENT in characters. |
1600 This is relative to the window the event occurred over. | 1541 This is relative to the window the event occurred over. |
1601 */ | 1542 */ |
1602 (event)) | 1543 (event)) |
1603 { | 1544 { |
1604 int char_x; | 1545 int char_x; |
1607 | 1548 |
1608 return make_int (char_x); | 1549 return make_int (char_x); |
1609 } | 1550 } |
1610 | 1551 |
1611 DEFUN ("event-y", Fevent_y, 1, 1, 0, /* | 1552 DEFUN ("event-y", Fevent_y, 1, 1, 0, /* |
1612 Return the Y position of the given mouse event in characters. | 1553 Return the Y position of the mouse event EVENT in characters. |
1613 This is relative to the window the event occurred over. | 1554 This is relative to the window the event occurred over. |
1614 */ | 1555 */ |
1615 (event)) | 1556 (event)) |
1616 { | 1557 { |
1617 int char_y; | 1558 int char_y; |
1634 { | 1575 { |
1635 Charcount mbufp; | 1576 Charcount mbufp; |
1636 | 1577 |
1637 event_pixel_translation (event, 0, 0, 0, 0, 0, 0, 0, &mbufp, 0, 0); | 1578 event_pixel_translation (event, 0, 0, 0, 0, 0, 0, 0, &mbufp, 0, 0); |
1638 | 1579 |
1639 if (mbufp < 0) | 1580 return mbufp < 0 ? Qnil : make_int (mbufp); |
1640 return Qnil; | |
1641 else | |
1642 return make_int (mbufp); | |
1643 } | 1581 } |
1644 | 1582 |
1645 DEFUN ("event-glyph", Fevent_glyph, 1, 1, 0, /* | 1583 DEFUN ("event-glyph", Fevent_glyph, 1, 1, 0, /* |
1646 Return the glyph that the given mouse event occurred over, or nil. | 1584 Return the glyph that the mouse event EVENT occurred over, or nil. |
1647 */ | 1585 */ |
1648 (event)) | 1586 (event)) |
1649 { | 1587 { |
1650 Lisp_Object glyph; | 1588 Lisp_Object glyph; |
1651 struct window *w; | 1589 struct window *w; |
1652 | 1590 |
1653 event_pixel_translation (event, 0, 0, 0, 0, &w, 0, 0, 0, &glyph, 0); | 1591 event_pixel_translation (event, 0, 0, 0, 0, &w, 0, 0, 0, &glyph, 0); |
1654 | 1592 |
1655 if (!w) | 1593 return w && GLYPHP (glyph) ? glyph : Qnil; |
1656 return Qnil; | |
1657 else if (GLYPHP (glyph)) | |
1658 return glyph; | |
1659 else | |
1660 return Qnil; | |
1661 } | 1594 } |
1662 | 1595 |
1663 DEFUN ("event-glyph-extent", Fevent_glyph_extent, 1, 1, 0, /* | 1596 DEFUN ("event-glyph-extent", Fevent_glyph_extent, 1, 1, 0, /* |
1664 Return the extent of the glyph that the given mouse event occurred over. | 1597 Return the extent of the glyph that the mouse event EVENT occurred over. |
1665 If the event did not occur over a glyph, nil is returned. | 1598 If the event did not occur over a glyph, nil is returned. |
1666 */ | 1599 */ |
1667 (event)) | 1600 (event)) |
1668 { | 1601 { |
1669 Lisp_Object extent; | 1602 Lisp_Object extent; |
1670 struct window *w; | 1603 struct window *w; |
1671 | 1604 |
1672 event_pixel_translation (event, 0, 0, 0, 0, &w, 0, 0, 0, 0, &extent); | 1605 event_pixel_translation (event, 0, 0, 0, 0, &w, 0, 0, 0, 0, &extent); |
1673 | 1606 |
1674 if (!w) | 1607 return w && EXTENTP (extent) ? extent : Qnil; |
1675 return Qnil; | |
1676 else if (EXTENTP (extent)) | |
1677 return extent; | |
1678 else | |
1679 return Qnil; | |
1680 } | 1608 } |
1681 | 1609 |
1682 DEFUN ("event-glyph-x-pixel", Fevent_glyph_x_pixel, 1, 1, 0, /* | 1610 DEFUN ("event-glyph-x-pixel", Fevent_glyph_x_pixel, 1, 1, 0, /* |
1683 Return the X pixel position of EVENT relative to the glyph it occurred over. | 1611 Return the X pixel position of EVENT relative to the glyph it occurred over. |
1684 EVENT should be a mouse event. If the event did not occur over a glyph, | 1612 EVENT should be a mouse event. If the event did not occur over a glyph, |
1690 struct window *w; | 1618 struct window *w; |
1691 int obj_x; | 1619 int obj_x; |
1692 | 1620 |
1693 event_pixel_translation (event, 0, 0, &obj_x, 0, &w, 0, 0, 0, 0, &extent); | 1621 event_pixel_translation (event, 0, 0, &obj_x, 0, &w, 0, 0, 0, 0, &extent); |
1694 | 1622 |
1695 if (w && EXTENTP (extent)) | 1623 return w && EXTENTP (extent) ? make_int (obj_x) : Qnil; |
1696 return make_int (obj_x); | |
1697 else | |
1698 return Qnil; | |
1699 } | 1624 } |
1700 | 1625 |
1701 DEFUN ("event-glyph-y-pixel", Fevent_glyph_y_pixel, 1, 1, 0, /* | 1626 DEFUN ("event-glyph-y-pixel", Fevent_glyph_y_pixel, 1, 1, 0, /* |
1702 Return the Y pixel position of EVENT relative to the glyph it occurred over. | 1627 Return the Y pixel position of EVENT relative to the glyph it occurred over. |
1703 EVENT should be a mouse event. If the event did not occur over a glyph, | 1628 EVENT should be a mouse event. If the event did not occur over a glyph, |
1709 struct window *w; | 1634 struct window *w; |
1710 int obj_y; | 1635 int obj_y; |
1711 | 1636 |
1712 event_pixel_translation (event, 0, 0, 0, &obj_y, &w, 0, 0, 0, 0, &extent); | 1637 event_pixel_translation (event, 0, 0, 0, &obj_y, &w, 0, 0, 0, 0, &extent); |
1713 | 1638 |
1714 if (w && EXTENTP (extent)) | 1639 return w && EXTENTP (extent) ? make_int (obj_y) : Qnil; |
1715 return make_int (obj_y); | |
1716 else | |
1717 return Qnil; | |
1718 } | 1640 } |
1719 | 1641 |
1720 DEFUN ("event-toolbar-button", Fevent_toolbar_button, 1, 1, 0, /* | 1642 DEFUN ("event-toolbar-button", Fevent_toolbar_button, 1, 1, 0, /* |
1721 Return the toolbar button that the given mouse event occurred over. | 1643 Return the toolbar button that the mouse event EVENT occurred over. |
1722 If the event did not occur over a toolbar, nil is returned. | 1644 If the event did not occur over a toolbar button, nil is returned. |
1723 */ | 1645 */ |
1724 (event)) | 1646 (event)) |
1725 { | 1647 { |
1726 #ifdef HAVE_TOOLBARS | 1648 #ifdef HAVE_TOOLBARS |
1727 Lisp_Object button; | 1649 Lisp_Object button; |
1728 int result; | 1650 |
1729 | 1651 int result = event_pixel_translation (event, 0, 0, 0, 0, 0, 0, 0, 0, &button, 0); |
1730 result = event_pixel_translation (event, 0, 0, 0, 0, 0, 0, 0, 0, &button, 0); | 1652 |
1731 | 1653 return result == OVER_TOOLBAR && TOOLBAR_BUTTONP (button) ? button : Qnil; |
1732 if (result == OVER_TOOLBAR) | 1654 #else |
1733 { | |
1734 if (TOOLBAR_BUTTONP (button)) | |
1735 return button; | |
1736 else | |
1737 return Qnil; | 1655 return Qnil; |
1738 } | |
1739 else | |
1740 #endif | 1656 #endif |
1741 return Qnil; | |
1742 } | 1657 } |
1743 | 1658 |
1744 DEFUN ("event-process", Fevent_process, 1, 1, 0, /* | 1659 DEFUN ("event-process", Fevent_process, 1, 1, 0, /* |
1745 Return the process of the given process-output event. | 1660 Return the process of the given process-output event. |
1746 */ | 1661 */ |
1747 (event)) | 1662 (event)) |
1748 { | 1663 { |
1749 CHECK_EVENT_TYPE (event, process_event, Qprocess_event_p); | 1664 CHECK_EVENT_TYPE (event, process_event, Qprocess_event_p); |
1750 return (XEVENT (event)->event.process.process); | 1665 return XEVENT (event)->event.process.process; |
1751 } | 1666 } |
1752 | 1667 |
1753 DEFUN ("event-function", Fevent_function, 1, 1, 0, /* | 1668 DEFUN ("event-function", Fevent_function, 1, 1, 0, /* |
1754 Return the callback function of EVENT. | 1669 Return the callback function of EVENT. |
1755 EVENT should be a timeout, misc-user, or eval event. | 1670 EVENT should be a timeout, misc-user, or eval event. |
1844 props = Fcons (Qfunction, Fcons (Fevent_function (event), props)); | 1759 props = Fcons (Qfunction, Fcons (Fevent_function (event), props)); |
1845 break; | 1760 break; |
1846 | 1761 |
1847 case magic_eval_event: | 1762 case magic_eval_event: |
1848 case magic_event: | 1763 case magic_event: |
1764 break; | |
1765 | |
1849 case empty_event: | 1766 case empty_event: |
1767 RETURN_UNGCPRO (Qnil); | |
1850 break; | 1768 break; |
1851 | 1769 |
1852 default: | 1770 default: |
1853 abort (); | 1771 abort (); |
1854 break; /* not reached; warning suppression */ | 1772 break; /* not reached; warning suppression */ |
1916 defsymbol (&Qprocess_event_p, "process-event-p"); | 1834 defsymbol (&Qprocess_event_p, "process-event-p"); |
1917 defsymbol (&Qkey_press, "key-press"); | 1835 defsymbol (&Qkey_press, "key-press"); |
1918 defsymbol (&Qbutton_press, "button-press"); | 1836 defsymbol (&Qbutton_press, "button-press"); |
1919 defsymbol (&Qbutton_release, "button-release"); | 1837 defsymbol (&Qbutton_release, "button-release"); |
1920 defsymbol (&Qmisc_user, "misc-user"); | 1838 defsymbol (&Qmisc_user, "misc-user"); |
1839 defsymbol (&Qempty, "empty"); | |
1921 defsymbol (&Qascii_character, "ascii-character"); | 1840 defsymbol (&Qascii_character, "ascii-character"); |
1922 } | 1841 } |
1923 | 1842 |
1924 void | 1843 void |
1925 vars_of_events (void) | 1844 vars_of_events (void) |