You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Fix: Startup crash when saved profile index is out of range. If settings.json held a selectedProfileIdx pointing to a profile that no longer exists (e.g. after deleting a profile), the app would crash immediately on launch before any UI appeared. The index is now clamped to a valid range before use.
Fix: Ghost HUD on monitor hotplug/unplug. WM_DISPLAYCHANGE was moving the overlay window to the new monitor with a direct SetWindowPos, skipping the ghost-prevention blank that drag and the Display dropdown already use. Unplugging a monitor while the overlay was on it could leave a frozen HUD copy on the desktop. The handler now blanks and hides the old layered surface before repositioning, matching the WM_USER+101 path.
Fix: HUD slightly off-screen on first launch. The default g_hudX was initialised to -1, so on a brand-new install the angle readout started 1 pixel off the left edge of the screen. Default is now 40 (matching g_hudY).
Fix: Dashboard crosshair toggle resets offset. Enabling the crosshair via the Dashboard toggle was unconditionally zeroing the crosshair offset (X/Y position), discarding any custom placement the user had set. The hotkey toggle never did this; the dashboard toggle now matches that behaviour and preserves the saved offset.
Fix: 10-monitor hard limit in ROI monitor detection. Auto-detecting which monitor an ROI drag started on was capped at 10 iterations. On systems with more than 10 monitors the detection could silently fail. The loop now uses GetSystemMetrics(SM_CMONITORS) for the actual count.
Fix: Sleep(10) stall in Win32 message loop. RefreshHotkeys was sleeping 10 ms on the HUD message thread every time hotkeys were re-registered (every Fortnite focus change / alt-tab). This briefly stalled the message pump on every switch.
Fix: Transition lock threads could log after shutdown. The detached BlockInput threads spawned on glide↔dive and alt-tab transitions did not check g_running, so they could call into the logger and update timestamps after the app had started tearing down. They now guard those writes with a g_running check.
Fix: Update download URL data race. g_dynamicDownloadUrl was a bare std::wstring written by the update-check background thread and read by the download thread with no synchronisation. The URL is now captured by value before the download thread is spawned.
Fix: DetectorThread data race on g_isSelectionActive. The detector thread was reading g_currentSelection (a plain non-atomic enum) written by the Win32 thread. The detector now reads g_isSelectionActive which is std::atomic<bool>, eliminating the data race.