-
Shell-mode v2: full controller overhaul + Settings as a page
release / Build Windows .zip (push) Canceled after 11m57sreleased this
2026-05-31 22:20:26 +03:00 | 37 commits to main since this releaseThe v0.9.x shell layout grew organically and parts of the UI were
unreachable from a controller (text inputs aside). This is a complete
pass: every surface on the home screen reachable from the gamepad,
power menu gets Restart, devices collapsed into one chooser, settings
becomes a real page on the animated blob background, modals share
the PowerMenu translucent-tile look.Controller layout (ShellApp.tsx):
- A launch active tile OR fire focused corner icon
- Y open Settings (full-screen page)
- X open Game Details drawer
- Start open Power menu (lock / sleep / reboot / exit)
- Back open Devices chooser (monitor / audio / Bluetooth)
- B close overlay; or drop focus carousel <- icons
- d-pad up/down rotates focus between carousel and corner icons;
within the icons row left/right walks across them. Keyboard
mirrors all of it (i/p/d/, shortcuts).
Power menu (PowerMenu.tsx):
- Drops "Сменить монитор" (lives in Devices chooser now).
- Adds Reboot -> new power.Reboot() = shutdown.exe /r /t 0 (proper
WM_QUERYENDSESSION cascade for apps). Wrapped in confirmModal
because reboot is irreversible. - App.RebootWorkstation restores the multi-monitor layout BEFORE
rebooting so login lands on the original desktop.
Devices chooser (new shell/DevicesMenu.tsx):
- PowerMenu-shaped modal: Monitor / Audio / Bluetooth. Delegates
to existing pickers. Bluetooth tile is a stub with "v0.10.1"
copy and an info toast.
Corner icons (CornerIcons.tsx):
- 🖥 + 🎧 collapsed into one 🎛 (devices). Standalone 🛑 Exit
removed - Exit now only inside the power menu. Row: 🔊 / 🎛 / ⛁
/ ⚙ / ⏻. Each icon gets a focused-state ring driven by
cornerFocus in ShellApp.
Settings as a shell page (new shell/ShellSettingsPage.tsx):
- Was wrapped in a in v0.9 (a small dark card the gamepad
couldn't drive). Now a full-screen page on the animated blob
background (ShellBackground game={null}). Header strip with
Close button. - Roving focus via d-pad up/down: collect every focusable in DOM
order, .focus() the next/prev, scroll into view. A presses
.click() on the focused control (skipped for text/number/
select - those want the touchpad / keyboard). - B / Esc / Y close back to the carousel.
- SettingsPage now takes optional onOpenMonitorPicker /
onOpenAudioPicker props - shell wires them to the real pickers;
normal desktop leaves them undefined and the Monitor button
greys out with a hint to use Windows display settings.
Modal style unification (Modal.tsx):
- Backdrop bg-black/80 + backdrop-blur-md (was /60 + blur-sm) to
match PowerMenu / DevicesMenu. Body becomes a translucent
rounded-2xl tile with border-white/10 bg-white/5. New size prop
(md..6xl). Backups modal uses 6xl so Archive column fits.
Ambient softer (sound.ts):
- v0.9.3 psstyle pad had a C3 root that read as "давящий". Drops
the root; voicing now E3-G3-B3-D4 (upper structure of Cmaj9 -
bright, airy, no low-end weight). Master 0.014 -> 0.011.
subtle voiced up to G3+D4; retro voiced up an octave to
C4-E4-G4.
Themed form controls (style.css):
- input[type=checkbox].gs-check / input[type=radio].gs-radio
zero out the native chrome, paint a card-coloured square /
circle, fill with accent when checked. Applied across Settings.
Drawer touch-ups (GameDrawer.tsx):
- overflow-x: hidden on the scroll container so long file paths
don't make the whole drawer scroll sideways (the horizontal
scrollbar in v0.9 screenshots). - Sessions and snapshot rows get flex-wrap so chips wrap on
narrow widths instead of pushing duration off the edge. - d-pad up/down scrolls by 180 px, B closes; per-row activation
via gamepad is deferred (mouse / Tab still work).
Backups modal wider (ShellApp.tsx + Modal.tsx):
- size="6xl" so the Archive / Game / When columns don't get
chopped on narrow drawers.
Bluetooth picker deferred to v0.10.1 (item #28 in the brief).
DevicesMenu tile + Settings tile are already placeholders; the
picker drops in behind them.ADR: .claude/decisions/0025-shell-controller-overhaul-and-settings-page.md
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
Downloads