aboutsummaryrefslogtreecommitdiffstats
path: root/src/keyboard.c
diff options
context:
space:
mode:
authorEli Zaretskii2012-11-13 16:17:18 +0200
committerEli Zaretskii2012-11-13 16:17:18 +0200
commit3c4ca7155293ffc2d04708007131bcbc882d8913 (patch)
tree61787be8cd43b6fb3d5159852fbd186eea404de7 /src/keyboard.c
parent5ade42a5114255c43117065494b96d480c1e1588 (diff)
parentc708524567662c8911c5ab2695acc7bda0383705 (diff)
downloademacs-3c4ca7155293ffc2d04708007131bcbc882d8913.tar.gz
emacs-3c4ca7155293ffc2d04708007131bcbc882d8913.zip
Merge from trunk.
Diffstat (limited to 'src/keyboard.c')
-rw-r--r--src/keyboard.c31
1 files changed, 16 insertions, 15 deletions
diff --git a/src/keyboard.c b/src/keyboard.c
index 0029304ea8e..98c1cc0b78b 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -3419,20 +3419,20 @@ int stop_character EXTERNALLY_VISIBLE;
3419static KBOARD * 3419static KBOARD *
3420event_to_kboard (struct input_event *event) 3420event_to_kboard (struct input_event *event)
3421{ 3421{
3422 Lisp_Object frame; 3422 /* Not applicable for these special events. */
3423 frame = event->frame_or_window; 3423 if (event->kind == SELECTION_REQUEST_EVENT
3424 if (CONSP (frame)) 3424 || event->kind == SELECTION_CLEAR_EVENT)
3425 frame = XCAR (frame); 3425 return NULL;
3426 else if (WINDOWP (frame))
3427 frame = WINDOW_FRAME (XWINDOW (frame));
3428
3429 /* There are still some events that don't set this field.
3430 For now, just ignore the problem.
3431 Also ignore dead frames here. */
3432 if (!FRAMEP (frame) || !FRAME_LIVE_P (XFRAME (frame)))
3433 return 0;
3434 else 3426 else
3435 return FRAME_KBOARD (XFRAME (frame)); 3427 {
3428 Lisp_Object obj = event->frame_or_window;
3429 /* There are some events that set this field to nil or string. */
3430 if (WINDOWP (obj))
3431 obj = WINDOW_FRAME (XWINDOW (obj));
3432 /* Also ignore dead frames here. */
3433 return ((FRAMEP (obj) && FRAME_LIVE_P (XFRAME (obj)))
3434 ? FRAME_KBOARD (XFRAME (obj)) : NULL);
3435 }
3436} 3436}
3437 3437
3438#ifdef subprocesses 3438#ifdef subprocesses
@@ -12189,14 +12189,15 @@ mark_kboards (void)
12189 { 12189 {
12190 if (event == kbd_buffer + KBD_BUFFER_SIZE) 12190 if (event == kbd_buffer + KBD_BUFFER_SIZE)
12191 event = kbd_buffer; 12191 event = kbd_buffer;
12192 /* These two special event types has no Lisp_Objects to mark. */
12192 if (event->kind != SELECTION_REQUEST_EVENT 12193 if (event->kind != SELECTION_REQUEST_EVENT
12193 && event->kind != SELECTION_CLEAR_EVENT) 12194 && event->kind != SELECTION_CLEAR_EVENT)
12194 { 12195 {
12195 mark_object (event->x); 12196 mark_object (event->x);
12196 mark_object (event->y); 12197 mark_object (event->y);
12198 mark_object (event->frame_or_window);
12199 mark_object (event->arg);
12197 } 12200 }
12198 mark_object (event->frame_or_window);
12199 mark_object (event->arg);
12200 } 12201 }
12201 } 12202 }
12202} 12203}