• src/doors/syncscumm/test/test_sst_input_evdev.csrc/doors/syncscumm/doo

    From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Saturday, July 18, 2026 03:02:49
    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