Commit Graph
133 Commits
Author SHA1 Message Date
Henrik RydgårdandClaude Opus 5.5 9e63ff623d Lang: Move and copy strings into the sections of the settings that use them
Settings will translate everything about them (label, choices, units) in one
category, the label's, so:
- "Achievement sound volume" moves from Achievements to Audio, where the other
  volumes are.
- The choice strings of the ad hoc relay mode and chat positions are copied
  from Dialog to Networking, the notification position's to System, and the
  leaderboard tracker position's to Achievements.
- "seconds" is added to Controls and System, for the units of the touch
  control auto-hide delay and the rewind snapshot interval.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-25 15:12:24 +01:00
Henrik Rydgård 965b07c527 A lot more round corner fixes and layout fixes. 2026-10-25 10:28:40 +01:00
Henrik RydgårdandClaude Opus 5.5 b54056685e UI: Space ChoiceGroups from their container instead of their own margins
ChoiceGroups no longer have hardcoded margins. A new ChoiceGroupList holds them,
with padding and spacing that give the same look as before. Settings tabs, developer
tools, the two-pane settings columns, the pause menu and the rest put their groups in
one, and a few screens adjust its padding and spacing to their layout.

Also add the two groups in the remote disc streaming settings that were created but
never added, and make the settings search look inside groups: it only checked a tab's
direct children, so with ChoiceGroups a filter hid everything.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-24 14:01:58 +02:00
Henrik RydgårdandClaude Opus 5.5 74bbd4b62e UI: Use ChoiceGroup on more settings-like screens
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-24 01:52:34 +02:00
Henrik RydgårdandClaude Opus 5.5 b5b37954b3 Achievements: Don't crash recreating a leaderboard screen after the game is unloaded
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-22 10:55:31 +02:00
Henrik RydgårdandClaude Opus 5.5 932d1e3b36 IconCache: Expire only avatars after a day, other icons after 30 days
Achievement badges and game icons don't change, so re-downloading them
daily was wasted. InsertIcon now takes a max age, and each entry saves
its expiry time. Leaderboard avatars get a day, everything else 30 days.
Bumps the cache version.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-01 10:26:00 -06:00
Henrik RydgårdandClaude Opus 5.5 e628fe3cb2 Achievements: Fix leaderboard screen use-after-free on close
rc_client frees a request's async handle right after calling back. The
error path didn't clear pendingAsyncCall_, so closing the screen after a
failed fetch aborted a freed handle. Switching between Top players and
Around me also overwrote the handle without aborting the old request,
which could then call back into a closed screen, or leak an entry list.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-01 10:26:00 -06:00
Sashwat Puri Sachde 805b9032e3 Limit achievement sound effect duration 2026-09-23 04:40:49 +05:30
Henrik Rydgård b68e0c0896 RetroAchievementScreens: fix use-after-free on leaderboard screen close
rc_client_begin_fetch_leaderboard_entries[_around_user]()'s returned
async handle was discarded instead of stored in pendingAsyncCall_, so
the destructor's "abort the in-flight request" guard was always a
no-op. Closing (or switching modes on) a leaderboard screen before its
network fetch completes let the completion callback run later against
the already-destroyed screen (writing to its now-freed
pendingEntryList_/pendingAsyncCall_ members) - ordinary usage on a
slow connection, not just an edge case.
2026-08-12 09:27:47 +02:00
Henrik Rydgård 7219cd2f5a Split off ScreenManager from Screen.cpp 2026-08-07 14:30:36 +02:00
Henrik Rydgård 62938ceef7 RetroAchievements: Avoid crashing when drawing achievements without images (may be in development) 2026-07-28 23:19:00 +02:00
Henrik Rydgård 05018fb40d RetroAchievement images: Workaround for lack of https on Linux
Fixes #21843
2026-06-17 16:20:53 +02:00
Henrik Rydgård cc0ece038c Clean up the string type in RequestCallback - somehow was both char* and std::string????
Might be related to #21695
2026-05-18 14:16:34 +02:00
Henrik Rydgård b06e2b308c Fix memory leak in achievements screen 2026-04-08 10:36:58 -06:00
Henrik Rydgård d390e04d7b Build and warning fixes 2026-04-08 09:13:20 -06:00
Henrik Rydgård 9793172eba More UI refinements 2026-04-07 20:52:38 -06:00
Henrik Rydgård ad12b700b2 On the Achievements screen for a game, put subsets on separate tabs
Fixes #21509
2026-04-07 20:03:13 -06:00
Henrik Rydgård 99f81c88e8 Some more UI fixes 2026-02-06 14:52:17 +01:00
Henrik Rydgård e7aba8f153 Hook up an InputDeviceListener, and just have it log 2026-01-25 23:02:12 +01:00
Henrik Rydgård 34938e3de6 Move Notice to Common/UI 2026-01-25 15:10:26 +01:00
Henrik Rydgård 35a9dd643e Improve rendering of achievements with types other than normal 2026-01-21 11:05:13 +01:00
Henrik Rydgård 2b1fb469c9 Retroachievements: Add strings for Missable, Progression, Win achievement types 2026-01-21 10:57:09 +01:00
Henrik Rydgård 63658bcb2f Lambda capture cleanup 2026-01-20 14:29:13 +01:00
Henrik Rydgård 0fb2be2cbe Simplify image caching for RetroAchievements 2026-01-20 14:25:59 +01:00
Henrik Rydgård 907ba1292f Crashfix and warning fix, thanks droplet and oltolm 2025-11-30 13:29:23 +01:00
Henrik Rydgård 9c7dcca59d RetroAchievements: Fix crashes if subset info is missing 2025-11-28 13:10:06 +01:00
Henrik Rydgård 355ad48676 More layout issues 2025-11-28 01:05:21 +01:00
Henrik Rydgård 56feb8692f Implement correct word wrapping for popup notices that don't fit on the screen 2025-11-27 19:34:46 +01:00
Henrik Rydgård 8dfa50840a RetroAchievements: For subsets, don't show the subset name if identical to the game name 2025-11-27 14:02:19 +01:00
Henrik Rydgård f949bc8faf RetroAchievements: Show subset names 2025-11-27 11:03:56 +01:00
Henrik Rydgård 6f2742a2cb Some UI polish 2025-11-09 16:49:15 +01:00
Henrik Rydgård 75020e2ed7 Add ability to put icons on tabs 2025-11-05 14:42:49 +01:00
Henrik Rydgård 2b9f2672bb UI screens header cleanup 2025-10-29 00:15:41 +01:00
Henrik Rydgård 7ffd72b32e Rename some screen classes 2025-10-29 00:02:43 +01:00
Henrik Rydgård 138be54f6a More misc work 2025-10-28 11:54:07 +01:00
Henrik Rydgård afdafaa68e Fix a small bug in the sound chooser. Cleanup 2025-10-23 18:47:19 +02:00
Henrik Rydgård b45d07d6cb Break out TabHolder from Common/UI/ViewGroup.cpp. A few new atlas images 2025-10-23 11:19:20 +02:00
Henrik Rydgård 58456ae950 Remove the UI::EventReturn return values. Makes editing the UI nicer. 2025-09-15 11:09:00 -06:00
Henrik Rydgård 730fd4754e Events now only have one handler, remove the neeed for event chaining in CheckBox 2025-09-15 10:33:18 -06:00
Henrik Rydgård e78341b822 Hide theme behind an accessor (so we can expose it only as const) 2025-09-15 09:31:18 -06:00
Henrik Rydgård b472eb8b8b Remove a lot of unnecessary string constructors 2025-08-31 15:49:29 +02:00
Henrik Rydgård ddc8093b34 RetroAchievements: Better error messages on login, don't delete the username on failure 2025-06-13 19:09:35 +02:00
Henrik Rydgård 268962a04e RenderAchievement crashfix if null 2025-05-20 00:43:23 +02:00
Henrik Rydgård d67685883b Add check for valid rc_client_game_t 2025-04-30 09:54:51 +02:00
Henrik Rydgård 9241d09c56 Show little indicators on achievements of the type (progression, missable, win) 2025-04-11 18:27:41 +02:00
Henrik Rydgård 7587eca145 Bump rcheevos again 2025-03-27 02:12:56 +01:00
Henrik Rydgård 6efb758893 CHange the TabbedDialog create-tab API to allow for future lazy-loading 2025-03-23 22:48:57 +01:00
Henrik Rydgård aad3aa02e7 Upgrade the achievement sound volume setting to the new format 2025-02-12 10:23:26 -06:00
Henrik Rydgård d200d80633 Allow preview of UI sound volume while changing the slider. 2025-02-11 18:03:42 -06:00
Henrik Rydgård 3e198c53b2 More include cleanup 2024-12-18 13:57:26 +01:00