diff options
| author | Po Lu | 2026-01-01 10:23:53 +0800 |
|---|---|---|
| committer | Po Lu | 2026-01-01 10:24:49 +0800 |
| commit | ef12da4ba1dedc24838f3e92b35e67343a59c355 (patch) | |
| tree | ad40a768362f67909df827b583a6f2af86322bd1 /src | |
| parent | 9785e904f10e5facc74576dd0b3e59de5eadaa9b (diff) | |
| download | emacs-ef12da4ba1dedc24838f3e92b35e67343a59c355.tar.gz emacs-ef12da4ba1dedc24838f3e92b35e67343a59c355.zip | |
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)
Diffstat (limited to 'src')
| -rw-r--r-- | src/keyboard.c | 50 |
1 files 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) | |||
| 13280 | Lisp_Object events = list (Qselect_window, Qhelp_echo, Qmove_frame, | 13280 | Lisp_Object events = list (Qselect_window, Qhelp_echo, Qmove_frame, |
| 13281 | Qiconify_frame, Qmake_frame_visible, | 13281 | Qiconify_frame, Qmake_frame_visible, |
| 13282 | Qfocus_in, Qfocus_out, Qconfig_changed_event, | 13282 | Qfocus_in, Qfocus_out, Qconfig_changed_event, |
| 13283 | Qselection_request); | 13283 | Qselection_request, Qmonitors_changed, |
| 13284 | Qtoolkit_theme_changed); | ||
| 13284 | 13285 | ||
| 13285 | #ifdef HAVE_DBUS | 13286 | #ifdef HAVE_DBUS |
| 13286 | events = Fcons (Qdbus_event, events); | 13287 | events = Fcons (Qdbus_event, events); |
| @@ -13299,24 +13300,47 @@ init_while_no_input_ignore_events (void) | |||
| 13299 | static bool | 13300 | static bool |
| 13300 | is_ignored_event (union buffered_input_event *event) | 13301 | is_ignored_event (union buffered_input_event *event) |
| 13301 | { | 13302 | { |
| 13302 | Lisp_Object ignore_event; | 13303 | Lisp_Object ignore_event = Qnil; |
| 13303 | 13304 | ||
| 13304 | switch (event->kind) | 13305 | switch (event->kind) |
| 13305 | { | 13306 | { |
| 13306 | case FOCUS_IN_EVENT: ignore_event = Qfocus_in; break; | 13307 | case FOCUS_IN_EVENT: |
| 13307 | case FOCUS_OUT_EVENT: ignore_event = Qfocus_out; break; | 13308 | ignore_event = Qfocus_in; |
| 13308 | case HELP_EVENT: ignore_event = Qhelp_echo; break; | 13309 | break; |
| 13309 | case ICONIFY_EVENT: ignore_event = Qiconify_frame; break; | 13310 | case FOCUS_OUT_EVENT: |
| 13310 | case DEICONIFY_EVENT: ignore_event = Qmake_frame_visible; break; | 13311 | ignore_event = Qfocus_out; |
| 13311 | case SELECTION_REQUEST_EVENT: ignore_event = Qselection_request; break; | 13312 | break; |
| 13313 | case HELP_EVENT: | ||
| 13314 | ignore_event = Qhelp_echo; | ||
| 13315 | break; | ||
| 13316 | case ICONIFY_EVENT: | ||
| 13317 | ignore_event = Qiconify_frame; | ||
| 13318 | break; | ||
| 13319 | case DEICONIFY_EVENT: | ||
| 13320 | ignore_event = Qmake_frame_visible; | ||
| 13321 | break; | ||
| 13322 | case SELECTION_REQUEST_EVENT: | ||
| 13323 | ignore_event = Qselection_request; | ||
| 13324 | break; | ||
| 13312 | #ifdef USE_FILE_NOTIFY | 13325 | #ifdef USE_FILE_NOTIFY |
| 13313 | case FILE_NOTIFY_EVENT: ignore_event = Qfile_notify; break; | 13326 | case FILE_NOTIFY_EVENT: |
| 13327 | ignore_event = Qfile_notify; | ||
| 13328 | break; | ||
| 13314 | #endif | 13329 | #endif |
| 13315 | #ifdef HAVE_DBUS | 13330 | #ifdef HAVE_DBUS |
| 13316 | case DBUS_EVENT: ignore_event = Qdbus_event; break; | 13331 | case DBUS_EVENT: |
| 13332 | ignore_event = Qdbus_event; | ||
| 13333 | break; | ||
| 13317 | #endif | 13334 | #endif |
| 13318 | case SLEEP_EVENT: ignore_event = Qsleep_event; break; | 13335 | case SLEEP_EVENT: |
| 13319 | default: ignore_event = Qnil; break; | 13336 | ignore_event = Qsleep_event; |
| 13337 | break; | ||
| 13338 | case MONITORS_CHANGED_EVENT: | ||
| 13339 | ignore_event = Qmonitors_changed; | ||
| 13340 | break; | ||
| 13341 | case TOOLKIT_THEME_CHANGED_EVENT: | ||
| 13342 | ignore_event = Qtoolkit_theme_changed; | ||
| 13343 | break; | ||
| 13320 | } | 13344 | } |
| 13321 | 13345 | ||
| 13322 | return !NILP (Fmemq (ignore_event, Vwhile_no_input_ignore_events)); | 13346 | return !NILP (Fmemq (ignore_event, Vwhile_no_input_ignore_events)); |
| @@ -13422,6 +13446,8 @@ syms_of_keyboard (void) | |||
| 13422 | 13446 | ||
| 13423 | DEFSYM (Qtouch_end, "touch-end"); | 13447 | DEFSYM (Qtouch_end, "touch-end"); |
| 13424 | DEFSYM (Qsleep_event, "sleep-event"); | 13448 | DEFSYM (Qsleep_event, "sleep-event"); |
| 13449 | DEFSYM (Qmonitors_changed, "monitors-changed"); | ||
| 13450 | DEFSYM (Qtoolkit_theme_changed, "toolkit-theme-changed"); | ||
| 13425 | 13451 | ||
| 13426 | /* Menu and tool bar item parts. */ | 13452 | /* Menu and tool bar item parts. */ |
| 13427 | DEFSYM (QCenable, ":enable"); | 13453 | DEFSYM (QCenable, ":enable"); |