diff --git a/Terminal.Gui/Views/DialogTResult.cs b/Terminal.Gui/Views/DialogTResult.cs index 94f4d990ec..e18d73f658 100644 --- a/Terminal.Gui/Views/DialogTResult.cs +++ b/Terminal.Gui/Views/DialogTResult.cs @@ -354,6 +354,14 @@ private void SetStyle () { if (IsRunning) { + // When running, restore to Dialog scheme only if it was set to Base by SetStyle + // (i.e., the scheme was not explicitly overridden before running, e.g. by + // MessageBox.ErrorQuery which sets SchemeName = "Error" before calling app.Run). + if (SchemeName == SchemeManager.SchemesToSchemeName (Schemes.Base)) + { + SchemeName = SchemeManager.SchemesToSchemeName (Schemes.Dialog); + } + Arrangement |= ViewArrangement.Movable | ViewArrangement.Resizable | ViewArrangement.Overlapped; } else diff --git a/Tests/UnitTestsParallelizable/Views/DialogTests.cs b/Tests/UnitTestsParallelizable/Views/DialogTests.cs index 5c64f21083..aa1f553741 100644 --- a/Tests/UnitTestsParallelizable/Views/DialogTests.cs +++ b/Tests/UnitTestsParallelizable/Views/DialogTests.cs @@ -412,6 +412,45 @@ public void ShadowStyle_Can_Be_Changed () dialog.Dispose (); } + // Copilot + [Fact] + public void SchemeName_IsBase_WhenNotRunning () + { + // When a Dialog is not running, it should use the Base scheme (not Dialog) + Dialog dialog = new (); + + Assert.Equal (SchemeManager.SchemesToSchemeName (Schemes.Base), dialog.SchemeName); + + dialog.Dispose (); + } + + // Copilot + [Fact] + public void SchemeName_IsDialog_WhenRunning () + { + using IApplication app = Application.Create (); + app.Init (DriverRegistry.Names.ANSI); + + using Dialog dialog = new (); + + string? schemeNameWhileRunning = null; + + app.Iteration += AppOnIteration; + app.Run (dialog); + app.Iteration -= AppOnIteration; + + Assert.Equal (SchemeManager.SchemesToSchemeName (Schemes.Dialog), schemeNameWhileRunning); + + return; + + void AppOnIteration (object? sender, EventArgs e) + { + schemeNameWhileRunning = dialog.SchemeName; + app.Iteration -= AppOnIteration; + app.RequestStop (); + } + } + [Fact] public void Text_Property () {