From a17d5466aee624831194dba4dbeaa3bec1769554 Mon Sep 17 00:00:00 2001 From: James Dansereau <106631954+jkdansereau@users.noreply.github.com> Date: Tue, 8 Sep 2026 20:24:35 -0400 Subject: [PATCH] fix(D196): re-hide the OS cursor after the F10 options overlay closes inputSuspendForOverlay() forces the OS cursor visible while the overlay is open; on close nothing re-hid it unless reconcileGrab() happened to re-grab (only true if the user had already clicked-to-lock in a stage). Opening the overlay from a menu, or from a stage not yet click-locked, left the cursor stuck visible over the game's own crosshair. Fix: re-assert applyCursorVisibility() once per controller-0 poll, right after reconcileGrab(). Unreachable while the overlay is open (early return above), so it only fires once the overlay has closed and self-heals every poll thereafter. Port-only, no render change; verify.sh bunker1 PASS. Owed: 5-second visual check - open F10 from a menu, close it, cursor gone. --- port/src/input.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/port/src/input.c b/port/src/input.c index 122b0161..aa725afa 100644 --- a/port/src/input.c +++ b/port/src/input.c @@ -520,6 +520,13 @@ unsigned inputComputePad(int idx, signed char *stick_x, signed char *stick_y) current_menu != GE_MENU_INVALID); reconcileGrab(menuMode); + /* D196: the F10 options overlay forces the OS cursor visible via + * inputSuspendForOverlay() but nothing re-hides it on close unless + * reconcileGrab() happens to re-grab (only true if you had already + * clicked-to-lock in a stage). Re-assert the correct visibility + * every poll here -- this line is unreachable while the overlay is + * open (early return above), so it only fires once it has closed. */ + applyCursorVisibility(); /* Click-to-lock, in a stage, cursor free: the mouse buttons must not * reach the game (no phantom fire) -- the first click only re-locks