diff options
| author | Martin Rudalics | 2021-10-12 09:53:57 +0200 |
|---|---|---|
| committer | Martin Rudalics | 2021-10-12 09:53:57 +0200 |
| commit | 7865bd6782dacf506de8f69064f018de444da27f (patch) | |
| tree | 22560926e30a2a8f2541226dc4b9c7116b9b76f4 /src | |
| parent | 7e185bc9bae85ac3b50f9b7bd4b3c33bb8a016a8 (diff) | |
| download | emacs-7865bd6782dacf506de8f69064f018de444da27f.tar.gz emacs-7865bd6782dacf506de8f69064f018de444da27f.zip | |
Have 'while-no-input-ignore-events' handle idle timers too (Bug#49997)
* src/keyboard.c (read_char): Use Vwhile_no_input_ignore_events to
check which idle timers should be resumed (Bug#49997).
(init_while_no_input_ignore_events): New function to
initialize Vwhile_no_input_ignore_events.
(Vwhile_no_input_ignore_events): Say in doc-string that events in
this list do not stop idle timers.
* lisp/subr.el (while-no-input): Remove initialization of
'while-no-input-ignore-events'; do that in keyboard.c now.
Diffstat (limited to 'src')
| -rw-r--r-- | src/keyboard.c | 43 |
1 files changed, 28 insertions, 15 deletions
diff --git a/src/keyboard.c b/src/keyboard.c index 7184b1509b1..ce3b900b485 100644 --- a/src/keyboard.c +++ b/src/keyboard.c | |||
| @@ -2943,20 +2943,8 @@ read_char (int commandflag, Lisp_Object map, | |||
| 2943 | last_input_event = c; | 2943 | last_input_event = c; |
| 2944 | call4 (Qcommand_execute, tem, Qnil, Fvector (1, &last_input_event), Qt); | 2944 | call4 (Qcommand_execute, tem, Qnil, Fvector (1, &last_input_event), Qt); |
| 2945 | 2945 | ||
| 2946 | if (CONSP (c) | 2946 | if (CONSP (c) && !NILP (Fmemq (XCAR (c), Vwhile_no_input_ignore_events)) |
| 2947 | && (EQ (XCAR (c), Qselect_window) | 2947 | && !end_time) |
| 2948 | || EQ (XCAR (c), Qfocus_out) | ||
| 2949 | #ifdef HAVE_DBUS | ||
| 2950 | || EQ (XCAR (c), Qdbus_event) | ||
| 2951 | #endif | ||
| 2952 | #ifdef USE_FILE_NOTIFY | ||
| 2953 | || EQ (XCAR (c), Qfile_notify) | ||
| 2954 | #endif | ||
| 2955 | #ifdef THREADS_ENABLED | ||
| 2956 | || EQ (XCAR (c), Qthread_event) | ||
| 2957 | #endif | ||
| 2958 | || EQ (XCAR (c), Qconfig_changed_event)) | ||
| 2959 | && !end_time) | ||
| 2960 | /* We stopped being idle for this event; undo that. This | 2948 | /* We stopped being idle for this event; undo that. This |
| 2961 | prevents automatic window selection (under | 2949 | prevents automatic window selection (under |
| 2962 | mouse-autoselect-window) from acting as a real input event, for | 2950 | mouse-autoselect-window) from acting as a real input event, for |
| @@ -11605,6 +11593,27 @@ static const struct event_head head_table[] = { | |||
| 11605 | {SYMBOL_INDEX (Qselect_window), SYMBOL_INDEX (Qswitch_frame)} | 11593 | {SYMBOL_INDEX (Qselect_window), SYMBOL_INDEX (Qswitch_frame)} |
| 11606 | }; | 11594 | }; |
| 11607 | 11595 | ||
| 11596 | static Lisp_Object | ||
| 11597 | init_while_no_input_ignore_events (void) | ||
| 11598 | { | ||
| 11599 | Lisp_Object events = listn (9, Qselect_window, Qhelp_echo, Qmove_frame, | ||
| 11600 | Qiconify_frame, Qmake_frame_visible, | ||
| 11601 | Qfocus_in, Qfocus_out, Qconfig_changed_event, | ||
| 11602 | Qselection_request); | ||
| 11603 | |||
| 11604 | #ifdef HAVE_DBUS | ||
| 11605 | events = Fcons (Qdbus_event, events); | ||
| 11606 | #endif | ||
| 11607 | #ifdef USE_FILE_NOTIFY | ||
| 11608 | events = Fcons (Qfile_notify, events); | ||
| 11609 | #endif | ||
| 11610 | #ifdef THREADS_ENABLED | ||
| 11611 | events = Fcons (Qthread_event, events); | ||
| 11612 | #endif | ||
| 11613 | |||
| 11614 | return events; | ||
| 11615 | } | ||
| 11616 | |||
| 11608 | static void syms_of_keyboard_for_pdumper (void); | 11617 | static void syms_of_keyboard_for_pdumper (void); |
| 11609 | 11618 | ||
| 11610 | void | 11619 | void |
| @@ -12499,7 +12508,11 @@ If nil, Emacs crashes immediately in response to fatal signals. */); | |||
| 12499 | 12508 | ||
| 12500 | DEFVAR_LISP ("while-no-input-ignore-events", | 12509 | DEFVAR_LISP ("while-no-input-ignore-events", |
| 12501 | Vwhile_no_input_ignore_events, | 12510 | Vwhile_no_input_ignore_events, |
| 12502 | doc: /* Ignored events from while-no-input. */); | 12511 | doc: /* Ignored events from `while-no-input'. |
| 12512 | Events in this list do not count as pending input while running | ||
| 12513 | `while-no-input' and do not cause any idle timers to get reset when they | ||
| 12514 | occur. */); | ||
| 12515 | Vwhile_no_input_ignore_events = init_while_no_input_ignore_events (); | ||
| 12503 | 12516 | ||
| 12504 | DEFVAR_BOOL ("translate-upper-case-key-bindings", | 12517 | DEFVAR_BOOL ("translate-upper-case-key-bindings", |
| 12505 | translate_upper_case_key_bindings, | 12518 | translate_upper_case_key_bindings, |