diff --git a/sandbox/will/basic.css b/sandbox/will/basic.css index ade36299e..ab50375b6 100644 --- a/sandbox/will/basic.css +++ b/sandbox/will/basic.css @@ -21,6 +21,8 @@ App > Screen { color: $text-background; background: $background; layout: vertical; + + overflow: hidden; } diff --git a/sandbox/will/basic.py b/sandbox/will/basic.py index 4c48bc874..d4e583323 100644 --- a/sandbox/will/basic.py +++ b/sandbox/will/basic.py @@ -7,7 +7,7 @@ from textual.app import App, ComposeResult from textual.reactive import Reactive from textual.widget import Widget from textual.widgets import Static, DataTable, DirectoryTree, Header, Footer -from textual.layout import Vertical +from textual.layout import Container CODE = ''' from __future__ import annotations @@ -120,7 +120,7 @@ class BasicApp(App, css_path="basic.css"): table = DataTable() self.scroll_to_target = Tweet(TweetBody()) - yield from ( + yield Container( Tweet(TweetBody()), Widget( Static( @@ -141,15 +141,15 @@ class BasicApp(App, css_path="basic.css"): Tweet(TweetBody(), classes="scroll-horizontal"), Tweet(TweetBody(), classes="scroll-horizontal"), Tweet(TweetBody(), classes="scroll-horizontal"), - Widget( - Widget(classes="title"), - Widget(classes="user"), - OptionItem(), - OptionItem(), - OptionItem(), - Widget(classes="content"), - id="sidebar", - ), + ) + yield Widget( + Widget(classes="title"), + Widget(classes="user"), + OptionItem(), + OptionItem(), + OptionItem(), + Widget(classes="content"), + id="sidebar", ) yield Footer() diff --git a/src/textual/widget.py b/src/textual/widget.py index 494249912..f0ea13ad3 100644 --- a/src/textual/widget.py +++ b/src/textual/widget.py @@ -135,6 +135,16 @@ class Widget(DOMNode): show_vertical_scrollbar = Reactive(False, layout=True) show_horizontal_scrollbar = Reactive(False, layout=True) + @property + def allow_vertical_scroll(self) -> bool: + """Check if vertical scroll is permitted.""" + return self.is_scrollable and self.show_vertical_scrollbar + + @property + def allow_horizontal_scroll(self) -> bool: + """Check if horizontal scroll is permitted.""" + return self.is_scrollable and self.show_horizontal_scrollbar + def _arrange(self, size: Size) -> DockArrangeResult: """Arrange children. @@ -1195,12 +1205,12 @@ class Widget(DOMNode): break def on_mouse_scroll_down(self, event) -> None: - if self.is_scrollable: + if self.allow_vertical_scroll: if self.scroll_down(animate=False): event.stop() def on_mouse_scroll_up(self, event) -> None: - if self.is_scrollable: + if self.allow_vertical_scroll: if self.scroll_up(animate=False): event.stop()