summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Antipov <dmantipov@yandex.ru>2012-11-02 13:44:08 +0400
committerDmitry Antipov <dmantipov@yandex.ru>2012-11-02 13:44:08 +0400
commit2b371ff75d64fb34466119e33f5cbb2c5eb27364 (patch)
tree0f1ac88cdd34916d10f02aa6a738a5473f136be8
parent052f924a01f8a65ca0bfc9e6584302613e019489 (diff)
downloademacs-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/ChangeLog12
-rw-r--r--src/keyboard.c26
-rw-r--r--src/termhooks.h12
-rw-r--r--src/xterm.c2
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;