diff --git a/osu.Game/Screens/BackgroundScreen.cs b/osu.Game/Screens/BackgroundScreen.cs
index ea220c2f82..c81362eebe 100644
--- a/osu.Game/Screens/BackgroundScreen.cs
+++ b/osu.Game/Screens/BackgroundScreen.cs
@@ -34,6 +34,10 @@ namespace osu.Game.Screens
return false;
}
+ ///
+ /// Apply arbitrary changes to this background in a thread safe manner.
+ ///
+ /// The operation to perform.
public void ApplyToBackground(Action action) => Schedule(() => action.Invoke(this));
protected override void Update()
diff --git a/osu.Game/Screens/OsuScreen.cs b/osu.Game/Screens/OsuScreen.cs
index d1cdb9f1de..11467db6c8 100644
--- a/osu.Game/Screens/OsuScreen.cs
+++ b/osu.Game/Screens/OsuScreen.cs
@@ -115,8 +115,6 @@ namespace osu.Game.Screens
Mods = screenDependencies.Mods;
}
- public void ApplyToBackground(Action action) => background.ApplyToBackground(action);
-
///
/// The background created and owned by this screen. May be null if the background didn't change.
///
@@ -148,6 +146,18 @@ namespace osu.Game.Screens
Activity.Value ??= InitialActivity;
}
+ ///
+ /// Apply arbitrary changes to the current background screen in a thread safe manner.
+ ///
+ /// The operation to perform.
+ public void ApplyToBackground(Action action)
+ {
+ if (background == null)
+ throw new InvalidOperationException("Attempted to apply to background before screen is pushed");
+
+ background.ApplyToBackground(action);
+ }
+
public override void OnResuming(IScreen last)
{
if (PlayResumeSound)