Merge pull request #595 from BDisp/mouse-tasks

Added mouse tasks to the idle handlers. Fixed keyModifiers.
This commit is contained in:
Charlie Kindel
2020-06-03 10:37:17 -06:00
committed by GitHub
2 changed files with 35 additions and 22 deletions

View File

@@ -695,7 +695,8 @@ namespace Terminal.Gui {
keyUpHandler (new KeyEvent (map, keyModifiers));
}
}
keyModifiers = null;
if (!inputEvent.KeyEvent.bKeyDown)
keyModifiers = null;
break;
case WindowsConsole.EventType.Mouse:
@@ -726,9 +727,9 @@ namespace Terminal.Gui {
MouseFlags mouseFlag = MouseFlags.AllEvents;
if (IsButtonDoubleClicked) {
Task.Run (async () => {
await Task.Delay (100);
IsButtonDoubleClicked = false;
Application.MainLoop.AddIdle (() => {
ProcessButtonDoubleClickedAsync ().ConfigureAwait (false);
return false;
});
}
@@ -774,23 +775,9 @@ namespace Terminal.Gui {
IsButtonPressed = true;
if ((mouseFlag & MouseFlags.ReportMousePosition) == 0) {
Task.Run (async () => {
while (IsButtonPressed) {
await Task.Delay (200);
var me = new MouseEvent () {
X = mouseEvent.MousePosition.X,
Y = mouseEvent.MousePosition.Y,
Flags = mouseFlag
};
var view = Application.wantContinuousButtonPressedView;
if (view == null)
break;
if (IsButtonPressed && (mouseFlag & MouseFlags.ReportMousePosition) == 0) {
mouseHandler (me);
//mainLoop.Driver.Wakeup ();
}
}
Application.MainLoop.AddIdle (() => {
ProcessContinuousButtonPressedAsync (mouseEvent, mouseFlag).ConfigureAwait (false);
return false;
});
}
@@ -892,6 +879,32 @@ namespace Terminal.Gui {
};
}
private async Task ProcessButtonDoubleClickedAsync ()
{
await Task.Delay (200);
IsButtonDoubleClicked = false;
}
async Task ProcessContinuousButtonPressedAsync (WindowsConsole.MouseEventRecord mouseEvent, MouseFlags mouseFlag)
{
while (IsButtonPressed) {
await Task.Delay (200);
var me = new MouseEvent () {
X = mouseEvent.MousePosition.X,
Y = mouseEvent.MousePosition.Y,
Flags = mouseFlag
};
var view = Application.wantContinuousButtonPressedView;
if (view == null)
break;
if (IsButtonPressed && (mouseFlag & MouseFlags.ReportMousePosition) == 0) {
mouseHandler (me);
//mainLoop.Driver.Wakeup ();
}
}
}
static MouseFlags SetControlKeyStates (WindowsConsole.MouseEventRecord mouseEvent, MouseFlags mouseFlag)
{
if (mouseEvent.ControlKeyState.HasFlag (WindowsConsole.ControlKeyState.RightControlPressed) ||

View File

@@ -352,7 +352,7 @@ namespace Terminal.Gui {
View = view
};
if (OutsideFrame (new Point (nme.X, nme.Y), mouseGrabView.Frame))
lastMouseOwnerView.OnMouseLeave (me);
lastMouseOwnerView?.OnMouseLeave (me);
if (mouseGrabView != null) {
mouseGrabView.OnMouseEvent (nme);
return;