Skip to content

feat: in-session menu over the game (Select + Y) - #46

Merged
lippdev merged 1 commit into
mainfrom
feat/session-menu
Sep 24, 2026
Merged

lippdev merged 1 commit into
mainfrom
feat/session-menu

Conversation

@lippdev

@lippdev lippdev commented Sep 24, 2026

Copy link
Copy Markdown
Owner

A quick menu like a console's, over the game, opened by holding Select + Y (~0.3 s) during a session. Start + Select still restores directly.

Rows: Back to the game · Volume (◀/▶ ±5, A mutes; reads the current level from SoundVolumeView) · Resolution (picker of the game screen's modes, applied live; restore puts the original back) · Audio output (active devices; the auto-switch won't undo it) · FPS limit (RTSS presets or none; only when RTSS is ready; the user's RTSS settings are backed up once and restored at the end) · HDR (toggle; restore undoes exactly what the user changed) · "Record the last 30 s · coming soon" (disabled) · Back to the PC · Exit Console Mode.

Header: clock, "Playing for X min", detected pad. Hints: A/B/◀▶ (PlayStation glyphs when a PS pad is detected).

Window: SessionMenuWindow, centered on the game screen in its DPI (WindowPlacement, now shared with ConfirmWindow), always on top, no chrome, dark. GamepadNavigator drives it; arrows on the keyboard go through the same path (PreviewKeyDown, so the ScrollViewer doesn't eat them). NativeWindows.ForceForeground takes focus from the game (PlayStation pads need it). Exclusive-fullscreen games can't be covered; documented.

Also: consolemode://menu opens it (Stream Deck); settings card describing the shortcut; README, TESTING.md (section 1c) and changelogs.

Test plan

  • dotnet test: 76 passed (15 new: volume steps, /GetPercent parsing, elapsed format, RTSS backup rule, protocol action)
  • Build OK
  • Window opened with the session guard temporarily off: layout at 175 % DPI, volume read from Windows (100 %), audio device name shown, focus on "Back to the game", ↓↓ moves focus, Enter opens the resolution picker, Esc closes it, Enter on the first row closes the menu. Guard restored before commit.
  • With hardware: docs/TESTING.md → section 1c (Select + Y over Big Picture, every row, PlayStation, exclusive fullscreen)

🤖 Generated with Claude Code

A console-style quick menu centered on the game screen, always on top,
driven by the controller (GamepadNavigator) or the keyboard: volume
(Left/Right, A mutes), resolution, audio output, FPS limit (RTSS) and
HDR as pickers/toggles that apply live, "Record the last 30 s" as a
coming-soon row, and two ways out: back to the PC or exit the app.
Header shows the clock, elapsed time and the pad. Also reachable via
consolemode://menu.

- RtssService.SetLimit backs the user's settings up only once per session.
- VideoFeaturesService.SetHdrFromMenu tracks what to undo at Stop(),
  including an HDR the user turned off that was on before.
- WindowPlacement (from ConfirmWindow) centers windows in a screen's DPI.
- NativeWindows.ForceForeground so the menu can take focus from a game.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@lippdev
lippdev merged commit 1660893 into main Sep 24, 2026
@lippdev
lippdev deleted the feat/session-menu branch September 24, 2026 15:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant