Jelajahi Sumber

Fixed focus issue - 2

Tig 10 bulan lalu
induk
melakukan
357bc32ac3

+ 6 - 9
Terminal.Gui/View/View.Hierarchy.cs

@@ -160,6 +160,10 @@ public partial class View // SuperView/SubView hierarchy management (SuperView,
         Rectangle touched = view.Frame;
 
         bool hadFocus = view.HasFocus;
+        bool couldFocus = view.CanFocus;
+
+        view.CanFocus = false; // If view had focus, this will ensure it doesn't and it stays that way
+        Debug.Assert (!view.HasFocus);
 
         _subviews.Remove (view);
         view._superView = null;
@@ -175,20 +179,13 @@ public partial class View // SuperView/SubView hierarchy management (SuperView,
             }
         }
 
+        view.CanFocus = couldFocus; // Restore to previous value
+
         if (_previouslyFocused == view)
         {
             _previouslyFocused = null;
         }
 
-        if (hadFocus)
-        {
-            // Access _hasFocus directly; don't use HasFocus because it will try to find the focused view
-            view._hasFocus = false;
-            AdvanceFocus (NavigationDirection.Forward, null);
-        }
-
-        Debug.Assert (!view.HasFocus);
-
         OnRemoved (new (this, view));
 
         return view;

+ 3 - 3
Terminal.Gui/View/View.Navigation.cs

@@ -477,9 +477,6 @@ public partial class View // Focus and cross-view navigation management (TabStop
                 if (!AdvanceFocus (NavigationDirection.Forward, null))
                 {
                     // Couldn't advance, so we're the most focused view in the application
-                    _previouslyFocused = null;
-
-                    Application.Navigation?.SetFocused (this);
                 }
             }
         }
@@ -497,6 +494,9 @@ public partial class View // Focus and cross-view navigation management (TabStop
             }
         }
 
+        _previouslyFocused = null;
+        Application.Navigation?.SetFocused (this);
+
         if (Arrangement.HasFlag (ViewArrangement.Overlapped))
         {
             SuperView?.MoveSubviewToEnd (this);