瀏覽代碼

Fixes #3318. v1-MouseClick should be invoked only once on a mouse click.

BDisp 1 年之前
父節點
當前提交
37e76d174d
共有 2 個文件被更改,包括 22 次插入3 次删除
  1. 8 3
      Terminal.Gui/Core/View.cs
  2. 14 0
      UnitTests/Views/ViewTests.cs

+ 8 - 3
Terminal.Gui/Core/View.cs

@@ -2894,9 +2894,14 @@ namespace Terminal.Gui {
 				return false;
 			}
 
-			var args = new MouseEventArgs (mouseEvent);
-			if (OnMouseClick (args))
-				return true;
+			if (mouseEvent.Flags.HasFlag (MouseFlags.Button1Clicked) || mouseEvent.Flags.HasFlag (MouseFlags.Button2Clicked)
+				|| mouseEvent.Flags.HasFlag (MouseFlags.Button3Clicked) || mouseEvent.Flags.HasFlag (MouseFlags.Button4Clicked)) {
+
+				var args = new MouseEventArgs (mouseEvent);
+				if (OnMouseClick (args)) {
+					return true;
+				}
+			}
 			if (MouseEvent (mouseEvent))
 				return true;
 

+ 14 - 0
UnitTests/Views/ViewTests.cs

@@ -4581,5 +4581,19 @@ Test", output);
 011110
 000000", new Attribute [] { Colors.TopLevel.Normal, Colors.TopLevel.Focus });
 		}
+
+		[Fact]
+		public void OnMouseClick_Is_Only_Fired_Once ()
+		{
+			var mouseClicks = 0;
+			var view = new View ();
+			view.MouseClick += (_) => mouseClicks++;
+
+			view.OnMouseEvent (new MouseEvent () { Flags = MouseFlags.Button1Pressed });
+			view.OnMouseEvent (new MouseEvent () { Flags = MouseFlags.Button1Released });
+			view.OnMouseEvent (new MouseEvent () { Flags = MouseFlags.Button1Clicked });
+
+			Assert.Equal (1, mouseClicks);
+		}
 	}
 }