Subj : src/conio/win32gdi.c To : Git commit to main/sbbs/master From : Deucе Date : Sat Mar 21 2026 23:25:27 https://gitlab.synchro.net/main/sbbs/-/commit/cb106dbe65584cdf688429e1 Modified Files: src/conio/win32gdi.c Log Message: Fix stuck modifier keys by handling WM_KILLFOCUS/WM_SETFOCUS in gdi_WndProc (ticket 226) WM_KILLFOCUS and WM_SETFOCUS are sent (synchronous), not posted, so they go directly to gdi_WndProc bypassing the GetMessage/magic_message path entirely. The previous fix in magic_message never ran. Move mods to file scope so gdi_WndProc can access it. Clear mods on WM_KILLFOCUS, and re-sync from GetAsyncKeyState on WM_SETFOCUS to catch modifiers held across the focus boundary. Remove the WM_ACTIVATEAPP handler and message-loop sync machinery which were unnecessary — debug logging confirmed the thread keyboard state (GetKeyboardState) correctly showed Ctrl as released; only the mods variable was stale, causing magic_message to consume key events as Ctrl+key combos via the keyval table. Co-Authored-By: Claude Opus 4.6 (1M context) --- ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net .