Просмотр исходного кода

Fixes #933. Updated to work with libncurses 6.2

BDisp 4 лет назад
Родитель
Сommit
749df4197f

+ 5 - 16
Terminal.Gui/ConsoleDrivers/CursesDriver/CursesDriver.cs

@@ -189,7 +189,6 @@ namespace Terminal.Gui {
 		Curses.Event? LastMouseButtonPressed;
 		bool IsButtonPressed;
 		bool cancelButtonClicked;
-		bool canWheeledDown;
 		bool isReportMousePosition;
 		Point point;
 
@@ -258,30 +257,22 @@ namespace Terminal.Gui {
 
 				mouseFlag = ProcessButtonReleasedEvent (cev);
 				IsButtonPressed = false;
-				canWheeledDown = false;
 
-			} else if (cev.ButtonState == Curses.Event.Button4Pressed) {
+			} else if (cev.ButtonState == Curses.Event.ButtonWheeledUp) {
 
 				mouseFlag = MouseFlags.WheeledUp;
 
-			} else if (cev.ButtonState == Curses.Event.ReportMousePosition && cev.X == point.X && cev.Y == point.Y &&
-				canWheeledDown) {
+			} else if (cev.ButtonState == Curses.Event.ButtonWheeledDown) {
 
 				mouseFlag = MouseFlags.WheeledDown;
-				canWheeledDown = true;
 
-			}
-			else if (cev.ButtonState == Curses.Event.ReportMousePosition && !canWheeledDown) {
+			} else if (cev.ButtonState == Curses.Event.ReportMousePosition) {
 
 				mouseFlag = MouseFlags.ReportMousePosition;
-				canWheeledDown = true;
 				isReportMousePosition = true;
 
 			} else {
 				mouseFlag = (MouseFlags)cev.ButtonState;
-				canWheeledDown = false;
-				if (cev.ButtonState == Curses.Event.ReportMousePosition)
-					isReportMousePosition = true;
 			}
 
 			point = new Point () {
@@ -310,7 +301,6 @@ namespace Terminal.Gui {
 				}
 			}
 			LastMouseButtonPressed = null;
-			canWheeledDown = false;
 			return mf;
 		}
 
@@ -324,7 +314,6 @@ namespace Terminal.Gui {
 				mf = MouseFlags.ReportMousePosition;
 			}
 			cancelButtonClicked = false;
-			canWheeledDown = false;
 			return mf;
 		}
 
@@ -414,8 +403,8 @@ namespace Terminal.Gui {
 					}
 				}
 				if (wch == Curses.KeyMouse) {
-					Curses.MouseEvent ev;
-					Curses.getmouse (out ev);
+					Curses.getmouse (out Curses.MouseEvent ev);
+					//System.Diagnostics.Debug.WriteLine ($"ButtonState: {ev.ButtonState}; ID: {ev.ID}; X: {ev.X}; Y: {ev.Y}; Z: {ev.Z}");
 					mouseHandler (ToDriverMouse (ev));
 					return;
 				}

+ 19 - 15
Terminal.Gui/ConsoleDrivers/CursesDriver/constants.cs

@@ -2,7 +2,7 @@
  * This file is autogenerated by the attrib.c program, do not edit
  */
 
-#define XTERM1006
+//#define XTERM1006
 
 using System;
 
@@ -52,31 +52,35 @@ namespace Unix.Terminal {
 		public const int COLOR_CYAN = unchecked((int)0x6);
 		public const int COLOR_WHITE = unchecked((int)0x7);
 		public const int KEY_CODE_YES = unchecked((int)0x100);
+
+		[Flags]
 		public enum Event : long {
 			Button1Pressed = unchecked((int)0x2),
 			Button1Released = unchecked((int)0x1),
 			Button1Clicked = unchecked((int)0x4),
 			Button1DoubleClicked = unchecked((int)0x8),
 			Button1TripleClicked = unchecked((int)0x10),
-			Button2Pressed = unchecked((int)0x80),
-			Button2Released = unchecked((int)0x40),
-			Button2Clicked = unchecked((int)0x100),
-			Button2DoubleClicked = unchecked((int)0x200),
-			Button2TrippleClicked = unchecked((int)0x400),
-			Button3Pressed = unchecked((int)0x2000),
-			Button3Released = unchecked((int)0x1000),
-			Button3Clicked = unchecked((int)0x4000),
-			Button3DoubleClicked = unchecked((int)0x8000),
-			Button3TripleClicked = unchecked((int)0x10000),
+			Button2Pressed = unchecked((int)0x40),
+			Button2Released = unchecked((int)0x20),
+			Button2Clicked = unchecked((int)0x80),
+			Button2DoubleClicked = unchecked((int)0x100),
+			Button2TrippleClicked = unchecked((int)0x200),
+			Button3Pressed = unchecked((int)0x800),
+			Button3Released = unchecked((int)0x400),
+			Button3Clicked = unchecked((int)0x1000),
+			Button3DoubleClicked = unchecked((int)0x2000),
+			Button3TripleClicked = unchecked((int)0x4000),
+			ButtonWheeledUp = unchecked((int)0x10000),
+			ButtonWheeledDown = unchecked((int)0x200000),
 			Button4Pressed = unchecked((int)0x80000),
 			Button4Released = unchecked((int)0x40000),
 			Button4Clicked = unchecked((int)0x100000),
 			Button4DoubleClicked = unchecked((int)0x200000),
 			Button4TripleClicked = unchecked((int)0x400000),
-			ButtonShift = unchecked((int)0x2000000),
-			ButtonCtrl = unchecked((int)0x1000000),
-			ButtonAlt = unchecked((int)0x4000000),
-			ReportMousePosition = unchecked((int)0x8000000),
+			ButtonShift = unchecked((int)0x4000000),
+			ButtonCtrl = unchecked((int)0x2000000),
+			ButtonAlt = unchecked((int)0x8000000),
+			ReportMousePosition = unchecked((int)0x10000000),
 			AllEvents = unchecked((int)0x7ffffff),
 		}
 #if XTERM1006