]> git.eshelyaron.com Git - emacs.git/commitdiff
Remove pad from struct input_event.
authorDmitry Antipov <dmantipov@yandex.ru>
Fri, 2 Nov 2012 09:44:08 +0000 (13:44 +0400)
committerDmitry Antipov <dmantipov@yandex.ru>
Fri, 2 Nov 2012 09:44:08 +0000 (13:44 +0400)
* 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
src/keyboard.c
src/termhooks.h
src/xterm.c

index e762eb13b87b401633bda790c1126d8c93be7676..bcbc455dba6ae8a8148e7f6baf2e7bc9ff048b72 100644 (file)
@@ -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)
index ab20ef71660231e8c48b2ee38a22c6be8e1fab0e..dfd4d0c26485981107fb698c5192e818fae9e989 100644 (file)
@@ -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);
       }
   }
 }
index c33c2dd158752841000303da9979d861b9d37168..2d97fcdbc1e604e541cf647366b4afb19f4ee401 100644 (file)
@@ -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
index f8420d13a32e619d5d30ab691c3844b85016ccc3..4dd1dee0f752549a19eb4e4da623d2c18bd41634 100644 (file)
@@ -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;