Explorar el Código

Fix for setting and removing focus when using mouse.

- Ensure focus is always sent up the chain of subviews.
- Ensure that removed focus is sent down the chain of subviews.
Martin Björkström hace 7 años
padre
commit
ea4d0646b2
Se han modificado 1 ficheros con 12 adiciones y 1 borrados
  1. 12 1
      Terminal.Gui/Core.cs

+ 12 - 1
Terminal.Gui/Core.cs

@@ -728,8 +728,15 @@ namespace Terminal.Gui {
 				if (base.HasFocus != value)
 					SetNeedsDisplay ();
 				base.HasFocus = value;
+
+				// Remove focus down the chain of subviews if focus is removed
+				if (value == false && focused != null) {
+					focused.HasFocus = false;
+					focused = null;
+				}
 			}
 		}
+
 		/// <summary>
 		/// Returns the currently focused view inside this view, or null if nothing is focused.
 		/// </summary>
@@ -847,9 +854,13 @@ namespace Terminal.Gui {
 
 			if (focused != null)
 				focused.HasFocus = false;
+
 			focused = view;
 			focused.HasFocus = true;
 			focused.EnsureFocus ();
+
+			// Send focus upwards
+			SuperView?.SetFocus(this);
 		}
 
 		/// <param name="keyEvent">Contains the details about the key that produced the event.</param>
@@ -1752,7 +1763,7 @@ namespace Terminal.Gui {
 			if (view != null) {
 				if (!view.WantMousePositionReports && me.Flags == MouseFlags.ReportMousePosition)
 					return;
-				
+
 				var nme = new MouseEvent () {
 					X = rx,
 					Y = ry,