Browse Source

Revert "Fixes #1839. Process WindowsDriver click event if location is the same after pressed and released."

This reverts commit 893220b21e379d5be16a6ea2c25c3672548b0f72.
Tig Kindel 3 years ago
parent
commit
fd05db5e85
1 changed files with 46 additions and 28 deletions
  1. 46 28
      Terminal.Gui/ConsoleDrivers/WindowsDriver.cs

+ 46 - 28
Terminal.Gui/ConsoleDrivers/WindowsDriver.cs

@@ -869,6 +869,15 @@ namespace Terminal.Gui {
 			case WindowsConsole.EventType.Mouse:
 				var me = ToDriverMouse (inputEvent.MouseEvent);
 				mouseHandler (me);
+				if (processButtonClick) {
+					mouseHandler (
+						new MouseEvent () {
+							X = me.X,
+							Y = me.Y,
+							Flags = ProcessButtonClick (inputEvent.MouseEvent)
+						});
+					processButtonClick = false;
+				}
 				break;
 
 			case WindowsConsole.EventType.WindowBufferSize:
@@ -892,10 +901,10 @@ namespace Terminal.Gui {
 		bool isButtonPressed = false;
 		bool isButtonReleased = false;
 		bool isButtonDoubleClicked = false;
-		Point? point;
-		Point pointMove;
+		Point point;
 		//int buttonPressedCount;
 		bool isOneFingerDoubleClicked = false;
+		bool processButtonClick;
 
 		MouseEvent ToDriverMouse (WindowsConsole.MouseEventRecord mouseEvent)
 		{
@@ -1004,13 +1013,12 @@ namespace Terminal.Gui {
 					break;
 				}
 
-				if (point == null)
-					point = p;
-
 				if (mouseEvent.EventFlags == WindowsConsole.EventFlags.MouseMoved) {
 					mouseFlag |= MouseFlags.ReportMousePosition;
 					isButtonReleased = false;
+					processButtonClick = false;
 				}
+				point = p;
 				lastMouseButtonPressed = mouseEvent.ButtonState;
 				isButtonPressed = true;
 
@@ -1038,28 +1046,13 @@ namespace Terminal.Gui {
 				}
 				isButtonPressed = false;
 				isButtonReleased = true;
-				if (point != null && (((Point)point).X != mouseEvent.MousePosition.X || ((Point)point).Y != mouseEvent.MousePosition.Y))
-					point = null;
-
+				if (point.X == mouseEvent.MousePosition.X && point.Y == mouseEvent.MousePosition.Y) {
+					processButtonClick = true;
+				}
 			} else if (mouseEvent.EventFlags == WindowsConsole.EventFlags.MouseMoved
 				&& !isOneFingerDoubleClicked && isButtonReleased && p == point) {
 
-				switch (lastMouseButtonPressed) {
-				case WindowsConsole.ButtonState.Button1Pressed:
-					mouseFlag = MouseFlags.Button1Clicked;
-					break;
-
-				case WindowsConsole.ButtonState.Button2Pressed:
-					mouseFlag = MouseFlags.Button2Clicked;
-					break;
-
-				case WindowsConsole.ButtonState.RightmostButtonPressed:
-					mouseFlag = MouseFlags.Button3Clicked;
-					break;
-				}
-				point = null;
-				lastMouseButtonPressed = null;
-				isButtonReleased = false;
+				mouseFlag = ProcessButtonClick (mouseEvent);
 
 			} else if (mouseEvent.EventFlags.HasFlag (WindowsConsole.EventFlags.DoubleClick)) {
 				switch (mouseEvent.ButtonState) {
@@ -1126,9 +1119,9 @@ namespace Terminal.Gui {
 				}
 
 			} else if (mouseEvent.EventFlags == WindowsConsole.EventFlags.MouseMoved) {
-				if (mouseEvent.MousePosition.X != pointMove.X || mouseEvent.MousePosition.Y != pointMove.Y) {
+				if (mouseEvent.MousePosition.X != point.X || mouseEvent.MousePosition.Y != point.Y) {
 					mouseFlag = MouseFlags.ReportMousePosition;
-					pointMove = new Point ();
+					point = new Point ();
 				} else {
 					mouseFlag = 0;
 				}
@@ -1145,6 +1138,31 @@ namespace Terminal.Gui {
 			};
 		}
 
+		MouseFlags ProcessButtonClick (WindowsConsole.MouseEventRecord mouseEvent)
+		{
+			MouseFlags mouseFlag = 0;
+			switch (lastMouseButtonPressed) {
+			case WindowsConsole.ButtonState.Button1Pressed:
+				mouseFlag = MouseFlags.Button1Clicked;
+				break;
+
+			case WindowsConsole.ButtonState.Button2Pressed:
+				mouseFlag = MouseFlags.Button2Clicked;
+				break;
+
+			case WindowsConsole.ButtonState.RightmostButtonPressed:
+				mouseFlag = MouseFlags.Button3Clicked;
+				break;
+			}
+			point = new Point () {
+				X = mouseEvent.MousePosition.X,
+				Y = mouseEvent.MousePosition.Y
+			};
+			lastMouseButtonPressed = null;
+			isButtonReleased = false;
+			return mouseFlag;
+		}
+
 		async Task ProcessButtonDoubleClickedAsync ()
 		{
 			await Task.Delay (300);
@@ -1158,8 +1176,8 @@ namespace Terminal.Gui {
 			while (isButtonPressed) {
 				await Task.Delay (100);
 				var me = new MouseEvent () {
-					X = pointMove.X,
-					Y = pointMove.Y,
+					X = point.X,
+					Y = point.Y,
 					Flags = mouseFlag
 				};