Browse Source

Enabled ViewArrangement.Overlapped zorder hack

Tig 1 year ago
parent
commit
09c1003716
2 changed files with 26 additions and 4 deletions
  1. 19 4
      Terminal.Gui/View/View.Drawing.cs
  2. 7 0
      Terminal.Gui/View/View.Navigation.cs

+ 19 - 4
Terminal.Gui/View/View.Drawing.cs

@@ -501,16 +501,31 @@ public partial class View // Drawing APIs
         // TODO: Implement OnDrawSubviews (cancelable);
         // TODO: Implement OnDrawSubviews (cancelable);
         if (_subviews is { } && SubViewNeedsDisplay)
         if (_subviews is { } && SubViewNeedsDisplay)
         {
         {
-            IEnumerable<View> subviewsNeedingDraw = _subviews.Where (
-                                                                     view => view.Visible
-                                                                             && (view.NeedsDisplay || view.SubViewNeedsDisplay || view.LayoutNeeded)
-                                                                    );
+            IEnumerable<View> 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)
             foreach (View view in subviewsNeedingDraw)
             {
             {
                 if (view.LayoutNeeded)
                 if (view.LayoutNeeded)
                 {
                 {
                     view.LayoutSubviews ();
                     view.LayoutSubviews ();
                 }
                 }
+
                 view.Draw ();
                 view.Draw ();
             }
             }
         }
         }

+ 7 - 0
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
             // If there is no SuperView, then this is a top-level view
             SetFocus (this);
             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;
+        }
+
     }
     }
 
 
     /// <summary>
     /// <summary>