mirror of
https://github.com/osukey/osukey.git
synced 2025-05-09 23:57:18 +09:00
Merge pull request #11500 from peppy/fix-skin-dropdown-update-crash
This commit is contained in:
commit
fec3bd898e
@ -108,7 +108,7 @@ namespace osu.Game.Overlays.Settings.Sections
|
|||||||
if (skinDropdown.Items.All(s => s.ID != configBindable.Value))
|
if (skinDropdown.Items.All(s => s.ID != configBindable.Value))
|
||||||
configBindable.Value = 0;
|
configBindable.Value = 0;
|
||||||
|
|
||||||
configBindable.BindValueChanged(id => dropdownBindable.Value = skinDropdown.Items.Single(s => s.ID == id.NewValue), true);
|
configBindable.BindValueChanged(id => Scheduler.AddOnce(updateSelectedSkinFromConfig), true);
|
||||||
dropdownBindable.BindValueChanged(skin =>
|
dropdownBindable.BindValueChanged(skin =>
|
||||||
{
|
{
|
||||||
if (skin.NewValue == random_skin_info)
|
if (skin.NewValue == random_skin_info)
|
||||||
@ -121,6 +121,23 @@ namespace osu.Game.Overlays.Settings.Sections
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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()
|
private void updateItems()
|
||||||
{
|
{
|
||||||
skinItems = skins.GetAllUsableSkins();
|
skinItems = skins.GetAllUsableSkins();
|
||||||
@ -132,14 +149,14 @@ namespace osu.Game.Overlays.Settings.Sections
|
|||||||
private void itemUpdated(ValueChangedEvent<WeakReference<SkinInfo>> weakItem)
|
private void itemUpdated(ValueChangedEvent<WeakReference<SkinInfo>> weakItem)
|
||||||
{
|
{
|
||||||
if (weakItem.NewValue.TryGetTarget(out var item))
|
if (weakItem.NewValue.TryGetTarget(out var item))
|
||||||
{
|
Schedule(() => addItem(item));
|
||||||
Schedule(() =>
|
}
|
||||||
{
|
|
||||||
List<SkinInfo> newDropdownItems = skinDropdown.Items.Where(i => !i.Equals(item)).Append(item).ToList();
|
private void addItem(SkinInfo item)
|
||||||
sortUserSkins(newDropdownItems);
|
{
|
||||||
skinDropdown.Items = newDropdownItems;
|
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)
|
private void itemRemoved(ValueChangedEvent<WeakReference<SkinInfo>> weakItem)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user