diff --git a/osu.Game/Overlays/Mods/ModSection.cs b/osu.Game/Overlays/Mods/ModSection.cs
index 3f93eec7df..ecbcba7ad3 100644
--- a/osu.Game/Overlays/Mods/ModSection.cs
+++ b/osu.Game/Overlays/Mods/ModSection.cs
@@ -158,7 +158,8 @@ namespace osu.Game.Overlays.Mods
/// Deselect one or more mods in this section.
///
/// The types of s which should be deselected.
- public void DeselectTypes(IEnumerable modTypes)
+ /// Whether the deselection should happen immediately. Should only be used when required to ensure correct selection flow.
+ public void DeselectTypes(IEnumerable modTypes, bool immediate = false)
{
foreach (var button in buttons)
{
@@ -167,7 +168,12 @@ namespace osu.Game.Overlays.Mods
foreach (var type in modTypes)
{
if (type.IsInstanceOfType(button.SelectedMod))
- pendingSelectionOperations.Enqueue(button.Deselect);
+ {
+ if (immediate)
+ button.Deselect();
+ else
+ pendingSelectionOperations.Enqueue(button.Deselect);
+ }
}
}
}
diff --git a/osu.Game/Overlays/Mods/SoloModSelectOverlay.cs b/osu.Game/Overlays/Mods/SoloModSelectOverlay.cs
index aa0e78c126..d039ad1f98 100644
--- a/osu.Game/Overlays/Mods/SoloModSelectOverlay.cs
+++ b/osu.Game/Overlays/Mods/SoloModSelectOverlay.cs
@@ -12,7 +12,7 @@ namespace osu.Game.Overlays.Mods
base.OnModSelected(mod);
foreach (var section in ModSectionsContainer.Children)
- section.DeselectTypes(mod.IncompatibleMods);
+ section.DeselectTypes(mod.IncompatibleMods, true);
}
}
}