Repository navigation
Launcher UI overhaul: the accepted UI and UX issues and PRs in one change - #1097
Merged
Merged
Conversation
…, console notices
… Steam Link fallback
…texture size, touch rows and stick deadzones
…kept by the launcher, test and translation fixes
The scan kept the name an entry had, so a raw title ID or a name read from a file like 'Batman Arkham Knight [ID][v0] (0.01 GB).nsz' stayed. The name now drops a size like a tag, falls back to the package name instead of a title ID, and the scan replaces such a name on an entry without a Mac app.
…e top bar Light no longer reuses the cream roles of Dark. New LauncherPalette tokens give Light a near-black primary action with white text, light gray secondary buttons and pop-ups, white segment pills on a gray track, gray or near-black switch tracks with a white knob and white selectable cards with a near-black border and radio. The page is F2F1EE with white cards. Every new token resolves to the value Dark drew before, so Dark is unchanged. The Switch 2 badge uses the attention color in Light. Sheets, onboarding and the controllers sheet use the tokens. The console mode resolves Dark tokens in every appearance and its window is Dark while it shows. The top bar has the page color and sits above the scrolled page. ScrollMemory puts a page top below the scroll view's top inset instead of at 0, which hid the first rows under the top bar.
The catalogue banner was saved at 1600 pixels, half of what a 1440 to 1920 pt hero needs on a Retina screen. The store now downloads the original without a size suffix (2000 x 1000) and falls back to the 1600 pixel size when it is missing. A banner saved at 1600 before is replaced once, and a missing original is recorded so it is not asked for again. The hero never draws the 640 pixel card thumbnail while its own decode is not ready, and draws with high quality interpolation. LauncherView+Library also takes the Light primary button style and the Switch 2 badge color.
Buttons go by the letters printed on the controller (A confirms, B goes back, Y opens a game's options, + and - open the menu), with Swap A and B in menus on the mapping page. B on the home screen and Leave console mode ask first, with Cancel focused. The menu holds Library, Controllers and General, as the desktop's Settings groups them. A game's options show the common ones first, the rest under Advanced, mods, cheats, the cloud save state and Reset (asked first). A game without a build offers Open on the desktop. Button mapping is a full page with the controller drawing ported from the iOS shell and applies only on Save. Controller settings have rumble strength and a rumble test. Sliders take left and right only after A. The focused game's art is sharp at the top right and darker bottom left. A panel over a full page keeps that page drawn, and changing an option no longer re-reads the save log. Left out: the battery appearance page, the notch screen fill, the build chip (ours stays), the light panes and the menu button in the top bar, and #901's other visual changes. Co-authored-by: Haseenesss <Haseenesss@gmail.com>
A selected key in the touch layout editor gets a Hold / Toggle choice beside its reset button. Toggle keys are kept with the layout and passed to every game as DM_TOUCH_TOGGLE. Patch 0119 makes the engine turn such a key on with one tap and off with the next, drawn pressed while on. VoiceOver reads each key's mode and offers an action to switch it.
In the Mac game options sheet and the iOS game settings, a setting whose value differs from the game profile's tested default gets a small amber dot before its label, read by VoiceOver as Changed from the tested value. The Mac sheet shows Use tested values at its top while one differs. It asks first, says how many settings change, and keeps the focus on Cancel. It runs the existing per-setting reset and replaces the footer's Reset to tested defaults. LauncherConfirmSheet is the 560 pt question it uses.
Nothing is removed on its own. A game with a build folder gets Remove build files with the size a removal frees in its Manage menu, and Settings > Tools gets a Build files card: every game with build files, largest first, its size, Remove, and the total. Both ask first in a 560 pt sheet with Cancel focused, and neither works while that game builds. Sizes are measured off the main thread. The removal reuses the Free space code: every part of the folder goes, the logs, the profile, saves, converted NSPs and the protected paths stay, so the game keeps working.
The top bar gets a menu button in the controller chips' style. A game starts with console mode still full screen, as the host now enters its own full screen on the active Space (seedds/nxnative#665). The update question starts on Cancel, as Leave and Reset do. The Joy-Con split switch shows only while a Joy-Con is connected. A list that scrolls fades over 24 pt into the page colour at its bottom. Console tiles decode the cover at 1024 pixels instead of the desktop card's 640. Co-authored-by: Haseenesss <Haseenesss@gmail.com>
A game's own app has no touch layout editor. Patch 0120 adds Keys that toggle to its in-game menu: one checkmark per single key, applied at once and saved for the next start as the same DM_TOUCH_TOGGLE value the shell's editor writes. The shared app shows no entry and keeps its editor.
The Manage menu loses Free space. Its per-part sheet now opens from Details next to Remove on each row of Settings > Tools > Build files, and the card measures again when it closes. The removal question says what it frees and what stays: logs, saves of development builds and converted game files.
This was referenced Nov 10, 2026
1 of 2 tasks
This was referenced Nov 10, 2026
Open
3 of 6 tasks
MartinMajewski
added a commit
to MartinMajewski/NX2Apple
that referenced
this pull request
Nov 10, 2026
…or the drive is HFS+ Patch 0112 (from LNPANDY#920, merged through LNPANDY#1097) keeps a game's save in ~/Library when its game library is on a drive that can't hold saves. The review of LNPANDY#920 found three cases where it still loses progress, and the fixes never reached main. Patch 0124 adds them: - The launcher records which folder it last started the game from and brings that whole save along when the folder changes, so an older copy no longer wins after a library moves between drives. - The copy is all or nothing. An older save in the destination is kept aside, and a failed copy stops the launch with an alert and is tried again on the next start. - HFS+, which doesn't report the clone and swap bits, now falls back as the README says. The device save (<save>_device) moves with the save, and a save folder the launcher passes in DM_SAVE is used as it is and recorded. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
4 of 6 tasks
1 of 2 tasks
MartinMajewski
added a commit
to MartinMajewski/NX2Apple
that referenced
this pull request
Nov 11, 2026
…or the drive is HFS+ Patch 0112 (from LNPANDY#920, merged through LNPANDY#1097) keeps a game's save in ~/Library when its game library is on a drive that can't hold saves. The review of LNPANDY#920 found three cases where it still loses progress, and the fixes never reached main. Patch 0133 adds them: - The launcher records which folder it last started the game from and brings that whole save along when the folder changes, so an older copy no longer wins after a library moves between drives. - The copy is all or nothing. An older save in the destination is kept aside, and a failed copy stops the launch with an alert and is tried again on the next start. - HFS+, which doesn't report the clone and swap bits, now falls back as the README says. The device save (<save>_device) moves with the save, and a save folder the launcher passes in DM_SAVE is used as it is and recorded. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MartinMajewski
added a commit
to MartinMajewski/NX2Apple
that referenced
this pull request
Nov 13, 2026
…or the drive is HFS+ Patch 0031-mac-library-folder (0010 and 0112 from LNPANDY#920 and LNPANDY#1097, squashed) keeps a game's save in ~/Library when its game library is on a drive that can't hold saves. The review of LNPANDY#920 found three cases where it still loses progress, and the fixes never reached main. Patch 0046 adds them: - The launcher records which folder it last started the game from and brings that whole save along when the folder changes, so an older copy no longer wins after a library moves between drives. - The copy is all or nothing. An older save in the destination is kept aside, and a failed copy stops the launch with an alert and is tried again on the next start. - HFS+, which doesn't report the clone and swap bits, now falls back as the README says. The device save (<save>_device) moves with the save, and a save folder the launcher passes in DM_SAVE is used as it is and recorded. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
Fix or feature
Feature agreed between the maintainers. It takes the accepted UI and UX issues and PRs in one change.
What and why
Problem. About 90 open launcher issues and PRs overlapped and pulled the UI in different directions. Many PRs needed a rebase.
Change. One coherent pass over the Mac launcher, its console mode and the iOS shell, in the existing design. Contributor code is taken over with credit as co-author.
Main points: Light and System appearance, settings in four sections, game options in four groups, a build queue, game data transfers, save import and export, players, cloud save conflicts, stick deadzones, a supported games list, Spanish, Korean and Brazilian Portuguese, and a console mode you can use from the couch: home rows, game pages, search, and a Home menu that pauses a game in the background.
Details
Issues and PRs in this change
Library and artwork: #301 #688 #784 #827 #895 #937 #953 #992 #1012 #1057 #661 #849 #868 #871 #896 #958 #959 #1013
Game options and performance: #544 #675 #680 #1043 #282 #670 #1044 #453
Settings and setup: #678 #683 #686 #696 #735 #996 #1017 #1062 #820 #839 #1009
Builds, queue and status: #676 #934 #943 #944 #951 #966 #997 #1004 #1005 #1010 #1030 #1059 #969 #1007 #1028 #1051 #232
Controllers and console mode: #454 #591 #797 #987 #1025 #1033 #624 #874 #901 #816 #952
iOS shell: #622 #637 #664 #697 #991 #1026 #1067 #658
Saves and players: #411 #553 #864 #907 #957 #1041 #920 #931 #961
Shared app and transfers: #270 #271 #899 #994 #1036 #1049 #884 #886 #900 #1027
Languages: #547 #885 #988
Credit
Code from: @thehobbit85, @Haseenesss, @zatteogit, @Koshindai, @loki-inu, @rborkow, @LNPANDY, @ZhaowTao, @MartinMajewski, @mbanusic, @TeeJayBaker. Each one is a co-author (last commit).
Console mode: the interaction comes from #901 by @Haseenesss, the structure from #816 by @Koshindai, the Home menu idea from #952 by @Haseenesss. All three are drawn in the existing console look.
Ideas: @IUMonster (#658, Hold or Toggle per touch key), @zatteogit (#453, settings that differ from the tested value).
Engine patches
0107 to 0122 in
patches/(renumbered after main's 0106). New ones: 0115 console in the game manifest (#696), 0116 stand-in icon (#784), 0117 BC6H as RGB9E5 (#544), 0118 touch rows for a game's own app (#991), 0119 stick deadzones (#1025), 0120 and 0121 touch keys that toggle (#658), 0122 Home menu and background pause (#952). They areUpstream-Status: pending. The seedds/nxnative PRs follow.Behavior changes worth knowing
Not taken from the source PRs
#901: the battery appearance page and the notch screen fill. #816: phase 2 lives in #952. #1009: Skip no longer forgets saved keys.
Checked
swift testin frontend/ 1098 tests, 0 failures. frontend-ios package tests pass.tools/tests220 OK. frontend-qt 421 OK.python3 tools/engine.py check: 86 patches apply.NX_LAUNCHER_CAPTURE_DIRbelow, Light and Dark.tools/try-local, tried by me in Light and in console mode. Not checked: a real Steam Link or Bluetooth pad (steam link controller supported #797, bluetooth controller isnt detected by launcher or games #987), LiveContainer (LiveContainer unable to select game data and cloud save #1049), large transfers to a device ([iPad] Large game data transfer fails with CoreDeviceError 3 — Fire Emblem Fortune's Weave #899, Send game data in the background: devicectl in parts on a Mac, AFC over the cable as the second way and on Windows #1036), the Home menu pause with a running game.Screenshots
Before (main) and after, English: