From 5e3175cd9de7a689a8b106cdd0101df04a5a87c1 Mon Sep 17 00:00:00 2001 From: BDisp Date: Sat, 6 Dec 2025 16:09:52 +0000 Subject: [PATCH] Fixes #4449. Regression in IsLegacyConsole mode where dirty cells are not handled correctly (#4451) * Fixes #4449. Regression in IsLegacyConsole mode where dirty cells are not handled correctly * Cursor position is always set in the beginning a new row or on non-dirty flags --- Terminal.Gui/Drivers/OutputBase.cs | 20 ++----------------- .../Drivers/OutputBaseTests.cs | 2 +- 2 files changed, 3 insertions(+), 19 deletions(-) diff --git a/Terminal.Gui/Drivers/OutputBase.cs b/Terminal.Gui/Drivers/OutputBase.cs index ebf403e66..dfa512192 100644 --- a/Terminal.Gui/Drivers/OutputBase.cs +++ b/Terminal.Gui/Drivers/OutputBase.cs @@ -67,22 +67,6 @@ public abstract class OutputBase Attribute? redrawAttr = null; int lastCol = -1; - if (IsLegacyConsole) - { - // BUGBUG: This is a workaround for some regression in legacy console mode where - // BUGBUG: dirty cells are not handled correctly. Mark all cells dirty as a workaround. - lock (buffer.Contents!) - { - for (var row = 0; row < buffer.Rows; row++) - { - for (var c = 0; c < buffer.Cols; c++) - { - buffer.Contents [row, c].IsDirty = true; - } - } - } - } - SetCursorVisibility (CursorVisibility.Invisible); for (int row = top; row < rows; row++) @@ -117,6 +101,8 @@ public abstract class OutputBase lastCol++; } + SetCursorPositionImpl (lastCol, row); + continue; } @@ -296,8 +282,6 @@ public abstract class OutputBase private void WriteToConsole (StringBuilder output, ref int lastCol, int row, ref int outputWidth) { - SetCursorPositionImpl (lastCol, row); - if (IsLegacyConsole) { Write (output); diff --git a/Tests/UnitTestsParallelizable/Drivers/OutputBaseTests.cs b/Tests/UnitTestsParallelizable/Drivers/OutputBaseTests.cs index 20f8cd81b..0b4c84436 100644 --- a/Tests/UnitTestsParallelizable/Drivers/OutputBaseTests.cs +++ b/Tests/UnitTestsParallelizable/Drivers/OutputBaseTests.cs @@ -151,7 +151,7 @@ public class OutputBaseTests Assert.False (buffer.Contents! [0, 2].IsDirty); // Verify SetCursorPositionImpl was invoked by WriteToConsole (cursor set to a written column) - Assert.Equal (new Point (0, 0), output.GetCursorPosition ()); + Assert.Equal (new Point (2, 0), output.GetCursorPosition ()); } [Theory]