Browse Source

Fixing Cursor Display under Windows; setting more coherence between windows & linux at CursorVivibility enum

Gilles Freart 4 years ago
parent
commit
92e9d29e37

+ 2 - 2
Terminal.Gui/ConsoleDrivers/NetDriver.cs

@@ -1737,12 +1737,12 @@ namespace Terminal.Gui {
 
 		public override bool SetCursorVisibility (CursorVisibility visibility)
 		{
-			return NetWinConsole.SetCursorVisibility (visibility);
+			return NetWinConsole?.SetCursorVisibility (visibility) ?? false;
 		}
 
 		public override bool EnsureCursorVisibility ()
 		{
-			return NetWinConsole.EnsureCursorVisibility ();
+			return NetWinConsole?.EnsureCursorVisibility () ?? false;
 		}
 		#endregion
 

+ 4 - 4
Terminal.Gui/ConsoleDrivers/WindowsDriver.cs

@@ -85,7 +85,7 @@ namespace Terminal.Gui {
 				}
 			}
 
-			if (GetCursorVisibility (out CursorVisibility visibility)) {
+			if (!initialCursorVisibility.HasValue && GetCursorVisibility (out CursorVisibility visibility)) {
 				initialCursorVisibility = visibility;
 			}
 
@@ -129,9 +129,9 @@ namespace Terminal.Gui {
 				return false;
 			}
 
-			if (!info.bVisible)			visibility = CursorVisibility.Invisible;
-			else if (info.dwSize > 50)	visibility = CursorVisibility.Box;
-			else						visibility = CursorVisibility.Underline;
+			if (!info.bVisible)        visibility = CursorVisibility.Invisible;
+			else if (info.dwSize > 50) visibility = CursorVisibility.Box;
+			else                       visibility = CursorVisibility.Underline;
 
 			return true;
 		}

+ 15 - 16
Terminal.Gui/Core/ConsoleDriver.cs

@@ -491,46 +491,45 @@ namespace Terminal.Gui {
 		/// <summary>
 		///	Cursor caret has default
 		/// </summary>
-		Default 			= 0x00010119,
+		Default = 0x00010119,
 
 		/// <summary>
 		///	Cursor caret is hidden
 		/// </summary>
-		Invisible 			= 0x03000019,
+		Invisible = 0x03000019,
 
 		/// <summary>
-		///	Cursor caret is normally shown as an _
+		///	Cursor caret is normally shown as a blinking underline bar _
 		/// </summary>
-		/// <remarks>Under Windows, this is equivalent to <see ref="UnderscoreBlinking"/></remarks>
-		Underline			= 0x04010019,
+		Underline = 0x03010119,
 
 		/// <summary>
-		///	Cursor caret is normally shown as an blinking _
+		///	Cursor caret is normally shown as a underline bar _
 		/// </summary>
-		UnderlineBlinking	= 0x03010019,
+		/// <remarks>Under Windows, this is equivalent to <see ref="UnderscoreBlinking"/></remarks>
+		UnderlineFix = 0x04010119,
 
 		/// <summary>
-		///	Cursor caret is displayed a bar |
+		///	Cursor caret is displayed a blinking vertical bar |
 		/// </summary>
-		/// <remarks>Works under Xterm-like terminal otherwise this is equivalent to <see ref="UnderscoreBlinking"/></remarks>
-		Vertical			= 0x06010019,
+		Vertical = 0x05010119,
 
 		/// <summary>
 		///	Cursor caret is displayed a blinking bar |
 		/// </summary>
-		/// <remarks>Works under Xterm-like terminal otherwise this is equivalent to <see ref="UnderscoreBlinking"/></remarks>
-		VerticalBlinking	= 0x05010019,
+		/// <remarks>Works under Xterm-like terminal otherwise this is equivalent to <see ref="Underscore"/></remarks>
+		VerticalFix = 0x06010119,
 
 		/// <summary>
-		///	Cursor caret is displayed a block ▉
+		///	Cursor caret is displayed as a blinking block ▉
 		/// </summary>
-		/// <remarks>Works under Xterm-like terminal otherwise this is equivalent to <see ref="BlockBlinking"/></remarks>
-		Box					= 0x02020064,
+		Box = 0x01020164,
 
 		/// <summary>
 		///	Cursor caret is displayed a block ▉
 		/// </summary>
-		BoxBlinking			= 0x01020064,
+		/// <remarks>Works under Xterm-like terminal otherwise this is equivalent to <see ref="Block"/></remarks>
+		BoxFix = 0x02020164,
 	}
 
 	///// <summary>

+ 1 - 1
Terminal.Gui/Views/HexView.cs

@@ -396,7 +396,7 @@ namespace Terminal.Gui {
 			edits = new SortedDictionary<long, byte> ();
 		}
 
-		private CursorVisibility wishedCursorVisibility = CursorVisibility.BoxBlinking;
+		private CursorVisibility wishedCursorVisibility = CursorVisibility.BoxFix;
 
 		/// <summary>
 		/// Get / Set the wished cursor when the field is focused

+ 1 - 1
Terminal.Gui/Views/TextField.cs

@@ -868,7 +868,7 @@ namespace Terminal.Gui {
 		}
 
 
-		private CursorVisibility wishedCursorVisibility = CursorVisibility.BoxBlinking;
+		private CursorVisibility wishedCursorVisibility = CursorVisibility.BoxFix;
 
 		/// <summary>
 		/// Get / Set the wished cursor when the field is focused

