diff options
| author | Eli Zaretskii | 2012-11-13 16:17:18 +0200 |
|---|---|---|
| committer | Eli Zaretskii | 2012-11-13 16:17:18 +0200 |
| commit | 3c4ca7155293ffc2d04708007131bcbc882d8913 (patch) | |
| tree | 61787be8cd43b6fb3d5159852fbd186eea404de7 /src/keyboard.c | |
| parent | 5ade42a5114255c43117065494b96d480c1e1588 (diff) | |
| parent | c708524567662c8911c5ab2695acc7bda0383705 (diff) | |
| download | emacs-3c4ca7155293ffc2d04708007131bcbc882d8913.tar.gz emacs-3c4ca7155293ffc2d04708007131bcbc882d8913.zip | |
Merge from trunk.
Diffstat (limited to 'src/keyboard.c')
| -rw-r--r-- | src/keyboard.c | 31 |
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; | |||
| 3419 | static KBOARD * | 3419 | static KBOARD * |
| 3420 | event_to_kboard (struct input_event *event) | 3420 | event_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 | } |