From 3a6ad4f050f93ee8b609da50cb9e7ab8c934a9d6 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Mon, 5 Dec 2011 23:21:48 +0800 Subject: [PATCH] Handle X selection requests in input-pending-p. * src/keyboard.c (process_special_events): New function. (swallow_events, Finput_pending_p): Use it. Fixes: debbugs:10195 --- src/ChangeLog | 5 +++++ src/keyboard.c | 25 +++++++++++++++++++------ 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 0f0365b5bac..e22d6cb8cfb 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2011-12-05 Chong Yidong + + * keyboard.c (process_special_events): New function. + (swallow_events, Finput_pending_p): Use it (Bug#10195). + 2011-12-05 Paul Eggert * coding.c (encode_designation_at_bol): Don't use uninitialized diff --git a/src/keyboard.c b/src/keyboard.c index a114e495cf7..2df1ba742ba 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -465,6 +465,7 @@ static Lisp_Object (Fcommand_execute) (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object); static void handle_interrupt (void); static void quit_throw_to_read_char (int) NO_RETURN; +static void process_special_events (void); static void timer_start_idle (void); static void timer_stop_idle (void); static void timer_resume_idle (void); @@ -4145,14 +4146,12 @@ kbd_buffer_get_event (KBOARD **kbp, return (obj); } -/* Process any events that are not user-visible, - then return, without reading any user-visible events. */ +/* Process any non-user-visible events (currently X selection events), + without reading any user-visible events. */ -void -swallow_events (int do_display) +static void +process_special_events (void) { - int old_timers_run; - while (kbd_fetch_ptr != kbd_store_ptr) { struct input_event *event; @@ -4187,6 +4186,17 @@ swallow_events (int do_display) else break; } +} + +/* Process any events that are not user-visible, run timer events that + are ripe, and return, without reading any user-visible events. */ + +void +swallow_events (int do_display) +{ + int old_timers_run; + + process_special_events (); old_timers_run = timers_run; get_input_pending (&input_pending, READABLE_EVENTS_DO_TIMERS_NOW); @@ -10522,6 +10532,9 @@ if there is a doubt, the value is t. */) || !NILP (Vunread_input_method_events)) return (Qt); + /* Process non-user-visible events (Bug#10195). */ + process_special_events (); + get_input_pending (&input_pending, READABLE_EVENTS_DO_TIMERS_NOW | READABLE_EVENTS_FILTER_EVENTS); -- 2.39.2