1
0
mirror of https://github.com/ppy/osu.git synced 2025-03-17 22:17:25 +08:00

Ensure the item is present before trying to select it

This commit is contained in:
Dean Herbert 2021-01-29 19:16:10 +09:00
parent 1ce383fc20
commit 18e6afbec0

View File

@ -121,7 +121,22 @@ namespace osu.Game.Overlays.Settings.Sections
});
}
private void updateSelectedSkinFromConfig() => dropdownBindable.Value = skinDropdown.Items.Single(s => s.ID == configBindable.Value);
private void updateSelectedSkinFromConfig()
{
int id = configBindable.Value;
var skin = skinDropdown.Items.FirstOrDefault(s => s.ID == id);
if (skin == null)
{
// there may be a thread race condition where an item is selected that hasn't yet been added to the dropdown.
// to avoid adding complexity, let's just ensure the item is added so we can perform the selection.
skin = skins.Query(s => s.ID == id);
addItem(skin);
}
dropdownBindable.Value = skin;
}
private void updateItems()
{
@ -134,14 +149,14 @@ namespace osu.Game.Overlays.Settings.Sections
private void itemUpdated(ValueChangedEvent<WeakReference<SkinInfo>> weakItem)
{
if (weakItem.NewValue.TryGetTarget(out var item))
{
Schedule(() =>
{
List<SkinInfo> newDropdownItems = skinDropdown.Items.Where(i => !i.Equals(item)).Append(item).ToList();
sortUserSkins(newDropdownItems);
skinDropdown.Items = newDropdownItems;
});
}
Schedule(() => addItem(item));
}
private void addItem(SkinInfo item)
{
List<SkinInfo> newDropdownItems = skinDropdown.Items.Where(i => !i.Equals(item)).Append(item).ToList();
sortUserSkins(newDropdownItems);
skinDropdown.Items = newDropdownItems;
}
private void itemRemoved(ValueChangedEvent<WeakReference<SkinInfo>> weakItem)