steam-close-button: keep Steam hidden after X until shown explicitly

Closing Steam with X now marks it hidden (state steamHidden). Before,
bar-only ended as soon as any window became active, so closing a docked
window afterwards let stock SteamVR fall back to Steam.

While hidden, the stock fallbacks go to the most recently active other
docked window with a tab, else bar-only:
- autoSwitchOverlayIfNeeded with no active frame;
- the dashboard mailbox's dashboard_overlay_destroyed handler (stock:
  switchToHomeOverlay -> Steam);
- show/switch requests for Steam with reason "theater frame destroyed"
  (key removed) or "SetDockLocation" (echo of X docking Steam: dropped).
Steam becoming the active frame (tab click, Steam menu pick,
SwitchToDashboardOverlay) ends hidden.

The hidden state replaces the rule that swallowed the first
ShowOverlay(main) from Steam after each dashboard open in bar-only (Steam
doesn't send one there; its only effect was eating a real Steam menu
pick). Version 7; state of versions 5/6 is taken over (bar-only implies
hidden), their fields are left for a rollback. Signatures: mailbox and
dashboard handler anchors, the ShowOverlay ones dropped.
This commit is contained in:
Pierre Kisters committed 2026-09-28 02:46:31 +02:00
1 parent 817190facd
commit 36fcb207bd
5 files changed
+170 -159

No files matched your search

+13 -21
View File
@@ -557,29 +557,21 @@ own, and with no other window open the dashboard always shows it.
**Fix:** a UI patch of SteamVR's dashboard (turns on the
[SteamVR debugger](#steamvr-debugger-steamvrdebuggerenable)) gives the Steam
window an X. Clicking it:
window an X that hides Steam: it docks the window back if it was in the
world, theater or on a hand, then shows the most recently active other
dashboard window, or **just the dashboard bar** if there is none.
- docks the window back into the dashboard if it was in the world, theater
or on a hand;
- if it was active, switches to the most recently active other window with a
dashboard tab;
- with none left, shows **just the dashboard bar** ("bar only").
Steam stays hidden until you bring it back (Steam tab, a Steam menu pick,
SteamVR asking for it): closing the active window, or a theater window,
then goes to the previous window or the bar instead of Steam. This
survives dashboard reopens and patch-service restarts; a SteamVR restart
starts with Steam. Debugging: `window.__sfuiSteamClose.plan()` /
`homePlan()` and `window.__sfuiSteamCloseState` in the `systemui` page.
Bar-only survives closing/reopening the dashboard and patch-service restarts,
and ends as soon as any window becomes active; after a SteamVR restart the
dashboard starts with Steam again.
Debugging: `window.__sfuiSteamClose.plan()` in the `systemui` page tells
what a click would do; state is `window.__sfuiSteamCloseState`.
**Limitations:**
- If Steam doesn't send its automatic show request after a dashboard open,
the first Steam menu pick in bar-only is swallowed once.
- Steam shown via SteamVR's `SwitchToDashboardOverlay` path ends bar-only.
- No effect with a VRLink remote dashboard.
- Turning the option off while bar-only leaves no active window until the
next tab click or dashboard open.
**Limitations:** SteamVR's rarer "go home" paths (Now Playing after a game
quits, message overlays) still show Steam; no effect with a VRLink remote
dashboard; turning the option off while bar-only leaves no active window
until the next tab click or dashboard open.
**Caveats:** found by signature (`steam-close-button` in `signatures.json`);
on mismatch the dashboard stays stock. Tested with SteamVR build 11008059.