From ce8e19bbde688a8278aa9b30a592d98346eb0e71 Mon Sep 17 00:00:00 2001 From: BDisp Date: Sat, 6 Sep 2025 16:03:57 +0100 Subject: [PATCH 1/3] Fixes #4236. CursesDriver erase the previous text under the cursor when moving if Force16Colors is true --- .../Drivers/CursesDriver/CursesDriver.cs | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) 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; From ecfee32c3919617795e2be127955cb7e2bdbc503 Mon Sep 17 00:00:00 2001 From: BDisp Date: Sat, 6 Sep 2025 17:15:37 +0100 Subject: [PATCH 2/3] Still trying to fix fluent unit tests --- Terminal.Gui/ViewBase/ViewCollectionHelpers.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 } } From 6a0705dae1fcfe73d7d189d0f99f38230fa555fb Mon Sep 17 00:00:00 2001 From: BDisp Date: Mon, 8 Sep 2025 12:22:51 +0100 Subject: [PATCH 3/3] Fix nullable issue --- Terminal.Gui/Drivers/CursesDriver/UnixMainLoop.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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; }