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