2
0
Эх сурвалжийг харах

Fixes #776. TextField and TextView now respect the CanFocus property of his container.

BDisp 5 жил өмнө
parent
commit
93e9255d7c

+ 16 - 6
Terminal.Gui/Views/TextField.cs

@@ -267,7 +267,7 @@ namespace Terminal.Gui {
 
 		///<inheritdoc/>
 		public override bool CanFocus {
-			get => true;
+			get => base.CanFocus;
 			set { base.CanFocus = value; }
 		}
 
@@ -637,6 +637,7 @@ namespace Terminal.Gui {
 		public ustring SelectedText { get; set; }
 
 		int start, length;
+		bool isButtonPressed;
 		bool isButtonReleased = true;
 
 		///<inheritdoc/>
@@ -644,17 +645,24 @@ namespace Terminal.Gui {
 		{
 			if (!ev.Flags.HasFlag (MouseFlags.Button1Pressed) && !ev.Flags.HasFlag (MouseFlags.ReportMousePosition) &&
 				!ev.Flags.HasFlag (MouseFlags.Button1Released) && !ev.Flags.HasFlag (MouseFlags.Button1DoubleClicked) &&
-				!ev.Flags.HasFlag (MouseFlags.Button1TripleClicked))
+				!ev.Flags.HasFlag (MouseFlags.Button1TripleClicked)) {
 				return false;
+			}
 
 			if (ev.Flags == MouseFlags.Button1Pressed) {
-				if (!HasFocus)
+				if (!CanFocus) {
+					return true;
+				}
+				if (!HasFocus) {
 					SuperView.SetFocus (this);
+				}
 				PositionCursor (ev);
-				if (isButtonReleased)
+				if (isButtonReleased) {
 					ClearAllSelection ();
+				}
 				isButtonReleased = true;
-			} else if (ev.Flags == (MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition)) {
+				isButtonPressed = true;
+			} else if (ev.Flags == (MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition) && isButtonPressed) {
 				int x = PositionCursor (ev);
 				isButtonReleased = false;
 				PrepareSelection (x);
@@ -663,12 +671,14 @@ namespace Terminal.Gui {
 				}
 			} else if (ev.Flags == MouseFlags.Button1Released) {
 				isButtonReleased = true;
+				isButtonPressed = false;
 				Application.UngrabMouse ();
 			} else if (ev.Flags == MouseFlags.Button1DoubleClicked) {
 				int x = PositionCursor (ev);
 				int sbw = x;
-				if (x > 0 && (char)Text [x - 1] != ' ')
+				if (x > 0 && (char)Text [x - 1] != ' ') {
 					sbw = WordBackward (x);
+				}
 				if (sbw != -1) {
 					x = sbw;
 					PositionCursor (x);

+ 7 - 2
Terminal.Gui/Views/TextView.cs

@@ -565,7 +565,7 @@ namespace Terminal.Gui {
 
 		///<inheritdoc/>
 		public override bool CanFocus {
-			get => true;
+			get => base.CanFocus;
 			set { base.CanFocus = value; }
 		}
 
@@ -1199,8 +1199,13 @@ namespace Terminal.Gui {
 				return false;
 			}
 
-			if (!HasFocus)
+			if (!CanFocus) {
+				return true;
+			}
+
+			if (!HasFocus) {
 				SuperView.SetFocus (this);
+			}
 
 			if (ev.Flags == MouseFlags.Button1Clicked) {
 				if (model.Count > 0) {