https://gitlab.synchro.net/main/sbbs/-/commit/5474fcd59c4d7d25ecdaaf38
Added Files:
src/doors/syncscumm/test/test_sst_input_evdev.c
Modified Files:
src/doors/syncscumm/door/sst_io.c src/doors/syncscumm/test/test_sst_input.c unit_sst_io.sh
Log Message:
syncscumm: gate the door-quit hotkey on Ctrl-Q, not bare q
The kitty and evdev keyboard decode paths in sst_io.c reserved an
unmodified 'q' as the door-quit hotkey. Those are exactly the paths
that carry every keystroke on kitty terminals (Foot, kitty, WezTerm)
and SyncTERM in evdev mode, so a bare 'q' never reached ScummVM at
all -- it quit the door instead of landing in the Global Main Menu's
save-name field, where names like "quicksave" need a literal 'q'.
Gate quit on Ctrl-Q in both paths instead, mirroring how Ctrl-S
(stats) is already gated and matching syncconquer/door/door_input.c's
actual convention (quit is Ctrl-Q there too, never bare 'q'). Ctrl-C
quit is untouched -- it was already correctly ctrl-gated in both
paths. Bare 'q' now falls through and is queued as an ordinary key.
The legacy P_NORMAL byte path's bare-'q' quit is unchanged; it is
out of scope for this fix.
Also corrected the in-code comment above the kitty block, which
inaccurately claimed this mirrors door_input.c consuming "Ctrl+letter
hotkeys across all three input modes" -- it now describes what the
code actually reserves (Ctrl-Q/Ctrl-C quit, Ctrl-S stats) and that
bare letters forward to the game.
Added regression coverage to test/test_sst_input.c (kitty CSI-u path, negotiated via the same "CSI?u" reply csi_final() already parses) and
a new test/test_sst_input_evdev.c (evdev physical-key path, its own
process since termgfx's "evdev wins" guard blocks enabling evdev in
a process that already negotiated kitty) -- both use the existing
SST_TEST sst_io_test_feed() seam, no new scaffolding. Verified both
fail against the pre-fix code and pass against the fix.
---
þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net