diff --git a/osu.Game/Overlays/Mods/ModSection.cs b/osu.Game/Overlays/Mods/ModSection.cs
index 993f4ef9d7..728c726b82 100644
--- a/osu.Game/Overlays/Mods/ModSection.cs
+++ b/osu.Game/Overlays/Mods/ModSection.cs
@@ -130,13 +130,13 @@ namespace osu.Game.Overlays.Mods
/// Updates all buttons with the given list of selected mods.
///
/// The new list of selected mods to select.
- public void UpdateSelectedMods(IReadOnlyList newSelectedMods)
+ public void UpdateSelectedButtons(IReadOnlyList newSelectedMods)
{
foreach (var button in buttons)
- updateButtonMods(button, newSelectedMods);
+ updateButtonSelection(button, newSelectedMods);
}
- private void updateButtonMods(ModButton button, IReadOnlyList newSelectedMods)
+ private void updateButtonSelection(ModButton button, IReadOnlyList newSelectedMods)
{
foreach (var mod in newSelectedMods)
{
diff --git a/osu.Game/Overlays/Mods/ModSelectOverlay.cs b/osu.Game/Overlays/Mods/ModSelectOverlay.cs
index b20c2d9d19..56d6008b00 100644
--- a/osu.Game/Overlays/Mods/ModSelectOverlay.cs
+++ b/osu.Game/Overlays/Mods/ModSelectOverlay.cs
@@ -377,7 +377,7 @@ namespace osu.Game.Overlays.Mods
base.LoadComplete();
availableMods.BindValueChanged(_ => updateAvailableMods(), true);
- SelectedMods.BindValueChanged(selectedModsChanged, true);
+ SelectedMods.BindValueChanged(_ => updateSelectedButtons(), true);
}
protected override void PopOut()
@@ -445,6 +445,8 @@ namespace osu.Game.Overlays.Mods
section.Mods = modEnumeration.Select(validModOrNull).Where(m => m != null);
}
+
+ updateSelectedButtons();
}
///
@@ -465,10 +467,13 @@ namespace osu.Game.Overlays.Mods
return validSubset.Length == 0 ? null : new MultiMod(validSubset);
}
- private void selectedModsChanged(ValueChangedEvent> mods)
+ private void updateSelectedButtons()
{
+ // Enumeration below may update the bindable list.
+ var selectedMods = SelectedMods.Value.ToList();
+
foreach (var section in ModSectionsContainer.Children)
- section.UpdateSelectedMods(mods.NewValue);
+ section.UpdateSelectedButtons(selectedMods);
updateMods();
}