Mercurial > hg > xemacs-beta
diff src/events.c @ 183:e121b013d1f0 r20-3b18
Import from CVS: tag r20-3b18
author | cvs |
---|---|
date | Mon, 13 Aug 2007 09:54:23 +0200 |
parents | 8eaf7971accc |
children | 3d6bfa290dbd |
line wrap: on
line diff
--- a/src/events.c Mon Aug 13 09:53:23 2007 +0200 +++ b/src/events.c Mon Aug 13 09:54:23 2007 +0200 @@ -266,23 +266,19 @@ case magic_event: { - Lisp_Object console; - - console = CDFW_CONSOLE (e1->channel); + struct console *con = XCONSOLE (CDFW_CONSOLE (e1->channel)); #ifdef HAVE_X_WINDOWS - /* XEvent is actually a union which means that we can't just use == */ - if (CONSOLE_X_P (XCONSOLE (console))) - return !memcmp ((XEvent *) &e1->event.magic.underlying_x_event, - (XEvent *) &e2->event.magic.underlying_x_event, - sizeof (e1->event.magic.underlying_x_event)); + if (CONSOLE_X_P (con)) + return (e1->event.magic.underlying_x_event.xany.serial == + e2->event.magic.underlying_x_event.xany.serial); #endif #ifdef HAVE_TTY - if (CONSOLE_TTY_P (XCONSOLE (console))) + if (CONSOLE_TTY_P (con)) return (e1->event.magic.underlying_tty_event == e2->event.magic.underlying_tty_event); #endif - return 1; + return 1; /* not reached */ } case empty_event: /* Empty and deallocated events are equal. */ @@ -334,18 +330,15 @@ case magic_event: { - Lisp_Object console = CDFW_CONSOLE (EVENT_CHANNEL (e)); + struct console *con = XCONSOLE (CDFW_CONSOLE (EVENT_CHANNEL (e))); #ifdef HAVE_X_WINDOWS - if (CONSOLE_X_P (XCONSOLE (console))) - return - HASH2 (hash, - memory_hash (&e->event.magic.underlying_x_event, - sizeof (e->event.magic.underlying_x_event))); + if (CONSOLE_X_P (con)) + return HASH2 (hash, e->event.magic.underlying_x_event.xany.serial); #endif - return - HASH2 (hash, - memory_hash (&e->event.magic.underlying_tty_event, - sizeof (e->event.magic.underlying_tty_event))); +#ifdef HAVE_TTY + if (CONSOLE_TTY_P (con)) + return HASH2 (hash, e->event.magic.underlying_tty_event); +#endif } case empty_event: @@ -356,7 +349,7 @@ abort (); } - return 0; + return 0; /* unreached */ } @@ -924,26 +917,27 @@ } case magic_event: { - CONST char *name = 0; - Lisp_Object console = CDFW_CONSOLE (EVENT_CHANNEL (event)); + CONST char *name = NULL; #ifdef HAVE_X_WINDOWS - if (CONSOLE_X_P (XCONSOLE (console))) - name = - x_event_name (event->event.magic.underlying_x_event.xany.type); -#endif + { + Lisp_Object console = CDFW_CONSOLE (EVENT_CHANNEL (event)); + if (CONSOLE_X_P (XCONSOLE (console))) + name = x_event_name (event->event.magic.underlying_x_event.type); + } +#endif /* HAVE_X_WINDOWS */ if (name) strcpy (buf, name); else strcpy (buf, "???"); return; } 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; - case eval_event: strcpy (buf, "eval"); return; - case process_event: strcpy (buf, "process");return; - case timeout_event: strcpy (buf, "timeout");return; - case empty_event: strcpy (buf, "empty"); return; - case dead_event: strcpy (buf, "DEAD-EVENT"); return; + case pointer_motion_event: strcpy (buf, "motion"); return; + case misc_user_event: strcpy (buf, "misc-user"); return; + case eval_event: strcpy (buf, "eval"); return; + case process_event: strcpy (buf, "process"); return; + case timeout_event: strcpy (buf, "timeout"); return; + case empty_event: strcpy (buf, "empty"); return; + case dead_event: strcpy (buf, "DEAD-EVENT"); return; default: abort (); } @@ -989,9 +983,9 @@ } else { - memcpy (buf, string_data (XSYMBOL (key)->name), - string_length (XSYMBOL (key)->name) + 1); - str += string_length (XSYMBOL (key)->name); + struct Lisp_String *name = XSYMBOL (key)->name; + memcpy (buf, string_data (name), string_length (name) + 1); + str += string_length (name); } } else @@ -1157,22 +1151,23 @@ DEFUN ("event-modifier-bits", Fevent_modifier_bits, 1, 1, 0, /* Return a number representing the modifier keys which were down -when the given mouse or keyboard event was produced. See also the function -event-modifiers. +when the given mouse or keyboard event was produced. +See also the function event-modifiers. */ (event)) { again: CHECK_LIVE_EVENT (event); - if (XEVENT (event)->event_type == key_press_event) - return make_int (XEVENT (event)->event.key.modifiers); - else if (XEVENT (event)->event_type == button_press_event || - XEVENT (event)->event_type == button_release_event) - return make_int (XEVENT (event)->event.button.modifiers); - else if (XEVENT (event)->event_type == pointer_motion_event) - return make_int (XEVENT (event)->event.motion.modifiers); - else + switch (XEVENT (event)->event_type) { + case key_press_event: + return make_int (XEVENT (event)->event.key.modifiers); + case button_press_event: + case button_release_event: + return make_int (XEVENT (event)->event.button.modifiers); + case pointer_motion_event: + return make_int (XEVENT (event)->event.motion.modifiers); + default: event = wrong_type_argument (intern ("key-or-mouse-event-p"), event); goto again; }