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 } }