Skip to content

[Feat] Add a new Fullscreen "Console-like" Mode for Joystick navigation - #5490

Merged
flavioislima merged 40 commits into
mainfrom
feat/console_mode
Apr 22, 2026
Merged

[Feat] Add a new Fullscreen "Console-like" Mode for Joystick navigation#5490
flavioislima merged 40 commits into
mainfrom
feat/console_mode

Conversation

@flavioislima

@flavioislima flavioislima commented Apr 17, 2026

Copy link
Copy Markdown
Member
Screenshot_20260418_234820
github_upload.mp4

Summary

Adds a new Console Mode — a fullscreen, controller-friendly UI for launching games with a gamepad, inspired by console/big-picture interfaces.

  • New ConsoleMode screen (src/frontend/screens/ConsoleMode/) with game grid, filtering, and launch flow
  • Gamepad navigation with on-screen button hints, thumbstick support, and a cancel button
  • Xbox Guide / PS button toggles Console Mode on/off
  • Fullscreen toggle wired through IPC and preload API, plus a main-window listener
  • CLI flag for starting directly in Console Mode (src/backend/constants/environment.ts, src/backend/main.ts)
  • Settings entry under Tray settings and a Sidebar link with icon/label
  • i18n keys added/cleaned up; theme fix for chip text colors

Test plan

  • Launch app normally — verify Console Mode link appears in sidebar and settings toggle works
  • Enter Console Mode via sidebar, settings, and Guide/PS button — confirm all entry points work
  • Navigate the game grid with gamepad (D-pad + thumbstick), verify hints render correctly
  • Launch a game from Console Mode and return to it after exit
  • Start app with the CLI console-mode flag and confirm it boots directly into Console Mode
  • Toggle fullscreen via IPC and verify the main-window listener reacts
  • Check chip text colors across all themes
  • Verify existing flows (Login, Install, Play, Uninstall, Move) still work

@flavioislima flavioislima added the pr:wip WIP, don't merge. label Apr 17, 2026
@flavioislima flavioislima changed the title [WIP-Feat] Add a simples Fullscreen "Console-like" Mode. [Feat] Add a new Fullscreen "Console-like" Mode for Joystick navigation Apr 18, 2026
@flavioislima
flavioislima marked this pull request as ready for review April 18, 2026 21:13
@flavioislima flavioislima added pr:ready-for-review Feature-complete, ready for the grind! :P and removed pr:wip WIP, don't merge. labels Apr 18, 2026
@flavioislima
flavioislima requested review from a team, BananaWorks07, CommandMC, arielj and biliesilva and removed request for a team April 18, 2026 21:13
@flavioislima
flavioislima requested a review from imLinguin April 18, 2026 21:13
Cancel hints and launching label were added to gamepage.json but the
LaunchOverlay reads them via the default namespace, so they were dead
keys. Move them to translation.json to match the namespace used.
The map was an identity function over Runner values, so every usage
collapses to a direct g.runner comparison. Tighten StoreKey to
`Runner | 'all'` and use g.runner directly.
Button indices were duplicated across index.tsx (BTN_BACK, BTN_L1, etc.)
and UpdateNotice (DISMISS_BUTTON_INDEX === 1). Move them to controller.ts
so both read from the same source.
LaunchOverlay and UpdateNotice both rendered the same prefix/kbd/suffix
hint with identical gamepadConnected-to-Esc fallback. Move it into a
tiny BackHint component so the shape is declared once.
consoleChip and consoleQuitButton both had the same :disabled rule
(cursor + opacity). Extract it into a %consoleButtonDisabled placeholder.
The footer wraps a single child (ControllerHints), so flex-direction,
align-items, gap and text-align were all no-ops. Keep only the
centering it actually needs.
justify-content: center on the flex container already centers the
single title child; text-align was a no-op.
The background's blur(3px)/saturate(0.6) stacked with the overlay's
backdrop-filter: blur(10px) over a 70% opaque fill. Keep just the
opacity fade on the background and let the overlay blur the rest.
The toggle has nothing to do with the system tray. Extract it into
its own StartInConsoleMode component and mount it directly in the
General settings section.
L1/R1 already cycle the store filter; clicking the analog sticks to do
the same thing is easy to trigger by accident while navigating.
The i18next parser only scans calls on a plain \`t\` identifier and
doesn't follow the renamed \`tGame\` from a second useTranslation hook,
so every run was moving console.cancel.* and console.launching back
into gamepage.json. Use a single \`t\` with explicit \`gamepage:\`
namespace prefixes for status keys, matching the getStatusLabel
convention used elsewhere in the codebase.
@flavioislima flavioislima added this to the 2.21 milestone Apr 20, 2026
@flavioislima
flavioislima merged commit ca55366 into main Apr 22, 2026
10 checks passed
@flavioislima
flavioislima deleted the feat/console_mode branch April 22, 2026 10:51
@Heroic-Games-Launcher Heroic-Games-Launcher locked and limited conversation to collaborators Apr 22, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

pr:ready-for-review Feature-complete, ready for the grind! :P

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant