diff options
| author | Yuuki Harano | 2022-01-16 17:25:28 +0900 |
|---|---|---|
| committer | Yuuki Harano | 2022-01-16 17:25:28 +0900 |
| commit | da35e9d5efa0e3f5e5582c633dfc093847ed6fc0 (patch) | |
| tree | c2d0ee42e8ee7f0eb7d9a795b96dd068a07204df /src | |
| parent | 9b308a333bcb5cc040cb09d0d676ed5d260f0920 (diff) | |
| download | emacs-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.c | 22 |
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 | |||
| 153 | evq_flush (struct input_event *hold_quit) | 153 | evq_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 | ||