diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs
index c51624341e..8d87baa363 100644
--- a/osu.Game/OsuGame.cs
+++ b/osu.Game/OsuGame.cs
@@ -651,9 +651,10 @@ namespace osu.Game
Origin = Anchor.BottomLeft,
Action = () =>
{
- var currentScreen = ScreenStack.CurrentScreen as IOsuScreen;
+ if (!(ScreenStack.CurrentScreen is IOsuScreen currentScreen))
+ return;
- if (currentScreen?.AllowBackButton == true && !currentScreen.OnBackButton())
+ if (!((Drawable)currentScreen).IsLoaded || currentScreen.AllowBackButton && !currentScreen.OnBackButton())
ScreenStack.Exit();
}
},
diff --git a/osu.Game/Screens/IOsuScreen.cs b/osu.Game/Screens/IOsuScreen.cs
index cc8778d9ae..0434135547 100644
--- a/osu.Game/Screens/IOsuScreen.cs
+++ b/osu.Game/Screens/IOsuScreen.cs
@@ -67,8 +67,11 @@ namespace osu.Game.Screens
/// Invoked when the back button has been pressed to close any overlays before exiting this .
///
///
+ /// If this has not yet finished loading, the exit will occur immediately without this method being invoked.
+ ///
/// Return true to block this from being exited after closing an overlay.
/// Return false if this should continue exiting.
+ ///
///
bool OnBackButton();
}
diff --git a/osu.Game/Screens/Select/SongSelect.cs b/osu.Game/Screens/Select/SongSelect.cs
index c697c64c3f..270addc8e6 100644
--- a/osu.Game/Screens/Select/SongSelect.cs
+++ b/osu.Game/Screens/Select/SongSelect.cs
@@ -665,7 +665,7 @@ namespace osu.Game.Screens.Select
public override bool OnBackButton()
{
- if (ModSelect?.State.Value == Visibility.Visible)
+ if (ModSelect.State.Value == Visibility.Visible)
{
ModSelect.Hide();
return true;