diff --git a/osu.Game/Input/IdleTracker.cs b/osu.Game/Input/IdleTracker.cs
index d96fa8bd34..51b51c6761 100644
--- a/osu.Game/Input/IdleTracker.cs
+++ b/osu.Game/Input/IdleTracker.cs
@@ -27,6 +27,11 @@ namespace osu.Game.Input
private readonly BindableBool isIdle = new BindableBool();
+ ///
+ /// Whether the game can currently enter an idle state.
+ ///
+ protected virtual bool AllowIdle => true;
+
///
/// Intstantiate a new .
///
@@ -40,7 +45,7 @@ namespace osu.Game.Input
protected override void Update()
{
base.Update();
- isIdle.Value = TimeSpentIdle > timeToIdle;
+ isIdle.Value = TimeSpentIdle > timeToIdle && AllowIdle;
}
public bool OnPressed(PlatformAction action) => updateLastInteractionTime();
diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs
index 2a4c812401..ad438a20c6 100644
--- a/osu.Game/OsuGame.cs
+++ b/osu.Game/OsuGame.cs
@@ -187,6 +187,7 @@ namespace osu.Game
}
private ExternalLinkOpener externalLinkOpener;
+
public void OpenUrlExternally(string url)
{
if (url.StartsWith("/"))
@@ -355,7 +356,7 @@ namespace osu.Game
},
mainContent = new Container { RelativeSizeAxes = Axes.Both },
overlayContent = new Container { RelativeSizeAxes = Axes.Both, Depth = float.MinValue },
- idleTracker = new IdleTracker(6000)
+ idleTracker = new GameIdleTracker(6000)
});
loadComponentSingleFile(screenStack = new Loader(), d =>
@@ -423,7 +424,7 @@ namespace osu.Game
Depth = -8,
}, overlayContent.Add);
- dependencies.Cache(idleTracker);
+ dependencies.CacheAs(idleTracker);
dependencies.Cache(settings);
dependencies.Cache(onscreenDisplay);
dependencies.Cache(social);
@@ -504,6 +505,16 @@ namespace osu.Game
notifications.StateChanged += _ => updateScreenOffset();
}
+ public class GameIdleTracker : IdleTracker
+ {
+ public GameIdleTracker(int time)
+ : base(time)
+ {
+ }
+
+ protected override bool AllowIdle => GetContainingInputManager().FocusedDrawable == null;
+ }
+
private void forwardLoggedErrorsToNotifications()
{
int recentLogCount = 0;