Skip to content

Commit da5b7aa

Browse files
authored
Merge pull request #6598 from Textualize/screen-padding
fix screen padding crash
2 parents 8ce58dc + 77e25d5 commit da5b7aa

7 files changed

Lines changed: 373 additions & 10 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
1010
### Fixed
1111

1212
- Fixed parsing Kitty extended keys with multiple codepoints https://github.com/Textualize/textual/pull/6592
13+
- Fixed crash when clicking in the Screen's padding https://github.com/Textualize/textual/pull/6598
1314

1415
### Changed
1516

src/textual/_compositor.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -923,11 +923,8 @@ def get_widget_and_offset_at(
923923
x -= region.x + gutter_left
924924
y -= region.y + gutter_right
925925

926-
if y < 0:
927-
return None, None
928-
929-
if x < 0:
930-
return widget, Offset(0, y)
926+
if x < 0 or y < 0:
927+
return widget, Offset(max(0, x), max(0, y))
931928

932929
visible_screen_stack.set(widget.app._background_screens)
933930
line = widget.render_line(y)

src/textual/pilot.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -438,7 +438,7 @@ async def _post_mouse_events(
438438
)
439439

440440
offset = Offset(message_arguments["x"], message_arguments["y"])
441-
if offset not in screen.region:
441+
if offset not in screen.size.region:
442442
raise OutOfBounds(
443443
"Target offset is outside of currently-visible screen region."
444444
)

src/textual/screen.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1838,8 +1838,11 @@ def _forward_event(self, event: events.Event) -> None:
18381838
if select_offset is not None:
18391839
content_widget = select_widget
18401840
content_offset = select_offset
1841-
assert isinstance(content_widget.parent, Widget)
1842-
container = content_widget.parent
1841+
container = (
1842+
content_widget
1843+
if isinstance(content_widget, Screen)
1844+
else content_widget.parent
1845+
)
18431846
else:
18441847
content_widget = None
18451848
container = select_widget
@@ -1884,6 +1887,7 @@ def _forward_event(self, event: events.Event) -> None:
18841887
select_widget, select_offset = self.get_widget_and_offset_at(
18851888
event.x, event.y
18861889
)
1890+
18871891
if (
18881892
select_widget is not None
18891893
and select_widget.allow_select
@@ -1893,8 +1897,11 @@ def _forward_event(self, event: events.Event) -> None:
18931897
if select_offset is not None:
18941898
content_widget = select_widget
18951899
content_offset = select_offset
1896-
assert isinstance(content_widget.parent, Widget)
1897-
container = content_widget.parent
1900+
container = (
1901+
content_widget
1902+
if isinstance(content_widget, Screen)
1903+
else content_widget.parent
1904+
)
18981905
else:
18991906
content_widget = None
19001907
container = select_widget
Lines changed: 150 additions & 0 deletions
Loading

0 commit comments

Comments
 (0)