diff --git a/Terminal.Gui/View/View.Drawing.cs b/Terminal.Gui/View/View.Drawing.cs index 1077f3917..d1a0f7734 100644 --- a/Terminal.Gui/View/View.Drawing.cs +++ b/Terminal.Gui/View/View.Drawing.cs @@ -501,16 +501,31 @@ public partial class View // Drawing APIs // TODO: Implement OnDrawSubviews (cancelable); if (_subviews is { } && SubViewNeedsDisplay) { - IEnumerable subviewsNeedingDraw = _subviews.Where ( - view => view.Visible - && (view.NeedsDisplay || view.SubViewNeedsDisplay || view.LayoutNeeded) - ); + IEnumerable subviewsNeedingDraw; + if (TabStop == TabBehavior.TabGroup && _subviews.Count(v => v.Arrangement.HasFlag (ViewArrangement.Overlapped)) > 0) + { + // TODO: This is a temporary hack to make overlapped non-Toplevels have a zorder. See also View.SetFocus + subviewsNeedingDraw = _tabIndexes.Where ( + view => view.Visible + && (view.NeedsDisplay || view.SubViewNeedsDisplay || view.LayoutNeeded) + ).Reverse (); + + } + else + { + subviewsNeedingDraw = _subviews.Where ( + view => view.Visible + && (view.NeedsDisplay || view.SubViewNeedsDisplay || view.LayoutNeeded) + ); + + } foreach (View view in subviewsNeedingDraw) { if (view.LayoutNeeded) { view.LayoutSubviews (); } + view.Draw (); } } diff --git a/Terminal.Gui/View/View.Navigation.cs b/Terminal.Gui/View/View.Navigation.cs index bc825d125..ad33804d2 100644 --- a/Terminal.Gui/View/View.Navigation.cs +++ b/Terminal.Gui/View/View.Navigation.cs @@ -605,6 +605,13 @@ public partial class View // Focus and cross-view navigation management (TabStop // If there is no SuperView, then this is a top-level view SetFocus (this); } + + // TODO: This is a temporary hack to make overlapped non-Toplevels have a zorder. See also: View.OnDrawContent. + if (viewToEnterFocus is { } && (viewToEnterFocus.TabStop == TabBehavior.TabGroup && viewToEnterFocus.Arrangement.HasFlag (ViewArrangement.Overlapped))) + { + viewToEnterFocus.TabIndex = 0; + } + } ///