Fixes #1091. Continuous button pressed not working properly on Linux.

This commit is contained in:
BDisp
2021-01-20 14:54:34 +00:00
parent cbbce244dc
commit f568166fb8

View File

@@ -269,23 +269,9 @@ namespace Terminal.Gui {
}
if ((mouseFlag & MouseFlags.ReportMousePosition) == 0) {
Task.Run (async () => {
while (IsButtonPressed && LastMouseButtonPressed != null) {
await Task.Delay (100);
var me = new MouseEvent () {
X = cev.X,
Y = cev.Y,
Flags = mouseFlag
};
var view = Application.wantContinuousButtonPressedView;
if (view == null)
break;
if (IsButtonPressed && LastMouseButtonPressed != null && (mouseFlag & MouseFlags.ReportMousePosition) == 0) {
mouseHandler (me);
//mainLoop.Driver.Wakeup ();
}
}
Application.MainLoop.AddIdle (() => {
ProcessContinuousButtonPressedAsync (cev, mouseFlag).ConfigureAwait (false);
return false;
});
}
@@ -342,7 +328,7 @@ namespace Terminal.Gui {
};
}
private MouseFlags ProcessButtonClickedEvent (Curses.MouseEvent cev)
MouseFlags ProcessButtonClickedEvent (Curses.MouseEvent cev)
{
LastMouseButtonPressed = cev.ButtonState;
var mf = GetButtonState (cev, true);
@@ -358,7 +344,7 @@ namespace Terminal.Gui {
return mf;
}
private MouseFlags ProcessButtonReleasedEvent (Curses.MouseEvent cev)
MouseFlags ProcessButtonReleasedEvent (Curses.MouseEvent cev)
{
var mf = MapCursesButton (cev.ButtonState);
if (!cancelButtonClicked && LastMouseButtonPressed == null && !isReportMousePosition) {
@@ -371,6 +357,26 @@ namespace Terminal.Gui {
return mf;
}
async Task ProcessContinuousButtonPressedAsync (Curses.MouseEvent cev, MouseFlags mouseFlag)
{
while (IsButtonPressed && LastMouseButtonPressed != null) {
await Task.Delay (100);
var me = new MouseEvent () {
X = cev.X,
Y = cev.Y,
Flags = mouseFlag
};
var view = Application.wantContinuousButtonPressedView;
if (view == null)
break;
if (IsButtonPressed && LastMouseButtonPressed != null && (mouseFlag & MouseFlags.ReportMousePosition) == 0) {
mouseHandler (me);
//mainLoop.Driver.Wakeup ();
}
}
}
MouseFlags GetButtonState (Curses.MouseEvent cev, bool pressed = false)
{
MouseFlags mf = default;