While this isn't strictly required (outside of rulesets, potentially),
I think it's best that we keep these counts in a sane state.
Right now, it will remove any excess. Arguably, in the case an entry is
found with too many, we should wipe all entries and re-populate the
defaults. Interested in opinions on that before merging. See
https://github.com/ppy/osu/discussions/15925 for an example where wiping
may be the more appropriate behaviour.
Changes all usages of `KeyCombination.ReadableString()` to
`ReadableKeyCombinationProvider.GetReadableString()`.
Subscribing to `KeymapChanged` is only required in `KeyButton`.
All other places query `GetReadableString()` every time.
Not the most obvious keys, but does match stable expectations so let's
go with it for now.
Rationale for not using +/- is that local audio offset was bound to
those, and people will expect it to be when we get to implementing
eventually.
Also, adjust the scroll speed is a pretty rare thing to do since it's
been constant across beatmaps for years now.
`IdleTracker` in its construction quietly assumed that the clock it
receives from its parent starts ticking from 0 at the point at which it
is passed down. This is not necessarily the case when headless
executions are involved, which means that the initial state of the
tracker could be computed as idle incorrectly.
Resolve by explicitly reading the clock time at the point of
`LoadComplete()`.