|
@@ -904,7 +904,7 @@ namespace Terminal.Gui {
|
|
|
bool isButtonReleased = false;
|
|
|
bool isButtonDoubleClicked = false;
|
|
|
Point point;
|
|
|
- int buttonPressedCount;
|
|
|
+ //int buttonPressedCount;
|
|
|
bool isOneFingerDoubleClicked = false;
|
|
|
bool processButtonClick;
|
|
|
|
|
@@ -937,66 +937,67 @@ namespace Terminal.Gui {
|
|
|
Y = mouseEvent.MousePosition.Y
|
|
|
};
|
|
|
|
|
|
- if (!isButtonPressed && buttonPressedCount < 2
|
|
|
- && mouseEvent.EventFlags == WindowsConsole.EventFlags.MouseMoved
|
|
|
- && (mouseEvent.ButtonState == WindowsConsole.ButtonState.Button1Pressed
|
|
|
- || mouseEvent.ButtonState == WindowsConsole.ButtonState.Button2Pressed
|
|
|
- || mouseEvent.ButtonState == WindowsConsole.ButtonState.Button3Pressed)) {
|
|
|
+ //if (!isButtonPressed && buttonPressedCount < 2
|
|
|
+ // && mouseEvent.EventFlags == WindowsConsole.EventFlags.MouseMoved
|
|
|
+ // && (mouseEvent.ButtonState == WindowsConsole.ButtonState.Button1Pressed
|
|
|
+ // || mouseEvent.ButtonState == WindowsConsole.ButtonState.Button2Pressed
|
|
|
+ // || mouseEvent.ButtonState == WindowsConsole.ButtonState.Button3Pressed)) {
|
|
|
|
|
|
- lastMouseButtonPressed = mouseEvent.ButtonState;
|
|
|
- buttonPressedCount++;
|
|
|
- } else if (!isButtonPressed && buttonPressedCount > 0 && mouseEvent.ButtonState == 0
|
|
|
- && mouseEvent.EventFlags == 0) {
|
|
|
+ // lastMouseButtonPressed = mouseEvent.ButtonState;
|
|
|
+ // buttonPressedCount++;
|
|
|
+ //} else if (!isButtonPressed && buttonPressedCount > 0 && mouseEvent.ButtonState == 0
|
|
|
+ // && mouseEvent.EventFlags == 0) {
|
|
|
|
|
|
- buttonPressedCount++;
|
|
|
- }
|
|
|
+ // buttonPressedCount++;
|
|
|
+ //}
|
|
|
//System.Diagnostics.Debug.WriteLine ($"isButtonPressed: {isButtonPressed};buttonPressedCount: {buttonPressedCount};lastMouseButtonPressed: {lastMouseButtonPressed}");
|
|
|
//System.Diagnostics.Debug.WriteLine ($"isOneFingerDoubleClicked: {isOneFingerDoubleClicked}");
|
|
|
|
|
|
- if (buttonPressedCount == 1 && lastMouseButtonPressed != null
|
|
|
- && lastMouseButtonPressed == WindowsConsole.ButtonState.Button1Pressed
|
|
|
- || lastMouseButtonPressed == WindowsConsole.ButtonState.Button2Pressed
|
|
|
- || lastMouseButtonPressed == WindowsConsole.ButtonState.Button3Pressed) {
|
|
|
-
|
|
|
- switch (lastMouseButtonPressed) {
|
|
|
- case WindowsConsole.ButtonState.Button1Pressed:
|
|
|
- mouseFlag = MouseFlags.Button1DoubleClicked;
|
|
|
- break;
|
|
|
-
|
|
|
- case WindowsConsole.ButtonState.Button2Pressed:
|
|
|
- mouseFlag = MouseFlags.Button2DoubleClicked;
|
|
|
- break;
|
|
|
-
|
|
|
- case WindowsConsole.ButtonState.Button3Pressed:
|
|
|
- mouseFlag = MouseFlags.Button3DoubleClicked;
|
|
|
- break;
|
|
|
- }
|
|
|
- isOneFingerDoubleClicked = true;
|
|
|
-
|
|
|
- } else if (buttonPressedCount == 3 && lastMouseButtonPressed != null && isOneFingerDoubleClicked
|
|
|
- && lastMouseButtonPressed == WindowsConsole.ButtonState.Button1Pressed
|
|
|
- || lastMouseButtonPressed == WindowsConsole.ButtonState.Button2Pressed
|
|
|
- || lastMouseButtonPressed == WindowsConsole.ButtonState.Button3Pressed) {
|
|
|
+ //if (buttonPressedCount == 1 && lastMouseButtonPressed != null && p == point
|
|
|
+ // && lastMouseButtonPressed == WindowsConsole.ButtonState.Button1Pressed
|
|
|
+ // || lastMouseButtonPressed == WindowsConsole.ButtonState.Button2Pressed
|
|
|
+ // || lastMouseButtonPressed == WindowsConsole.ButtonState.Button3Pressed) {
|
|
|
+
|
|
|
+ // switch (lastMouseButtonPressed) {
|
|
|
+ // case WindowsConsole.ButtonState.Button1Pressed:
|
|
|
+ // mouseFlag = MouseFlags.Button1DoubleClicked;
|
|
|
+ // break;
|
|
|
+
|
|
|
+ // case WindowsConsole.ButtonState.Button2Pressed:
|
|
|
+ // mouseFlag = MouseFlags.Button2DoubleClicked;
|
|
|
+ // break;
|
|
|
+
|
|
|
+ // case WindowsConsole.ButtonState.Button3Pressed:
|
|
|
+ // mouseFlag = MouseFlags.Button3DoubleClicked;
|
|
|
+ // break;
|
|
|
+ // }
|
|
|
+ // isOneFingerDoubleClicked = true;
|
|
|
+
|
|
|
+ //} else if (buttonPressedCount == 3 && lastMouseButtonPressed != null && isOneFingerDoubleClicked && p == point
|
|
|
+ // && lastMouseButtonPressed == WindowsConsole.ButtonState.Button1Pressed
|
|
|
+ // || lastMouseButtonPressed == WindowsConsole.ButtonState.Button2Pressed
|
|
|
+ // || lastMouseButtonPressed == WindowsConsole.ButtonState.Button3Pressed) {
|
|
|
+
|
|
|
+ // switch (lastMouseButtonPressed) {
|
|
|
+ // case WindowsConsole.ButtonState.Button1Pressed:
|
|
|
+ // mouseFlag = MouseFlags.Button1TripleClicked;
|
|
|
+ // break;
|
|
|
+
|
|
|
+ // case WindowsConsole.ButtonState.Button2Pressed:
|
|
|
+ // mouseFlag = MouseFlags.Button2TripleClicked;
|
|
|
+ // break;
|
|
|
+
|
|
|
+ // case WindowsConsole.ButtonState.Button3Pressed:
|
|
|
+ // mouseFlag = MouseFlags.Button3TripleClicked;
|
|
|
+ // break;
|
|
|
+ // }
|
|
|
+ // buttonPressedCount = 0;
|
|
|
+ // lastMouseButtonPressed = null;
|
|
|
+ // isOneFingerDoubleClicked = false;
|
|
|
+ // isButtonReleased = false;
|
|
|
|
|
|
- switch (lastMouseButtonPressed) {
|
|
|
- case WindowsConsole.ButtonState.Button1Pressed:
|
|
|
- mouseFlag = MouseFlags.Button1TripleClicked;
|
|
|
- break;
|
|
|
-
|
|
|
- case WindowsConsole.ButtonState.Button2Pressed:
|
|
|
- mouseFlag = MouseFlags.Button2TripleClicked;
|
|
|
- break;
|
|
|
-
|
|
|
- case WindowsConsole.ButtonState.Button3Pressed:
|
|
|
- mouseFlag = MouseFlags.Button3TripleClicked;
|
|
|
- break;
|
|
|
- }
|
|
|
- buttonPressedCount = 0;
|
|
|
- lastMouseButtonPressed = null;
|
|
|
- isOneFingerDoubleClicked = false;
|
|
|
- isButtonReleased = false;
|
|
|
-
|
|
|
- } else if ((mouseEvent.ButtonState != 0 && mouseEvent.EventFlags == 0 && lastMouseButtonPressed == null && !isButtonDoubleClicked) ||
|
|
|
+ //}
|
|
|
+ if ((mouseEvent.ButtonState != 0 && mouseEvent.EventFlags == 0 && lastMouseButtonPressed == null && !isButtonDoubleClicked) ||
|
|
|
(lastMouseButtonPressed == null && mouseEvent.EventFlags == WindowsConsole.EventFlags.MouseMoved &&
|
|
|
mouseEvent.ButtonState != 0 && !isButtonReleased && !isButtonDoubleClicked)) {
|
|
|
switch (mouseEvent.ButtonState) {
|
|
@@ -1173,7 +1174,7 @@ namespace Terminal.Gui {
|
|
|
await Task.Delay (300);
|
|
|
isButtonDoubleClicked = false;
|
|
|
isOneFingerDoubleClicked = false;
|
|
|
- buttonPressedCount = 0;
|
|
|
+ //buttonPressedCount = 0;
|
|
|
}
|
|
|
|
|
|
async Task ProcessContinuousButtonPressedAsync (WindowsConsole.MouseEventRecord mouseEvent, MouseFlags mouseFlag)
|
|
@@ -1732,7 +1733,7 @@ namespace Terminal.Gui {
|
|
|
CancellationTokenSource tokenSource = new CancellationTokenSource ();
|
|
|
|
|
|
// The records that we keep fetching
|
|
|
- WindowsConsole.InputRecord [] result = new WindowsConsole.InputRecord [1];
|
|
|
+ Queue<WindowsConsole.InputRecord []> resultQueue = new Queue<WindowsConsole.InputRecord []> ();
|
|
|
|
|
|
/// <summary>
|
|
|
/// Invoked when a Key is pressed or released.
|
|
@@ -1763,7 +1764,9 @@ namespace Terminal.Gui {
|
|
|
waitForProbe.Wait ();
|
|
|
waitForProbe.Reset ();
|
|
|
|
|
|
- result = winConsole.ReadConsoleInput ();
|
|
|
+ if (resultQueue?.Count == 0) {
|
|
|
+ resultQueue.Enqueue (winConsole.ReadConsoleInput ());
|
|
|
+ }
|
|
|
|
|
|
eventReady.Set ();
|
|
|
}
|
|
@@ -1807,7 +1810,6 @@ namespace Terminal.Gui {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
- result = null;
|
|
|
waitForProbe.Set ();
|
|
|
winChange.Set ();
|
|
|
|
|
@@ -1822,7 +1824,7 @@ namespace Terminal.Gui {
|
|
|
}
|
|
|
|
|
|
if (!tokenSource.IsCancellationRequested) {
|
|
|
- return result != null || CheckTimers (wait, out _) || winChanged;
|
|
|
+ return resultQueue.Count > 0 || CheckTimers (wait, out _) || winChanged;
|
|
|
}
|
|
|
|
|
|
tokenSource.Dispose ();
|
|
@@ -1855,9 +1857,8 @@ namespace Terminal.Gui {
|
|
|
|
|
|
void IMainLoopDriver.MainIteration ()
|
|
|
{
|
|
|
- if (result != null) {
|
|
|
- var inputEvent = result [0];
|
|
|
- result = null;
|
|
|
+ while (resultQueue.Count > 0) {
|
|
|
+ var inputEvent = resultQueue.Dequeue()[0];
|
|
|
ProcessInput?.Invoke (inputEvent);
|
|
|
}
|
|
|
if (winChanged) {
|