Browse Source

Merge pull request #1092 from BDisp/linux-continuous-button-pressed

Fixes #1091. Continuous button pressed not working properly on Linux.
Charlie Kindel 4 years ago
parent
commit
ddbb15d44f
1 changed files with 21 additions and 18 deletions
  1. 21 18
      Terminal.Gui/ConsoleDrivers/CursesDriver/CursesDriver.cs

+ 21 - 18
Terminal.Gui/ConsoleDrivers/CursesDriver/CursesDriver.cs

@@ -269,24 +269,7 @@ 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 ();
-							}
-						}
-					});
+					ProcessContinuousButtonPressedAsync (cev, mouseFlag).ConfigureAwait (false);
 				}
 
 
@@ -371,6 +354,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;