diff options
author | Dmitry Antipov <dmantipov@yandex.ru> | 2012-11-02 13:44:08 +0400 |
---|---|---|
committer | Dmitry Antipov <dmantipov@yandex.ru> | 2012-11-02 13:44:08 +0400 |
commit | 2b371ff75d64fb34466119e33f5cbb2c5eb27364 (patch) | |
tree | 0f1ac88cdd34916d10f02aa6a738a5473f136be8 | |
parent | 052f924a01f8a65ca0bfc9e6584302613e019489 (diff) | |
download | emacs-2b371ff75d64fb34466119e33f5cbb2c5eb27364.tar.gz |
Remove pad from struct input_event.
* termhooks.h (struct input_event): Remove padding field.
Adjust comment.
* keyboard.c (event_to_kboard): Simplify because frame_or_window
member is never cons for a long time. Adjust comment.
(mark_kboards): Adjust because SELECTION_REQUEST_EVENT and
SELECTION_CLEAR_EVENT has no Lisp_Objects to mark. Add comment.
* xterm.c (handle_one_xevent): Do not initialize frame_or_window
field of SELECTION_REQUEST_EVENT and SELECTION_CLEAR_EVENT.
-rw-r--r-- | src/ChangeLog | 12 | ||||
-rw-r--r-- | src/keyboard.c | 26 | ||||
-rw-r--r-- | src/termhooks.h | 12 | ||||
-rw-r--r-- | src/xterm.c | 2 |
4 files changed, 24 insertions, 28 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index e762eb13b87..bcbc455dba6 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,15 @@ +2012-11-02 Dmitry Antipov <dmantipov@yandex.ru> + + Remove pad from struct input_event. + * termhooks.h (struct input_event): Remove padding field. + Adjust comment. + * keyboard.c (event_to_kboard): Simplify because frame_or_window + member is never cons for a long time. Adjust comment. + (mark_kboards): Adjust because SELECTION_REQUEST_EVENT and + SELECTION_CLEAR_EVENT has no Lisp_Objects to mark. Add comment. + * xterm.c (handle_one_xevent): Do not initialize frame_or_window + field of SELECTION_REQUEST_EVENT and SELECTION_CLEAR_EVENT. + 2012-11-01 Eli Zaretskii <eliz@gnu.org> * w32proc.c (getpgrp, setpgid): New functions. (Bug#12776) diff --git a/src/keyboard.c b/src/keyboard.c index ab20ef71660..dfd4d0c2648 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -3416,20 +3416,13 @@ int stop_character EXTERNALLY_VISIBLE; static KBOARD * event_to_kboard (struct input_event *event) { - Lisp_Object frame; - frame = event->frame_or_window; - if (CONSP (frame)) - frame = XCAR (frame); - else if (WINDOWP (frame)) - frame = WINDOW_FRAME (XWINDOW (frame)); - - /* There are still some events that don't set this field. - For now, just ignore the problem. - Also ignore dead frames here. */ - if (!FRAMEP (frame) || !FRAME_LIVE_P (XFRAME (frame))) - return 0; - else - return FRAME_KBOARD (XFRAME (frame)); + Lisp_Object obj = event->frame_or_window; + /* There are some events that set this field to nil or string. */ + if (WINDOWP (obj)) + obj = WINDOW_FRAME (XWINDOW (obj)); + /* Also ignore dead frames here. */ + return ((FRAMEP (obj) && FRAME_LIVE_P (XFRAME (obj))) + ? FRAME_KBOARD (XFRAME (obj)) : NULL); } #ifdef subprocesses @@ -12173,14 +12166,15 @@ mark_kboards (void) { if (event == kbd_buffer + KBD_BUFFER_SIZE) event = kbd_buffer; + /* These two special event types has no Lisp_Objects to mark. */ if (event->kind != SELECTION_REQUEST_EVENT && event->kind != SELECTION_CLEAR_EVENT) { mark_object (event->x); mark_object (event->y); + mark_object (event->frame_or_window); + mark_object (event->arg); } - mark_object (event->frame_or_window); - mark_object (event->arg); } } } diff --git a/src/termhooks.h b/src/termhooks.h index c33c2dd1587..2d97fcdbc1e 100644 --- a/src/termhooks.h +++ b/src/termhooks.h @@ -242,16 +242,8 @@ struct input_event Lisp_Object x, y; Time timestamp; - /* This is padding just to put the frame_or_window field - past the size of struct selection_input_event. */ - int *padding[2]; - - /* This field is copied into a vector while the event is in the queue, - so that garbage collections won't kill it. */ - /* In a menu_bar_event, this is a cons cell whose car is the frame - and whose cdr is the Lisp object that is the event's value. */ - /* This field is last so that struct selection_input_event - does not overlap with it. */ + /* This field is copied into a vector while the event is in + the queue, so that garbage collections won't kill it. */ Lisp_Object frame_or_window; /* Additional event argument. This is used for TOOL_BAR_EVENTs and diff --git a/src/xterm.c b/src/xterm.c index f8420d13a32..4dd1dee0f75 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -6108,7 +6108,6 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, SELECTION_EVENT_DISPLAY (&inev.sie) = eventp->display; SELECTION_EVENT_SELECTION (&inev.sie) = eventp->selection; SELECTION_EVENT_TIME (&inev.sie) = eventp->time; - inev.ie.frame_or_window = Qnil; } break; @@ -6128,7 +6127,6 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, SELECTION_EVENT_TARGET (&inev.sie) = eventp->target; SELECTION_EVENT_PROPERTY (&inev.sie) = eventp->property; SELECTION_EVENT_TIME (&inev.sie) = eventp->time; - inev.ie.frame_or_window = Qnil; } break; |