+ 1 - 1
Terminal.Gui/Views/TextView.cs

@@ -599,7 +599,7 @@ namespace Terminal.Gui {
 			}
 		}
 
-		private CursorVisibility wishedCursorVisibility = CursorVisibility.BoxBlinking;
+		private CursorVisibility wishedCursorVisibility = CursorVisibility.BoxFix;
 
 		/// <summary>
 		/// Get / Set the wished cursor when the field is focused

+ 1 - 2
UICatalog/Properties/launchSettings.json

@@ -1,8 +1,7 @@
 {
   "profiles": {
     "UICatalog": {
-      "commandName": "Project",
-      "commandLineArgs": "-usc"
+      "commandName": "Project"
     }
   }
 }

+ 39 - 28
UICatalog/Scenarios/Editor.cs

@@ -1,5 +1,6 @@
 using System;
 using System.Text;
+using System.Collections.Generic;
 using Terminal.Gui;
 
 namespace UICatalog {
@@ -23,34 +24,44 @@ namespace UICatalog {
 				Top = Application.Top;
 			}
 
-			var menu = new MenuBar (new MenuBarItem [] {
-				new MenuBarItem ("_File", new MenuItem [] {
-					new MenuItem ("_New", "", () => New()),
-					new MenuItem ("_Open", "", () => Open()),
-					new MenuItem ("_Save", "", () => Save()),
-					null,
-					new MenuItem ("_Quit", "", () => Quit()),
-				}),
-				new MenuBarItem ("_Edit", new MenuItem [] {
-					new MenuItem ("_Copy", "", () => Copy()),
-					new MenuItem ("C_ut", "", () => Cut()),
-					new MenuItem ("_Paste", "", () => Paste())
-				}),
-				new MenuBarItem ("_Cursor", new MenuItem [] {
-					new MenuItem ("_Invisible",           "", () => SetCursor(CursorVisibility.Invisible)),
-					new MenuItem ("_Box",                 "", () => SetCursor(CursorVisibility.Box)),
-					new MenuItem ("_Underline",           "", () => SetCursor(CursorVisibility.Underline)),
-					new MenuItem ("", 				      "", () => {}, () => { return false; }),
-					new MenuItem ("xTerm :", 			  "", () => {}, () => { return false; }),
-					new MenuItem ("", 				      "", () => {}, () => { return false; }),
-					new MenuItem ("  _Default",    		  "", () => SetCursor(CursorVisibility.Default)),
-					new MenuItem ("  B_ox Blinking",      "", () => SetCursor(CursorVisibility.BoxBlinking)),
-					new MenuItem ("  U_nderline Blinking","", () => SetCursor(CursorVisibility.UnderlineBlinking)),
-					new MenuItem ("  _Vertical",          "", () => SetCursor(CursorVisibility.Vertical)),
-					new MenuItem ("  V_ertical Blinking", "", () => SetCursor(CursorVisibility.VerticalBlinking))
-				}),
-				new MenuBarItem ("_ScrollBarView", CreateKeepChecked ())
-			});
+			List<MenuBarItem> menuBarItems = new List<MenuBarItem> ();
+
+			menuBarItems.AddRange	(	new MenuBarItem [] 
+							{
+								new MenuBarItem ("_File", new MenuItem [] {
+									new MenuItem ("_New", "", () => New()),
+									new MenuItem ("_Open", "", () => Open()),
+									new MenuItem ("_Save", "", () => Save()),
+									null,
+									new MenuItem ("_Quit", "", () => Quit()),
+								}),
+								new MenuBarItem ("_Edit", new MenuItem [] {
+									new MenuItem ("_Copy", "", () => Copy()),
+									new MenuItem ("C_ut", "", () => Cut()),
+									new MenuItem ("_Paste", "", () => Paste())
+								}),
+								new MenuBarItem ("_ScrollBarView", CreateKeepChecked ())
+							}
+						);
+
+			if (!Application.UseSystemConsole) {
+				menuBarItems.Add (new MenuBarItem ("_Cursor", new MenuItem [] {
+							new MenuItem ("_Invisible",      "", () => SetCursor(CursorVisibility.Invisible)),
+							new MenuItem ("_Box",            "", () => SetCursor(CursorVisibility.Box)),
+							new MenuItem ("_Underline",      "", () => SetCursor(CursorVisibility.Underline)),
+							new MenuItem ("",                "", () => {}, () => { return false; }),
+							new MenuItem ("xTerm :",         "", () => {}, () => { return false; }),
+							new MenuItem ("",                "", () => {}, () => { return false; }),
+							new MenuItem ("  _Default",      "", () => SetCursor(CursorVisibility.Default)),
+							new MenuItem ("  _Vertical",     "", () => SetCursor(CursorVisibility.Vertical)),
+							new MenuItem ("  V_ertical Fix", "", () => SetCursor(CursorVisibility.VerticalFix)),
+							new MenuItem ("  B_ox Fix",      "", () => SetCursor(CursorVisibility.BoxFix)),
+							new MenuItem ("  U_nderline Fix","", () => SetCursor(CursorVisibility.UnderlineFix))
+						}));
+			}
+
+			var menu = new MenuBar (menuBarItems.ToArray());
+
 			Top.Add (menu);
 
 			var statusBar = new StatusBar (new StatusItem [] {