Repository navigation
feat: full-screen session menu with window switcher (Steam Shift+Tab style) - #120
Merged
Merged
Conversation
…iew) The Select + Y menu is the core of the app, so it gets the same language as the console interface. Look and motion - Acrylic glass (DesktopAcrylicBackdrop) with rounded corners (DWM), icon tiles like the console quick settings, a volume gauge, a filled main exit. - The panel slides up and fades in; the tiles come in 45 ms apart; closing fades and sinks it, then closes (by timer, so a stalled composition can never leave the window up). The sub-picker fades and rises in. All of it is skipped when Windows animations are off. - The focused tile outlines in white and grows, on the composition visual: once a tile's visual is used for the entrance, WinUI refuses UIElement.Scale / CenterPoint on it (that threw in the first build). - Move / confirm / back sounds; the arrows go through GamepadNavigator (aligned card, then the nearest), and the picker confines the focus to itself. Preview (this alpha) - The menu opens without a session (shortcut, tray, consolemode://menu) on the game screen if it is on, else the primary one, with a "Preview" badge. FPS (needs a restore afterwards) is hidden, "Back to the PC" becomes "Close menu" and Exit only exits the app: nothing tries to restore a session that does not exist. Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
A new "Windows" tile in the session menu opens a strip with one card per open window, front to back, each with the program's icon, its name and the title. The D-pad picks, A brings the window to the front, X (Square on PlayStation) or Delete asks it to close, B goes back. It opens on the second card like Alt + Tab, since the first is the window that was in front. - AltTabRules (pure, tested) holds the listing rules Windows applies to its own Alt + Tab: visible, not cloaked, titled, not a tool window or an owned dialog unless it says it is an app window, not the shell, not our own menu. - WindowSwitcher lists, activates (restoring a minimized window, without leaving it topmost) and closes (WM_CLOSE, so a window that asks to save keeps its card). Icons load after the cards show, through the shell thumbnail; protected app folders keep the generic icon. - Switching does not end a session: the engine decides that by whether Big Picture / Playnite is still visible, not by focus. - The veils of the picker and the switcher are nearly opaque so the tiles do not ghost through the lists. Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
…erlay The session menu was a fixed-size panel in the middle of the game screen, so on a big display it looked small. It now covers the whole screen, like Steam's overlay: the game dims and blurs behind it, the options sit in a glass side panel and the open windows fill the middle. - WindowPlacement.FillScreen puts the borderless, topmost window over the whole monitor (the game screen in a session, the primary one in the preview). - Side panel (left): back to the game, volume with a gauge, resolution, audio, FPS, HDR, the coming-soon recording row, then the two ways out, the main one filled. Rows grow 2.5% when focused; the window cards 6%. - The open windows are always on screen (the "Windows" tile and the separate strip are gone): the in-menu Alt + Tab is a grid with one card per window. The D-pad moves between the panel and the grid, A brings a window to the front, X / Delete closes it, B goes back to the game. - GamepadNavigator.NearestOnSides lets left/right jump to the nearest control when nothing shares the row: the panel and the grid are side by side and never do. - Entrance: the header drops in, the panel slides in from the left with its rows one after another, then the windows and the hints; closing fades and sinks it. All skipped when Windows animations are off. Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
…, controller flow Reviewed with the ui-ux-pro-max (WinUI 3 stack) and hallmark (audit) design skills, kept out of the repo (installed under .claude/skills, git-excluded). Look - The light 3 px frame around the full-screen menu was the classic window frame: WinUI's SetBorderAndTitleBar(false, false) leaves WS_DLGFRAME and WS_EX_WINDOWEDGE on, which also shrank the client area (1914x1074 in 1920x1080). WindowChrome.Strip removes them; the toast uses it too. - Glass (DesktopAcrylicBackdrop) only when Windows' transparency effects are on, re-applied live on UISettings.ColorValuesChanged; otherwise a solid dark panel with the same contrast. - One selection marker: a 2 px ring on the edge of the row or card (it sat 5 px out with a gap of background before), no hairline on the rows or the panel (a bordered container holding bordered cards), rows stay still, cards grow 4%. - Colours are named tokens with a high-contrast variant instead of ~30 inline hex values; labels 14 -> 16 px and hints 15 -> 17 px for a couch. Controller - Left from the grid returns to the panel row you came from; up/down stay inside the panel or the grid, so the end of a list is an end (no jump to the other side or to the card beside it: GamepadNavigator.ReadingOrderFallback). - The picker gives the focus back to the row that opened it; closing a window card moves the focus to the next card. Robustness - A menu that fails to build is logged and dropped instead of crashing the app (a bad resource lookup had taken the process down with a stowed exception). Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Contributor
There was a problem hiding this comment.
Important
The preview can leak HDR restore bookkeeping into the next session, and a failed window activation still dismisses the switcher.
Reviewed changes This review covers the full-screen session menu, preview/session behavior, window switcher, and controller navigation.
- Session menu redesign Replaces the compact overlay with a full-screen, themed and animated menu, including selection and picker focus handling.
- Window switcher Adds native window enumeration, activation and close actions with an always-visible card grid.
- Preview and input behavior Opens the menu outside a session and updates menu actions, display/audio/HDR handling, and directional navigation.
- Localization and verification Adds all three translation catalogs, manual test steps, and pure window-filtering tests.
Note: 1 inline comment(s) dropped because they did not anchor to lines inside the PR diff:
src/ConsoleMode/ViewModels/MainViewModel.SessionMenu.cs:296(RIGHT) — line 296 (RIGHT) is not inside a diff hunk
GPT Luna | 𝕏
Contributor
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes This incremental review covers the window-activation failure fix and its documentation.
- Kept the menu available after activation failure Changed the switcher to close only when Windows reports successful activation, preserving the retry path.
- Added failure-case coverage guidance Documented manual checks for stale windows and Windows foreground-activation denial, and recorded the fix in both changelogs.
GPT Luna | 𝕏
lippdev
changed the base branch from
feat/console-ui-tabs-background-sounds
to
main
September 30, 2026 21:51
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Stacked on #117. Redesigned session menu: full-screen, Steam Shift+Tab style, in-menu Alt+Tab window grid, previewable outside a session, no window frame, Windows glass when transparency effects are on, selection ring and controller-flow fixes.
Build left to CI (Windows only); unit tests pass locally. Manual checks are in docs/TESTING.md.
🤖 Generated with Claude Code