Don't permit special configuration events to trigger `throw-on-input'

* src/keyboard.c (init_while_no_input_ignore_events): Ignore
Qmonitors_changed and Qtoolkit_theme_changed events.
(is_ignored_event): Assign symbols to
{MONITOR_CHANGED,TOOLKIT_THEME_CHANGED}_EVENT.
(syms_of_keyboard) <Qmonitors_changed>
<Qtoolkit_theme_changed>: New symbols.  (bug#80022)
This commit is contained in:
Po Lu 2026-01-01 10:23:53 +08:00
parent 9785e904f1
commit ef12da4ba1

View file

@ -13280,7 +13280,8 @@ init_while_no_input_ignore_events (void)
Lisp_Object events = list (Qselect_window, Qhelp_echo, Qmove_frame,
Qiconify_frame, Qmake_frame_visible,
Qfocus_in, Qfocus_out, Qconfig_changed_event,
Qselection_request);
Qselection_request, Qmonitors_changed,
Qtoolkit_theme_changed);
#ifdef HAVE_DBUS
events = Fcons (Qdbus_event, events);
@ -13299,24 +13300,47 @@ init_while_no_input_ignore_events (void)
static bool
is_ignored_event (union buffered_input_event *event)
{
Lisp_Object ignore_event;
Lisp_Object ignore_event = Qnil;
switch (event->kind)
{
case FOCUS_IN_EVENT: ignore_event = Qfocus_in; break;
case FOCUS_OUT_EVENT: ignore_event = Qfocus_out; break;
case HELP_EVENT: ignore_event = Qhelp_echo; break;
case ICONIFY_EVENT: ignore_event = Qiconify_frame; break;
case DEICONIFY_EVENT: ignore_event = Qmake_frame_visible; break;
case SELECTION_REQUEST_EVENT: ignore_event = Qselection_request; break;
case FOCUS_IN_EVENT:
ignore_event = Qfocus_in;
break;
case FOCUS_OUT_EVENT:
ignore_event = Qfocus_out;
break;
case HELP_EVENT:
ignore_event = Qhelp_echo;
break;
case ICONIFY_EVENT:
ignore_event = Qiconify_frame;
break;
case DEICONIFY_EVENT:
ignore_event = Qmake_frame_visible;
break;
case SELECTION_REQUEST_EVENT:
ignore_event = Qselection_request;
break;
#ifdef USE_FILE_NOTIFY
case FILE_NOTIFY_EVENT: ignore_event = Qfile_notify; break;
case FILE_NOTIFY_EVENT:
ignore_event = Qfile_notify;
break;
#endif
#ifdef HAVE_DBUS
case DBUS_EVENT: ignore_event = Qdbus_event; break;
case DBUS_EVENT:
ignore_event = Qdbus_event;
break;
#endif
case SLEEP_EVENT: ignore_event = Qsleep_event; break;
default: ignore_event = Qnil; break;
case SLEEP_EVENT:
ignore_event = Qsleep_event;
break;
case MONITORS_CHANGED_EVENT:
ignore_event = Qmonitors_changed;
break;
case TOOLKIT_THEME_CHANGED_EVENT:
ignore_event = Qtoolkit_theme_changed;
break;
}
return !NILP (Fmemq (ignore_event, Vwhile_no_input_ignore_events));
@ -13422,6 +13446,8 @@ syms_of_keyboard (void)
DEFSYM (Qtouch_end, "touch-end");
DEFSYM (Qsleep_event, "sleep-event");
DEFSYM (Qmonitors_changed, "monitors-changed");
DEFSYM (Qtoolkit_theme_changed, "toolkit-theme-changed");
/* Menu and tool bar item parts. */
DEFSYM (QCenable, ":enable");