summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChong Yidong <cyd@gnu.org>2011-12-05 23:21:48 +0800
committerChong Yidong <cyd@gnu.org>2011-12-05 23:21:48 +0800
commit3a6ad4f050f93ee8b609da50cb9e7ab8c934a9d6 (patch)
tree280d7f0087dcd64f035649719f908ca296cb17c0
parentebf10822d1ce7579624ddf78a14f9bf114268888 (diff)
downloademacs-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/ChangeLog5
-rw-r--r--src/keyboard.c25
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);