mirror of
https://github.com/lhns/steam-frame-nix.git
synced 2026-10-06 01:00:13 +02:00
README keeps intro, feature list linking docs/, install, two sessions, usage, the complete options table, changes outside Nix, rollback, uninstall. Each feature's details (problem, what you get, configuration, limitations, how it works) move to its own page in docs/; docs/dashboard.md is split per feature and docs/changes-outside-nix.md becomes docs/cleanup.md.
67 lines
2.9 KiB
Markdown
67 lines
2.9 KiB
Markdown
# Steam close button
|
|
|
|
`dashboard.steamCloseButton.enable`, module `steam-close-button` ([options](../README.md#options)).
|
|
|
|
A [SteamVR dashboard patch](ui-patches.md#steamvr-dashboard-patches).
|
|
|
|
## Problem
|
|
|
|
Every dashboard window has a close (X) button except Steam's own, and with
|
|
no other window open the dashboard always shows it.
|
|
|
|
## What you get
|
|
|
|
The Steam window gets 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.
|
|
|
|
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, patch-service restarts, SteamVR restarts and reboots
|
|
("Steam hidden" is saved in
|
|
`~/.local/state/steam-frame-nix/ui-patches/steam-close-button.json`, see
|
|
[Changes outside Nix](../README.md#changes-outside-nix-exceptions)). After a
|
|
restart the patch attaches a few seconds after the dashboard appears,
|
|
possibly after SteamVR has already shown Steam: if Steam is (or first
|
|
becomes) the active window then, it is hidden once like with X (only the bar
|
|
at that point); otherwise it just stays hidden.
|
|
|
|
## Configuration
|
|
|
|
```nix
|
|
steamFrame.dashboard.steamCloseButton.enable = true;
|
|
```
|
|
|
|
## 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.
|
|
|
|
## How it works
|
|
|
|
`steam-close-button`, with [persistent state](ui-patches.md#persistent-state)
|
|
(`{ schema: 1, steamHidden }`).
|
|
|
|
- **Button:** the frame's `closing` component shows X when
|
|
`componentProps.onCloseRequested` exists; the Steam window's instance
|
|
(overlay `valve.steam.gamepadui.main`) gets one and its props are
|
|
re-assigned so the MobX computed re-evaluates.
|
|
- **Staying hidden:** while hidden, stock fallbacks to Steam go to the
|
|
previous window or bar-only instead: `Dashboard.autoSwitchOverlayIfNeeded`
|
|
(instance override) and the mailbox handler `dashboard_overlay_destroyed`.
|
|
Mailbox show/switch requests for Steam with reason `SetDockLocation` (the
|
|
echo of X docking Steam) are dropped, "theater frame destroyed" ones are
|
|
passed on without the Steam key. Explicit requests (tab click, Steam menu
|
|
pick, `SwitchToDashboardOverlay`) show Steam again.
|
|
- **Restarts:** a restored hidden state stays pending (`restorePending`)
|
|
until Steam's frame is seen, since the injector attaches within ~5 s of
|
|
the page appearing.
|
|
|
|
Debugging: `window.__sfuiSteamClose.plan()` / `homePlan()` in the `systemui`
|
|
page; state in `window.__sfuiSteamCloseState` (survives re-injection;
|
|
teardown restores all overrides and never switches frames).
|