1
0
mirror of https://github.com/ppy/osu.git synced 2025-02-14 17:45:20 +08:00

Fix confirm exit dialog overflowing from too many ongoing operations

This commit is contained in:
Salman Ahmed 2024-07-10 16:01:45 +03:00
parent d879527329
commit 7d667ac46b
2 changed files with 19 additions and 12 deletions

View File

@ -49,6 +49,7 @@ using osu.Game.Screens.Select.Options;
using osu.Game.Tests.Beatmaps.IO;
using osuTK;
using osuTK.Input;
using SharpCompress;
namespace osu.Game.Tests.Visual.Navigation
{
@ -839,18 +840,15 @@ namespace osu.Game.Tests.Visual.Navigation
{
AddUntilStep("wait for dialog overlay", () => Game.ChildrenOfType<DialogOverlay>().SingleOrDefault() != null);
ProgressNotification progressNotification = null!;
AddStep("start ongoing operation", () =>
AddRepeatStep("start ongoing operation", () =>
{
progressNotification = new ProgressNotification
Game.Notifications.Post(new ProgressNotification
{
Text = "Something is still running",
Progress = 0.5f,
State = ProgressNotificationState.Active,
};
Game.Notifications.Post(progressNotification);
});
});
}, 15);
AddStep("Hold escape", () => InputManager.PressKey(Key.Escape));
AddUntilStep("confirmation dialog shown", () => Game.ChildrenOfType<DialogOverlay>().Single().CurrentDialog is ConfirmExitDialog);
@ -861,8 +859,11 @@ namespace osu.Game.Tests.Visual.Navigation
AddStep("complete operation", () =>
{
progressNotification.Progress = 100;
progressNotification.State = ProgressNotificationState.Completed;
this.ChildrenOfType<ProgressNotification>().ForEach(n =>
{
n.Progress = 100;
n.State = ProgressNotificationState.Completed;
});
});
AddStep("Hold escape", () => InputManager.PressKey(Key.Escape));
@ -878,7 +879,7 @@ namespace osu.Game.Tests.Visual.Navigation
AddStep("set hold delay to 0", () => Game.LocalConfig.SetValue(OsuSetting.UIHoldActivationDelay, 0.0));
AddUntilStep("wait for dialog overlay", () => Game.ChildrenOfType<DialogOverlay>().SingleOrDefault() != null);
AddStep("start ongoing operation", () =>
AddRepeatStep("start ongoing operation", () =>
{
Game.Notifications.Post(new ProgressNotification
{
@ -886,7 +887,7 @@ namespace osu.Game.Tests.Visual.Navigation
Progress = 0.5f,
State = ProgressNotificationState.Active,
});
});
}, 15);
AddRepeatStep("attempt force exit", () => Game.ScreenStack.CurrentScreen.Exit(), 2);
AddUntilStep("stopped at exit confirm", () => Game.ChildrenOfType<DialogOverlay>().Single().CurrentDialog is ConfirmExitDialog);

View File

@ -2,6 +2,7 @@
// See the LICENCE file in the repository root for full licence text.
using System;
using System.Linq;
using osu.Framework.Allocation;
using osu.Framework.Graphics.Sprites;
using osu.Game.Localisation;
@ -37,9 +38,14 @@ namespace osu.Game.Screens.Menu
{
string text = "There are currently some background operations which will be aborted if you continue:\n\n";
foreach (var n in notifications.OngoingOperations)
var ongoingOperations = notifications.OngoingOperations.ToArray();
foreach (var n in ongoingOperations.Take(Math.Min(ongoingOperations.Length, 10)))
text += $"{n.Text} ({n.Progress:0%})\n";
if (ongoingOperations.Length > 10)
text += $"\nAnd {ongoingOperations.Length - 10} other operation(s).\n";
text += "\nLast chance to turn back";
BodyText = text;