Browse Source

Made CursorLeft/CursorRight change focus when cursor position is at start/end of a TextView (#1271)

Thomas Nind 4 years ago
parent
commit
71e719fb2b
1 changed files with 19 additions and 0 deletions
  1. 19 0
      Terminal.Gui/Views/TextView.cs

+ 19 - 0
Terminal.Gui/Views/TextView.cs

@@ -1944,6 +1944,25 @@ namespace Terminal.Gui {
 			int restCount;
 			List<Rune> rest;
 
+			// if the user presses Left (without any control keys) and they are at the start of the text
+			if(kb.Key == Key.CursorLeft && currentColumn == 0 && currentRow == 0) {
+				// do not respond (this lets the key press fall through to navigation system - which usually changes focus backward)
+				return false;
+			}
+
+			// if the user presses Right (without any control keys)
+			if (kb.Key == Key.CursorRight) {
+
+				// determine where the last cursor position in the text is
+				var lastRow = model.Count - 1;
+				var lastCol = model.GetLine (lastRow).Count;
+
+				// if they are at the very end of all the text do not respond (this lets the key press fall through to navigation system - which usually changes focus forward)
+				if (currentColumn == lastCol && currentRow == lastRow) {
+					return false;
+				}
+			}
+
 			// Handle some state here - whether the last command was a kill
 			// operation and the column tracking (up/down)
 			switch (kb.Key) {