2
0
Tig 10 сар өмнө
parent
commit
f9e0c9fe03

+ 12 - 9
Terminal.Gui/Application/Application.Mouse.cs

@@ -326,11 +326,12 @@ public static partial class Application // Mouse handling
                 continue;
             }
 
-            if (!_cachedViewsUnderMouse.Contains (view))
+            if (_cachedViewsUnderMouse.Contains (view))
             {
-                _cachedViewsUnderMouse.Add (view);
+                continue;
             }
 
+            _cachedViewsUnderMouse.Add (view);
             bool raise = false;
             if (view is Adornment { Parent: { } } adornmentView)
             {
@@ -343,15 +344,17 @@ public static partial class Application // Mouse handling
                 raise = view.Contains (superViewLoc);
             }
 
-            if (raise)
+            if (!raise)
             {
-                CancelEventArgs eventArgs = new ();
-                bool? cancelled = view.NewMouseEnterEvent (eventArgs);
+                continue;
+            }
 
-                if (cancelled is true || eventArgs.Cancel)
-                {
-                    break;
-                }
+            CancelEventArgs eventArgs = new ();
+            bool? cancelled = view.NewMouseEnterEvent (eventArgs);
+
+            if (cancelled is true || eventArgs.Cancel)
+            {
+                break;
             }
         }
     }

+ 1 - 0
Terminal.Gui/View/View.Drawing.cs

@@ -379,6 +379,7 @@ public partial class View // Drawing APIs
 
         if (Diagnostics.HasFlag (ViewDiagnosticFlags.MouseEnter) && _mouseOver)
         {
+            // Make Normal and Disabled darker when the mouse is over the view
             cs = new ColorScheme (cs)
             {
                 Normal = new (ColorScheme.Normal.Foreground.GetDarkerColor (), ColorScheme.Normal.Background.GetDarkerColor()),

+ 11 - 9
UnitTests/Application/Mouse/ApplicationMouseEnterLeaveTests.cs

@@ -342,6 +342,7 @@ public class ApplicationMouseEnterLeaveTests
 
         var view1 = new TestView
         {
+            Id = "view1",
             Width = 2,
             Height = 2,
             Arrangement = ViewArrangement.Overlapped
@@ -349,6 +350,7 @@ public class ApplicationMouseEnterLeaveTests
 
         var subView = new TestView
         {
+            Id = "subView",
             Width = 2,
             Height = 2,
             X = 1,
@@ -399,7 +401,7 @@ public class ApplicationMouseEnterLeaveTests
                                                     View.GetViewsUnderMouse (mousePosition));
 
             // Assert
-            Assert.Equal (2, view1.OnMouseEnterCalled);
+            Assert.Equal (1, view1.OnMouseEnterCalled);
             Assert.Equal (0, view1.OnMouseLeaveCalled);
             Assert.Equal (1, subView.OnMouseEnterCalled);
             Assert.Equal (0, subView.OnMouseLeaveCalled);
@@ -412,7 +414,7 @@ public class ApplicationMouseEnterLeaveTests
                                                     View.GetViewsUnderMouse (mousePosition));
 
             // Assert
-            Assert.Equal (2, view1.OnMouseEnterCalled);
+            Assert.Equal (1, view1.OnMouseEnterCalled);
             Assert.Equal (1, view1.OnMouseLeaveCalled);
             Assert.Equal (1, subView.OnMouseEnterCalled);
             Assert.Equal (1, subView.OnMouseLeaveCalled);
@@ -425,7 +427,7 @@ public class ApplicationMouseEnterLeaveTests
                                                     View.GetViewsUnderMouse (mousePosition));
 
             // Assert
-            Assert.Equal (3, view1.OnMouseEnterCalled);
+            Assert.Equal (2, view1.OnMouseEnterCalled);
             Assert.Equal (1, view1.OnMouseLeaveCalled);
             Assert.Equal (2, subView.OnMouseEnterCalled);
             Assert.Equal (1, subView.OnMouseLeaveCalled);
@@ -438,10 +440,10 @@ public class ApplicationMouseEnterLeaveTests
                                                     View.GetViewsUnderMouse (mousePosition));
 
             // Assert
-            Assert.Equal (3, view1.OnMouseEnterCalled);
+            Assert.Equal (2, view1.OnMouseEnterCalled);
             Assert.Equal (2, view1.OnMouseLeaveCalled);
             Assert.Equal (2, subView.OnMouseEnterCalled);
-            Assert.Equal (1, subView.OnMouseLeaveCalled);
+            Assert.Equal (2, subView.OnMouseLeaveCalled);
 
             // Act
             mousePosition = new (0, 0);
@@ -451,10 +453,10 @@ public class ApplicationMouseEnterLeaveTests
                                                     View.GetViewsUnderMouse (mousePosition));
 
             // Assert
-            Assert.Equal (3, view1.OnMouseEnterCalled);
+            Assert.Equal (2, view1.OnMouseEnterCalled);
             Assert.Equal (2, view1.OnMouseLeaveCalled);
             Assert.Equal (2, subView.OnMouseEnterCalled);
-            Assert.Equal (1, subView.OnMouseLeaveCalled);
+            Assert.Equal (2, subView.OnMouseLeaveCalled);
 
             // Act
             mousePosition = new (2, 2);
@@ -464,10 +466,10 @@ public class ApplicationMouseEnterLeaveTests
                                                     View.GetViewsUnderMouse (mousePosition));
 
             // Assert
-            Assert.Equal (4, view1.OnMouseEnterCalled);
+            Assert.Equal (3, view1.OnMouseEnterCalled);
             Assert.Equal (2, view1.OnMouseLeaveCalled);
             Assert.Equal (3, subView.OnMouseEnterCalled);
-            Assert.Equal (1, subView.OnMouseLeaveCalled);
+            Assert.Equal (2, subView.OnMouseLeaveCalled);
         }
         finally
         {