aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMartin Rudalics2021-10-12 09:53:57 +0200
committerMartin Rudalics2021-10-12 09:53:57 +0200
commit7865bd6782dacf506de8f69064f018de444da27f (patch)
tree22560926e30a2a8f2541226dc4b9c7116b9b76f4 /src
parent7e185bc9bae85ac3b50f9b7bd4b3c33bb8a016a8 (diff)
downloademacs-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.c43
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
11596static Lisp_Object
11597init_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
11608static void syms_of_keyboard_for_pdumper (void); 11617static void syms_of_keyboard_for_pdumper (void);
11609 11618
11610void 11619void
@@ -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'.
12512Events 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
12514occur. */);
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,