From 2b371ff75d64fb34466119e33f5cbb2c5eb27364 Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Fri, 2 Nov 2012 13:44:08 +0400 Subject: [PATCH] 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. --- src/ChangeLog | 12 ++++++++++++ src/keyboard.c | 26 ++++++++++---------------- src/termhooks.h | 12 ++---------- 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 + + 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 * 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; -- 2.39.5