|
@@ -869,15 +869,6 @@ 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:
|
|
@@ -901,10 +892,10 @@ namespace Terminal.Gui {
|
|
|
bool isButtonPressed = false;
|
|
|
bool isButtonReleased = false;
|
|
|
bool isButtonDoubleClicked = false;
|
|
|
- Point point;
|
|
|
+ Point? point;
|
|
|
+ Point pointMove;
|
|
|
//int buttonPressedCount;
|
|
|
bool isOneFingerDoubleClicked = false;
|
|
|
- bool processButtonClick;
|
|
|
|
|
|
MouseEvent ToDriverMouse (WindowsConsole.MouseEventRecord mouseEvent)
|
|
|
{
|
|
@@ -1013,12 +1004,13 @@ 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;
|
|
|
|
|
@@ -1046,13 +1038,28 @@ namespace Terminal.Gui {
|
|
|
}
|
|
|
isButtonPressed = false;
|
|
|
isButtonReleased = true;
|
|
|
- if (point.X == mouseEvent.MousePosition.X && point.Y == mouseEvent.MousePosition.Y) {
|
|
|
- processButtonClick = true;
|
|
|
- }
|
|
|
+ if (point != null && (((Point)point).X != mouseEvent.MousePosition.X || ((Point)point).Y != mouseEvent.MousePosition.Y))
|
|
|
+ point = null;
|
|
|
+
|
|
|
} else if (mouseEvent.EventFlags == WindowsConsole.EventFlags.MouseMoved
|
|
|
&& !isOneFingerDoubleClicked && isButtonReleased && p == point) {
|
|
|
|
|
|
- mouseFlag = ProcessButtonClick (mouseEvent);
|
|
|
+ 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;
|
|
|
|
|
|
} else if (mouseEvent.EventFlags.HasFlag (WindowsConsole.EventFlags.DoubleClick)) {
|
|
|
switch (mouseEvent.ButtonState) {
|
|
@@ -1119,9 +1126,9 @@ namespace Terminal.Gui {
|
|
|
}
|
|
|
|
|
|
} else if (mouseEvent.EventFlags == WindowsConsole.EventFlags.MouseMoved) {
|
|
|
- if (mouseEvent.MousePosition.X != point.X || mouseEvent.MousePosition.Y != point.Y) {
|
|
|
+ if (mouseEvent.MousePosition.X != pointMove.X || mouseEvent.MousePosition.Y != pointMove.Y) {
|
|
|
mouseFlag = MouseFlags.ReportMousePosition;
|
|
|
- point = new Point ();
|
|
|
+ pointMove = new Point ();
|
|
|
} else {
|
|
|
mouseFlag = 0;
|
|
|
}
|
|
@@ -1138,31 +1145,6 @@ 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);
|
|
@@ -1176,8 +1158,8 @@ namespace Terminal.Gui {
|
|
|
while (isButtonPressed) {
|
|
|
await Task.Delay (100);
|
|
|
var me = new MouseEvent () {
|
|
|
- X = point.X,
|
|
|
- Y = point.Y,
|
|
|
+ X = pointMove.X,
|
|
|
+ Y = pointMove.Y,
|
|
|
Flags = mouseFlag
|
|
|
};
|
|
|
|