diff --git a/Terminal.Gui/Core/Application.cs b/Terminal.Gui/Core/Application.cs index 3d663944d..040ddba4a 100644 --- a/Terminal.Gui/Core/Application.cs +++ b/Terminal.Gui/Core/Application.cs @@ -508,7 +508,6 @@ namespace Terminal.Gui { CurrentView = null; Top = null; - // Closes the application if it's true. if (closeDriver) { MainLoop = null; diff --git a/Terminal.Gui/Core/Responder.cs b/Terminal.Gui/Core/Responder.cs index 22b450a62..1fe1e1231 100644 --- a/Terminal.Gui/Core/Responder.cs +++ b/Terminal.Gui/Core/Responder.cs @@ -246,8 +246,6 @@ namespace Terminal.Gui { GC.SuppressFinalize (this); #if DEBUG_IDISPOSABLE WasDisposed = true; - //Debug.Assert (DisposedCount == 0); - //DisposedCount++; #endif } } diff --git a/Terminal.Gui/Core/View.cs b/Terminal.Gui/Core/View.cs index 70407f3d2..859478c94 100644 --- a/Terminal.Gui/Core/View.cs +++ b/Terminal.Gui/Core/View.cs @@ -1738,7 +1738,9 @@ namespace Terminal.Gui { /// protected override void Dispose (bool disposing) { - foreach (var subview in InternalSubviews) { + for (int i = InternalSubviews.Count - 1; i >= 0; i--) { + View subview = InternalSubviews [i]; + Remove (subview); subview.Dispose (); } base.Dispose (disposing); diff --git a/Terminal.Gui/Views/Menu.cs b/Terminal.Gui/Views/Menu.cs index 95a7af6ab..2cbb31440 100644 --- a/Terminal.Gui/Views/Menu.cs +++ b/Terminal.Gui/Views/Menu.cs @@ -1069,6 +1069,7 @@ namespace Terminal.Gui { if (mi.IsTopLevel) { var menu = new Menu (this, i, 0, mi); menu.Run (mi.Action); + menu.Dispose (); } else { openedByHotKey = true; Application.GrabMouse (this); @@ -1176,6 +1177,7 @@ namespace Terminal.Gui { if (Menus [i].IsTopLevel) { var menu = new Menu (this, i, 0, Menus [i]); menu.Run (Menus [i].Action); + menu.Dispose (); } } else if (me.Flags == MouseFlags.Button1Pressed || me.Flags == MouseFlags.Button1DoubleClicked || me.Flags == MouseFlags.Button1TripleClicked) { if (IsMenuOpen) { diff --git a/UnitTests/ResponderTests.cs b/UnitTests/ResponderTests.cs index 43e9cf186..65546e145 100644 --- a/UnitTests/ResponderTests.cs +++ b/UnitTests/ResponderTests.cs @@ -35,5 +35,12 @@ namespace Terminal.Gui { Assert.False (r.OnEnter (new View ())); Assert.False (r.OnLeave (new View ())); } + + // Generic lifetime (IDisposable) tests + [Fact] + public void Dispose_Works () + { + + } } } diff --git a/UnitTests/ScenarioTests.cs b/UnitTests/ScenarioTests.cs index 650892e24..c2d8365cb 100644 --- a/UnitTests/ScenarioTests.cs +++ b/UnitTests/ScenarioTests.cs @@ -92,7 +92,7 @@ namespace Terminal.Gui { List scenarioClasses = Scenario.GetDerivedClasses (); Assert.NotEmpty (scenarioClasses); - var item = scenarioClasses.FindIndex (t => Scenario.ScenarioMetadata.GetName (t).Equals ("Clipping", StringComparison.OrdinalIgnoreCase)); + var item = scenarioClasses.FindIndex (t => Scenario.ScenarioMetadata.GetName (t).Equals ("Generic", StringComparison.OrdinalIgnoreCase)); var scenarioClass = scenarioClasses[item]; // Setup some fake kepresses // Passing empty string will cause just a ctrl-q to be fired