Any tabbed screen can now add tabs described by a SettingsPage with
AddSettingsTab, and gets the search tab that shows matching settings with
arrows to jump to them. The game settings screen is the first to use it.
Screens without settings tabs keep the old filter for now.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Instead of hiding the non-matching views in every tab and disabling the tabs
without matches, the search tab now builds each page and shows the matching
settings right there, where they can be changed, grouped under their tab and
section. Matching a section header shows the whole section, and matching a
hint shows its setting. Searches match both the translated and the English
text.
Each result has an arrow that switches to the setting's tab, scrolls it to the
middle and highlights it.
The other tabbed screens with search (Developer Tools) keep the old filter for
now.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The saved tab was selected before the Search tab was added, so the index
was out of range and no tab was created. Select it after adding Search, and
create the current tab anyway if the saved one no longer exists (Search is
hidden on small screens).
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
noSearchResults_ and clearSearchChoice_ only exist with the search tab,
which depends on orientation, and were never reset. Rotating with a
filter set wrote into the deleted views, and GAMESETTINGS_SEARCH, which
goes to every screen in the stack, hit null ones on screens without
search controls.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
GetRequesterToken() only returns the views token inside CreateViews(),
but tabbed screens create every tab other than the first on demand, and
the persist restore after CreateViews() can create one too. So text
inputs and file choosers there (Networking tab nickname, search filter,
RemoteISO and achievement settings) registered their [this] callbacks
under the screen token, which a recreate doesn't forget. Open the native
input box, rotate, press OK, and the callback wrote through the deleted
view.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Inverts/renames the setting to allow going back to the old sceAtrac
implementation, to work around any compatibility issue.
Note that we can never delete the old implementation, old savestates
will still use it - can't convert an existing session.
* Savedata manager screen: Use TabbedUIDialogScreenWithGameBackground
This fixes some minor UI issues on this screen.
* PromptScreen (used for "Are you sure?"): Default keyboard focus to Cancel
Fixes#19770
It seems to be possible for a user to back out of a screen before
receiving the "dialog completed" callback on Android, in which case
things pointed to by the callback might be gone.
In this case, it's better to simply not call the callback, rather than
crashing.
This is accomplished by assigning "Tokens" to screens that cause
requests, and in ~Screen, invalidate any pending requests belonging to
that token.