From ef12da4ba1dedc24838f3e92b35e67343a59c355 Mon Sep 17 00:00:00 2001 From: Po Lu Date: Thu, 1 Jan 2026 10:23:53 +0800 Subject: [PATCH] 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) : New symbols. (bug#80022) --- src/keyboard.c | 50 ++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 38 insertions(+), 12 deletions(-) diff --git a/src/keyboard.c b/src/keyboard.c index 776b87bde73..5e57c79b5a9 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -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");