diff options
| author | Chong Yidong <cyd@gnu.org> | 2011-12-05 23:21:48 +0800 |
|---|---|---|
| committer | Chong Yidong <cyd@gnu.org> | 2011-12-05 23:21:48 +0800 |
| commit | 3a6ad4f050f93ee8b609da50cb9e7ab8c934a9d6 (patch) | |
| tree | 280d7f0087dcd64f035649719f908ca296cb17c0 | |
| parent | ebf10822d1ce7579624ddf78a14f9bf114268888 (diff) | |
| download | emacs-3a6ad4f050f93ee8b609da50cb9e7ab8c934a9d6.tar.gz | |
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
| -rw-r--r-- | src/ChangeLog | 5 | ||||
| -rw-r--r-- | 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 <cyd@gnu.org> + + * keyboard.c (process_special_events): New function. + (swallow_events, Finput_pending_p): Use it (Bug#10195). + 2011-12-05 Paul Eggert <eggert@cs.ucla.edu> * 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); |
