浏览代码

chore(frameview removall): To avoid infitinte loop for removeall
For Frameview, `contentView` is the first and only subview. In case of `RemoveAll`, `contentView` was sent from `View.RemoveAll` to overridden `Remove` function in `FrameView`
Hence, `contentView` is trying to remove itself from itself thereby actually not removing any subviews as well `contentView` from `FrameView` parent.
And thus the code was going in an infinite loop
Added overridden `RemoveAll` which would call `View.RemoveAll` on `contentView` to remove all the subviews from `contentView` but not the `contentView` from `FrameView`.
> Fixes: https://github.com/migueldeicaza/gui.cs/issues/125

Pratik Gaikwad 6 年之前
父节点
当前提交
bbb4202804
共有 1 个文件被更改,包括 10 次插入0 次删除
  1. 10 0
      Terminal.Gui/Views/FrameView.cs

+ 10 - 0
Terminal.Gui/Views/FrameView.cs

@@ -101,6 +101,16 @@ namespace Terminal.Gui {
 				this.CanFocus = false;
 		}
 
+		/// <summary>
+		///   Removes all widgets from this container.
+		/// </summary>
+		/// <remarks>
+		/// </remarks>
+		public override void RemoveAll()
+		{
+			contentView.RemoveAll();
+		}
+
 		public override void Redraw (Rect bounds)
 		{
 			if (!NeedDisplay.IsEmpty) {