Mercurial > hg > xemacs-beta
diff 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 |
line wrap: on
line diff
--- a/src/events.c Mon Aug 13 09:59:07 2007 +0200 +++ b/src/events.c Mon Aug 13 10:00:02 2007 +0200 @@ -66,6 +66,11 @@ Lisp_Object Qkey_press, Qbutton_press, Qbutton_release, Qmisc_user; Lisp_Object Qascii_character; +#ifdef HAVE_OFFIX_DND +Lisp_Object Qdnd_drop_event_p; +Lisp_Object Qdnd_drop; +#endif + /* #### Ad-hoc hack. Should be part of define_lrecord_implementation */ void clear_event_resource (void) @@ -138,6 +143,7 @@ case magic_event: case empty_event: case dead_event: + case dnd_drop_event: break; default: abort (); @@ -211,6 +217,9 @@ case dead_event: write_c_string ("#<DEALLOCATED-EVENT", printcharfun); break; + case dnd_drop_event: + print_event_1 ("#<dnd-drop-event ", obj, printcharfun); + break; default: write_c_string ("#<UNKNOWN-EVENT-TYPE", printcharfun); break; @@ -264,6 +273,13 @@ internal_equal (e1->event.magic_eval.object, e2->event.magic_eval.object, 0)); +#ifdef HAVE_OFFIX_DND + case dnd_drop_event: + return (e1->event.dnd_drop.button == e2->event.dnd_drop.button && + e1->event.dnd_drop.modifiers == e2->event.dnd_drop.modifiers && + EQ (e1->event.dnd_drop.data, e2->event.dnd_drop.data)); +#endif + case magic_event: { struct console *con = XCONSOLE (CDFW_CONSOLE (e1->channel)); @@ -328,6 +344,12 @@ (unsigned long) e->event.magic_eval.internal_function, internal_hash (e->event.magic_eval.object, depth + 1)); +#ifdef HAVE_OFFIX_DND + case dnd_drop_event: + return HASH4 (hash, e->event.dnd_drop.button, e->event.dnd_drop.modifiers, + LISP_HASH(e->event.dnd_drop.data)); +#endif + case magic_event: { struct console *con = XCONSOLE (CDFW_CONSOLE (EVENT_CHANNEL (e))); @@ -397,6 +419,7 @@ e->event_type = empty_event; else /* not allowed: Qmisc_user, Qprocess, Qtimeout, Qmagic, Qmagic_eval */ + /* dnd_drop is also not allowed */ signal_simple_error ("Invalid event type", type); /* Process the plist. */ @@ -758,6 +781,7 @@ case button_press_event: case button_release_event: case misc_user_event: + case dnd_drop_event: return 1; default: return 0; @@ -1015,6 +1039,9 @@ int mouse_p = 0; int mod = 0; Lisp_Object key; +#ifdef HAVE_OFFIX_DND + int dnd_p = 0; +#endif switch (event->event_type) { @@ -1059,6 +1086,15 @@ else strcpy (buf, "???"); return; } +#ifdef HAVE_OFFIX_DND + case dnd_drop_event: + { + dnd_p++; + mod = event->event.dnd_drop.modifiers; + key = make_char (event->event.dnd_drop.button + '0'); + break; + } +#endif case magic_eval_event: strcpy (buf, "magic-eval"); return; case pointer_motion_event: strcpy (buf, "motion"); return; case misc_user_event: strcpy (buf, "misc-user"); return; @@ -1083,6 +1119,15 @@ modprint1 ("button"); --mouse_p; } + +#ifdef HAVE_OFFIX_DND + switch (dnd_p) + { + case 1: + modprint1 ("drop"); + } +#endif + #undef modprint #undef modprint1 @@ -1216,6 +1261,7 @@ case process_event: return Qprocess; case timeout_event: return Qtimeout; case eval_event: return Qeval; + case dnd_drop_event: return Qdnd_drop; case magic_event: case magic_eval_event: return Qmagic; @@ -1270,6 +1316,8 @@ */ (event)) { +#ifndef HAVE_OFFIX_DND + CHECK_EVENT_TYPE2 (event, button_press_event, button_release_event, Qbutton_event_p); #ifdef HAVE_WINDOW_SYSTEM @@ -1277,6 +1325,21 @@ #else /* !HAVE_WINDOW_SYSTEM */ return Qzero; #endif /* !HAVE_WINDOW_SYSTEM */ + +#else /* HAVE_OFFIX_DND */ + + CHECK_LIVE_EVENT (event); + if (XEVENT(event)->event_type == (button_press_event) || + XEVENT(event)->event_type == (button_release_event)) + /* we always have X if we have OffiX !! */ + return make_int (XEVENT (event)->event.button.button); + else if (XEVENT(event)->event_type == (dnd_drop_event)) + /* we always have X if we have OffiX !! */ + return make_int (XEVENT (event)->event.button.button); + else + event = wrong_type_argument ((Qbutton_event_p),(event)); + +#endif } DEFUN ("event-modifier-bits", Fevent_modifier_bits, 1, 1, 0, /* @@ -1297,6 +1360,10 @@ return make_int (XEVENT (event)->event.button.modifiers); case pointer_motion_event: return make_int (XEVENT (event)->event.motion.modifiers); +#ifdef HAVE_OFFIX_DND + case dnd_drop_event: + return make_int (XEVENT (event)->event.dnd_drop.modifiers); +#endif default: event = wrong_type_argument (intern ("key-or-mouse-event-p"), event); goto again; @@ -1338,6 +1405,13 @@ *x = XEVENT (event)->event.button.x; *y = XEVENT (event)->event.button.y; } +#ifdef HAVE_OFFIX_DND + else if (XEVENT (event)->event_type == dnd_drop_event) + { + *x = XEVENT (event)->event.dnd_drop.x; + *y = XEVENT (event)->event.dnd_drop.y; + } +#endif else return 0; @@ -1486,6 +1560,12 @@ pix_x = XEVENT (event)->event.button.x; pix_y = XEVENT (event)->event.button.y; break; +#ifdef HAVE_OFFIX_DND + case dnd_drop_event : + pix_x = XEVENT (event)->event.dnd_drop.x; + pix_y = XEVENT (event)->event.dnd_drop.y; + break; +#endif default: dead_wrong_type_argument (Qmouse_event_p, event); } @@ -1833,6 +1913,26 @@ } } +#ifdef HAVE_OFFIX_DND +DEFUN ("event-dnd-data", Fevent_dnd_data, 1, 1, 0, /* +Return the Dnd data list of EVENT. +EVENT should be a dnd_drop (later also dnd_drag) event. +*/ + (event)) +{ + again: + CHECK_LIVE_EVENT (event); + switch (XEVENT (event)->event_type) + { + case dnd_drop_event: + return XEVENT (event)->event.dnd_drop.data; + default: + event = wrong_type_argument (Qdnd_drop_event_p, event); + goto again; + } +} +#endif /* HAVE_OFFIX_DND */ + DEFUN ("event-properties", Fevent_properties, 1, 1, 0, /* Return a list of all of the properties of EVENT. This is in the form of a property list (alternating keyword/value pairs). @@ -1887,6 +1987,16 @@ props = Fcons (Qfunction, Fcons (Fevent_function (event), props)); break; +#ifdef HAVE_OFFIX_DND + case dnd_drop_event: + props = Fcons (Qy, Fcons (Fevent_y_pixel (event), props)); + props = Fcons (Qx, Fcons (Fevent_x_pixel (event), props)); + props = Fcons (Qmodifiers, Fcons (Fevent_modifiers (event), props)); + props = Fcons (Qbutton, Fcons (Fevent_button (event), props)); + props = Fcons (Qdnd_data, Fcons (Fevent_dnd_data (event), props)); + break; +#endif + case magic_eval_event: case magic_event: break; @@ -1953,6 +2063,9 @@ DEFSUBR (Fevent_process); DEFSUBR (Fevent_function); DEFSUBR (Fevent_object); +#ifdef HAVE_OFFIX_DND + DEFSUBR (Fevent_dnd_data); +#endif defsymbol (&Qeventp, "eventp"); defsymbol (&Qevent_live_p, "event-live-p"); @@ -1965,6 +2078,10 @@ defsymbol (&Qbutton_release, "button-release"); defsymbol (&Qmisc_user, "misc-user"); defsymbol (&Qascii_character, "ascii-character"); +#ifdef HAVE_OFFIX_DND + defsymbol (&Qdnd_drop_event_p, "dnd-drop-event-p"); + defsymbol (&Qdnd_drop, "dnd-drop"); +#endif } void