1
0
mirror of https://github.com/ppy/osu.git synced 2024-11-11 13:37:25 +08:00

Merge pull request #14836 from peppy/fix-dialog-overlay-disposal

Fix `DialogOverlay` potentially not expiring dialogs as soon as it should
This commit is contained in:
Bartłomiej Dach 2021-09-23 23:03:59 +02:00 committed by GitHub
commit af9cc9560f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 9 deletions

View File

@ -24,9 +24,10 @@ namespace osu.Game.Tests.Visual.UserInterface
[Test]
public void TestBasic()
{
TestPopupDialog dialog = null;
TestPopupDialog firstDialog = null;
TestPopupDialog secondDialog = null;
AddStep("dialog #1", () => overlay.Push(dialog = new TestPopupDialog
AddStep("dialog #1", () => overlay.Push(firstDialog = new TestPopupDialog
{
Icon = FontAwesome.Regular.TrashAlt,
HeaderText = @"Confirm deletion of",
@ -46,9 +47,9 @@ namespace osu.Game.Tests.Visual.UserInterface
},
}));
AddAssert("first dialog displayed", () => overlay.CurrentDialog == dialog);
AddAssert("first dialog displayed", () => overlay.CurrentDialog == firstDialog);
AddStep("dialog #2", () => overlay.Push(dialog = new TestPopupDialog
AddStep("dialog #2", () => overlay.Push(secondDialog = new TestPopupDialog
{
Icon = FontAwesome.Solid.Cog,
HeaderText = @"What do you want to do with",
@ -82,30 +83,33 @@ namespace osu.Game.Tests.Visual.UserInterface
},
}));
AddAssert("second dialog displayed", () => overlay.CurrentDialog == dialog);
AddAssert("second dialog displayed", () => overlay.CurrentDialog == secondDialog);
AddAssert("first dialog is not part of hierarchy", () => firstDialog.Parent == null);
}
[Test]
public void TestDismissBeforePush()
{
TestPopupDialog testDialog = null;
AddStep("dismissed dialog push", () =>
{
overlay.Push(new TestPopupDialog
overlay.Push(testDialog = new TestPopupDialog
{
State = { Value = Visibility.Hidden }
});
});
AddAssert("no dialog pushed", () => overlay.CurrentDialog == null);
AddAssert("dialog is not part of hierarchy", () => testDialog.Parent == null);
}
[Test]
public void TestDismissBeforePushViaButtonPress()
{
TestPopupDialog testDialog = null;
AddStep("dismissed dialog push", () =>
{
TestPopupDialog dialog;
overlay.Push(dialog = new TestPopupDialog
overlay.Push(testDialog = new TestPopupDialog
{
Buttons = new PopupDialogButton[]
{
@ -113,10 +117,11 @@ namespace osu.Game.Tests.Visual.UserInterface
},
});
dialog.PerformOkAction();
testDialog.PerformOkAction();
});
AddAssert("no dialog pushed", () => overlay.CurrentDialog == null);
AddAssert("dialog is not part of hierarchy", () => testDialog.Parent == null);
}
private class TestPopupDialog : PopupDialog

View File

@ -49,6 +49,8 @@ namespace osu.Game.Overlays
Show();
}
public override bool IsPresent => dialogContainer.Children.Count > 0;
protected override bool BlockNonPositionalInput => true;
private void onDialogOnStateChanged(VisibilityContainer dialog, Visibility v)