aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorYuuki Harano2022-01-16 17:25:28 +0900
committerYuuki Harano2022-01-16 17:25:28 +0900
commitda35e9d5efa0e3f5e5582c633dfc093847ed6fc0 (patch)
treec2d0ee42e8ee7f0eb7d9a795b96dd068a07204df /src
parent9b308a333bcb5cc040cb09d0d676ed5d260f0920 (diff)
downloademacs-da35e9d5efa0e3f5e5582c633dfc093847ed6fc0.tar.gz
emacs-da35e9d5efa0e3f5e5582c633dfc093847ed6fc0.zip
* src/pgtkterm.c (evq_flush): Shift events one by one
Diffstat (limited to 'src')
-rw-r--r--src/pgtkterm.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/src/pgtkterm.c b/src/pgtkterm.c
index 0155ae991d3..4c38ff5a597 100644
--- a/src/pgtkterm.c
+++ b/src/pgtkterm.c
@@ -153,10 +153,24 @@ static int
153evq_flush (struct input_event *hold_quit) 153evq_flush (struct input_event *hold_quit)
154{ 154{
155 struct event_queue_t *evq = &event_q; 155 struct event_queue_t *evq = &event_q;
156 int i, n = evq->nr; 156 int n = 0;
157 for (i = 0; i < n; i++) 157
158 kbd_buffer_store_buffered_event (&evq->q[i], hold_quit); 158 while (evq->nr > 0)
159 evq->nr = 0; 159 {
160 /* kbd_buffer_store_buffered_event may do longjmp, so
161 we need to shift event queue first and pass the event
162 to kbd_buffer_store_buffered_event so that events in
163 queue are not processed twice. Bug#52941 */
164 union buffered_input_event ev = evq->q[0];
165 int i;
166 for (i = 1; i < evq->nr; i++)
167 evq->q[i - 1] = evq->q[i];
168 evq->nr--;
169
170 kbd_buffer_store_buffered_event (&ev, hold_quit);
171 n++;
172 }
173
160 return n; 174 return n;
161} 175}
162 176