diff --git a/CHANGELOG.md b/CHANGELOG.md index dad5c87e6f..c420d5a4e9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,11 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). +## Unreleased + +### Fixed + +- Fixed issues with initial flicker in `TextArea` rendering https://github.com/Textualize/textual/issues/5841 ## [3.3.0] - 2025-06-01 diff --git a/src/textual/widgets/_text_area.py b/src/textual/widgets/_text_area.py index 1a52cace65..f180c28f30 100644 --- a/src/textual/widgets/_text_area.py +++ b/src/textual/widgets/_text_area.py @@ -500,6 +500,11 @@ def __init__( self._cursor_offset = (0, 0) """The virtual offset of the cursor (not screen-space offset).""" + self.set_reactive(TextArea.soft_wrap, soft_wrap) + self.set_reactive(TextArea.read_only, read_only) + self.set_reactive(TextArea.show_line_numbers, show_line_numbers) + self.set_reactive(TextArea.line_number_start, line_number_start) + self._set_document(text, language) self.language = language @@ -510,11 +515,6 @@ def __init__( reactive is set as a string, the watcher will update this attribute to the corresponding `TextAreaTheme` object.""" - self.set_reactive(TextArea.soft_wrap, soft_wrap) - self.set_reactive(TextArea.read_only, read_only) - self.set_reactive(TextArea.show_line_numbers, show_line_numbers) - self.set_reactive(TextArea.line_number_start, line_number_start) - self.tab_behavior = tab_behavior if tooltip is not None: @@ -1021,7 +1021,7 @@ def wrap_width(self) -> int: width, _ = self.scrollable_content_region.size cursor_width = 1 if self.soft_wrap: - return width - self.gutter_width - cursor_width + return max(0, width - self.gutter_width - cursor_width) return 0 def _rewrap_and_refresh_virtual_size(self) -> None: