Skip to content

Commit 03d5075

Browse files
authored
Merge pull request #1423 from davep/bug/1355/visibility-react
Fix changes to visibility needing an explicit refresh to take effect
2 parents a4aa30e + 765dd13 commit 03d5075

File tree

3 files changed

+48
-1
lines changed

3 files changed

+48
-1
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
1212
- Fixed issues with nested auto dimensions https://github.com/Textualize/textual/issues/1402
1313
- Fixed watch method incorrectly running on first set when value hasn't changed and init=False https://github.com/Textualize/textual/pull/1367
1414
- `App.dark` can now be set from `App.on_load` without an error being raised https://github.com/Textualize/textual/issues/1369
15+
- Fixed setting `visibility` changes needing a `refresh` https://github.com/Textualize/textual/issues/1355
1516

1617
### Added
1718

src/textual/css/styles.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ class StylesBase(ABC):
209209
node: DOMNode | None = None
210210

211211
display = StringEnumProperty(VALID_DISPLAY, "block", layout=True)
212-
visibility = StringEnumProperty(VALID_VISIBILITY, "visible")
212+
visibility = StringEnumProperty(VALID_VISIBILITY, "visible", layout=True)
213213
layout = LayoutProperty()
214214

215215
auto_color = BooleanProperty(default=False)

tests/test_visibility_change.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
"""See https://github.com/Textualize/textual/issues/1355 as the motivation for these tests."""
2+
3+
from textual.app import App, ComposeResult
4+
from textual.containers import Vertical
5+
from textual.widget import Widget
6+
7+
8+
class VisibleTester(App[None]):
9+
"""An app for testing visibility changes."""
10+
11+
CSS = """
12+
Widget {
13+
height: 1fr;
14+
}
15+
.hidden {
16+
visibility: hidden;
17+
}
18+
"""
19+
20+
def compose(self) -> ComposeResult:
21+
yield Vertical(
22+
Widget(id="keep"), Widget(id="hide-via-code"), Widget(id="hide-via-css")
23+
)
24+
25+
26+
async def test_visibility_changes() -> None:
27+
"""Test changing visibility via code and CSS."""
28+
async with VisibleTester().run_test() as pilot:
29+
assert len(pilot.app.screen.visible_widgets) == 5
30+
assert pilot.app.query_one("#keep").visible is True
31+
assert pilot.app.query_one("#hide-via-code").visible is True
32+
assert pilot.app.query_one("#hide-via-css").visible is True
33+
34+
pilot.app.query_one("#hide-via-code").styles.visibility = "hidden"
35+
await pilot.pause(0)
36+
assert len(pilot.app.screen.visible_widgets) == 4
37+
assert pilot.app.query_one("#keep").visible is True
38+
assert pilot.app.query_one("#hide-via-code").visible is False
39+
assert pilot.app.query_one("#hide-via-css").visible is True
40+
41+
pilot.app.query_one("#hide-via-css").set_class(True, "hidden")
42+
await pilot.pause(0)
43+
assert len(pilot.app.screen.visible_widgets) == 3
44+
assert pilot.app.query_one("#keep").visible is True
45+
assert pilot.app.query_one("#hide-via-code").visible is False
46+
assert pilot.app.query_one("#hide-via-css").visible is False

0 commit comments

Comments
 (0)