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:
parent
1ce383fc20
commit
18e6afbec0
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user