diff --git a/osu.Game/Overlays/OnScreenDisplay.cs b/osu.Game/Overlays/OnScreenDisplay.cs
index b9d0213aa6..bbb2c476f4 100644
--- a/osu.Game/Overlays/OnScreenDisplay.cs
+++ b/osu.Game/Overlays/OnScreenDisplay.cs
@@ -118,35 +118,48 @@ namespace osu.Game.Overlays
[BackgroundDependencyLoader]
private void load(FrameworkConfigManager frameworkConfig)
{
- Register(this, frameworkConfig);
+ BeginTracking(this, frameworkConfig);
}
- private readonly Dictionary<(IDisposable, IConfigManager), TrackedSettings> trackedConfigManagers = new Dictionary<(IDisposable, IConfigManager), TrackedSettings>();
+ private readonly Dictionary<(object, IConfigManager), TrackedSettings> trackedConfigManagers = new Dictionary<(object, IConfigManager), TrackedSettings>();
- public void Register(IDisposable source, ITrackableConfigManager configManager)
+ ///
+ /// Registers a to have its settings tracked by this .
+ ///
+ /// The object that is registering the to be tracked.
+ /// The to be tracked.
+ /// If is null.
+ /// If is already being tracked from the same .
+ public void BeginTracking(object source, ITrackableConfigManager configManager)
{
if (configManager == null) throw new ArgumentNullException(nameof(configManager));
if (trackedConfigManagers.ContainsKey((source, configManager)))
- return;
+ throw new InvalidOperationException($"{nameof(configManager)} is already registered.");
var trackedSettings = configManager.CreateTrackedSettings();
if (trackedSettings == null)
return;
configManager.LoadInto(trackedSettings);
-
trackedSettings.SettingChanged += display;
trackedConfigManagers.Add((source, configManager), trackedSettings);
}
- public void Unregister(IDisposable source, ITrackableConfigManager configManager)
+ ///
+ /// Unregisters a from having its settings tracked by this .
+ ///
+ /// The object that registered the to be tracked.
+ /// The that is being tracked.
+ /// If is null.
+ /// If is not being tracked from the same .
+ public void StopTracking(object source, ITrackableConfigManager configManager)
{
if (configManager == null) throw new ArgumentNullException(nameof(configManager));
if (!trackedConfigManagers.TryGetValue((source, configManager), out var existing))
- return;
+ throw new InvalidOperationException($"{nameof(configManager)} is not registered.");
existing.Unload();
existing.SettingChanged -= display;
diff --git a/osu.Game/Rulesets/UI/RulesetContainer.cs b/osu.Game/Rulesets/UI/RulesetContainer.cs
index d4cfb3a3b3..45c112f669 100644
--- a/osu.Game/Rulesets/UI/RulesetContainer.cs
+++ b/osu.Game/Rulesets/UI/RulesetContainer.cs
@@ -97,7 +97,7 @@ namespace osu.Game.Rulesets.UI
if (rulesetConfig != null)
{
dependencies.Cache(rulesetConfig);
- onScreenDisplay?.Register(this, rulesetConfig);
+ onScreenDisplay?.BeginTracking(this, rulesetConfig);
}
}
@@ -146,7 +146,7 @@ namespace osu.Game.Rulesets.UI
if (rulesetConfig != null)
{
- onScreenDisplay?.Unregister(this, rulesetConfig);
+ onScreenDisplay?.StopTracking(this, rulesetConfig);
rulesetConfig = null;
}
}