diff --git a/Terminal.Gui/Drivers/CursesDriver/CursesDriver.cs b/Terminal.Gui/Drivers/CursesDriver/CursesDriver.cs
index 350697d580..087f3b17d4 100644
--- a/Terminal.Gui/Drivers/CursesDriver/CursesDriver.cs
+++ b/Terminal.Gui/Drivers/CursesDriver/CursesDriver.cs
@@ -536,6 +536,8 @@ public override bool GetCursorVisibility (out CursorVisibility visibility)
return true;
}
+ private EscSeqUtils.DECSCUSR_Style? _currentDecscusrStyle;
+
///
public override bool SetCursorVisibility (CursorVisibility visibility)
{
@@ -547,17 +549,19 @@ public override bool SetCursorVisibility (CursorVisibility visibility)
if (!RunningUnitTests)
{
Curses.curs_set (((int)visibility >> 16) & 0x000000FF);
+ Curses.leaveok (_window!.Handle, !Force16Colors);
}
if (visibility != CursorVisibility.Invisible)
{
- _mainLoopDriver?.WriteRaw (
- EscSeqUtils.CSI_SetCursorStyle (
- (EscSeqUtils.DECSCUSR_Style)
- (((int)visibility >> 24)
- & 0xFF)
- )
- );
+ if (_currentDecscusrStyle is null || _currentDecscusrStyle != (EscSeqUtils.DECSCUSR_Style)(((int)visibility >> 24) & 0xFF))
+ {
+ _currentDecscusrStyle = (EscSeqUtils.DECSCUSR_Style)(((int)visibility >> 24) & 0xFF);
+
+ _mainLoopDriver?.WriteRaw (
+ EscSeqUtils.CSI_SetCursorStyle ((EscSeqUtils.DECSCUSR_Style)_currentDecscusrStyle)
+ );
+ }
}
_currentCursorVisibility = visibility;
diff --git a/Terminal.Gui/Drivers/CursesDriver/UnixMainLoop.cs b/Terminal.Gui/Drivers/CursesDriver/UnixMainLoop.cs
index 50053f4bb0..6408b66b86 100644
--- a/Terminal.Gui/Drivers/CursesDriver/UnixMainLoop.cs
+++ b/Terminal.Gui/Drivers/CursesDriver/UnixMainLoop.cs
@@ -249,8 +249,7 @@ private struct Pollfd
private class Watch
{
- // BUGBUG: Fix this nullable issue.
- public Func Callback;
+ public Func? Callback;
public Condition Condition;
public int File;
}
diff --git a/Terminal.Gui/ViewBase/ViewCollectionHelpers.cs b/Terminal.Gui/ViewBase/ViewCollectionHelpers.cs
index 1c7697d0c1..a8d6cc5c12 100644
--- a/Terminal.Gui/ViewBase/ViewCollectionHelpers.cs
+++ b/Terminal.Gui/ViewBase/ViewCollectionHelpers.cs
@@ -10,7 +10,7 @@ internal static View [] Snapshot (this IEnumerable source)
// The list parameter might be the live `_subviews`, so freeze it under a lock
lock (list)
{
- return [.. list]; // C# 12 slice copy (= new List(list).ToArray())
+ return list.ToArray (); // It’s slightly less “fancy C# 12”, but much safer in multithreaded code
}
}