summaryrefslogtreecommitdiff
path: root/src/keyboard.c
diff options
context:
space:
mode:
authorGerd Moellmann <gerd@gnu.org>2000-08-18 03:13:27 +0000
committerGerd Moellmann <gerd@gnu.org>2000-08-18 03:13:27 +0000
commite4457b09c80553497e5930a2c0b0a6125f53d927 (patch)
treec39369c53360d5c99f4d51e709ebef27ca5991fc /src/keyboard.c
parent4618074a71d30b991896a62e1ce5cbbba3baeb74 (diff)
downloademacs-e4457b09c80553497e5930a2c0b0a6125f53d927.tar.gz
(kbd_buffer_get_event): Handle the case that the
second half of a HELP_EVENT is found at the start of kbd_buffer.
Diffstat (limited to 'src/keyboard.c')
-rw-r--r--src/keyboard.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/src/keyboard.c b/src/keyboard.c
index 4d48c22f30e..97687aad09f 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -3474,22 +3474,26 @@ kbd_buffer_get_event (kbp, used_mouse_menu)
kbd_fetch_ptr = event + 1;
else if (event->kind == HELP_EVENT)
{
- /* There are always two consecutive HELP_EVENTs in the
- input queue. */
+ /* There are always two HELP_EVENTs in the input queue. */
Lisp_Object object, position, help, frame, window;
-
+
xassert (event->code == 0);
frame = event->frame_or_window;
object = event->arg;
position = event->x;
- xassert ((event + 1)->code == 1);
- help = (event + 1)->arg;
- window = (event + 1)->frame_or_window;
+
+ kbd_fetch_ptr = event + 1;
+ event = ((kbd_fetch_ptr < kbd_buffer + KBD_BUFFER_SIZE)
+ ? kbd_fetch_ptr
+ : kbd_buffer);
+ xassert (event->code == 1);
+ help = event->arg;
+ window = event->frame_or_window;
if (!WINDOWP (window))
window = Qnil;
obj = Fcons (Qhelp_echo,
list5 (frame, help, window, object, position));
- kbd_fetch_ptr = event + 2;
+ kbd_fetch_ptr = event + 1;
}
else if (event->kind == FOCUS_IN_EVENT)
{