Skip to content

Commit 604b04d

Browse files
committed
hardening
1 parent a4c8682 commit 604b04d

File tree

3 files changed

+19
-5
lines changed

3 files changed

+19
-5
lines changed

src/textual/app.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2617,9 +2617,14 @@ async def recompose(self) -> None:
26172617
26182618
Recomposing will remove children and call `self.compose` again to remount.
26192619
"""
2620-
async with self.screen.batch():
2621-
await self.screen.query("*").exclude(".-textual-system").remove()
2622-
await self.screen.mount_all(compose(self))
2620+
if self._exit:
2621+
return
2622+
try:
2623+
async with self.screen.batch():
2624+
await self.screen.query("*").exclude(".-textual-system").remove()
2625+
await self.screen.mount_all(compose(self))
2626+
except ScreenStackError:
2627+
pass
26232628

26242629
def _register_child(
26252630
self, parent: DOMNode, child: Widget, before: int | None, after: int | None

src/textual/widget.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1005,6 +1005,8 @@ def mount_all(
10051005
Only one of ``before`` or ``after`` can be provided. If both are
10061006
provided a ``MountError`` will be raised.
10071007
"""
1008+
if self.app._exit:
1009+
return AwaitMount(self, [])
10081010
await_mount = self.mount(*widgets, before=before, after=after)
10091011
return await_mount
10101012

src/textual/widgets/_header.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from rich.text import Text
88

99
from ..app import RenderResult
10+
from ..dom import NoScreen
1011
from ..events import Click, Mount
1112
from ..reactive import Reactive
1213
from ..widget import Widget
@@ -213,10 +214,16 @@ def screen_sub_title(self) -> str:
213214

214215
def _on_mount(self, _: Mount) -> None:
215216
async def set_title() -> None:
216-
self.query_one(HeaderTitle).text = self.screen_title
217+
try:
218+
self.query_one(HeaderTitle).text = self.screen_title
219+
except NoScreen:
220+
pass
217221

218222
async def set_sub_title() -> None:
219-
self.query_one(HeaderTitle).sub_text = self.screen_sub_title
223+
try:
224+
self.query_one(HeaderTitle).sub_text = self.screen_sub_title
225+
except NoScreen:
226+
pass
220227

221228
self.watch(self.app, "title", set_title)
222229
self.watch(self.app, "sub_title", set_sub_title)

0 commit comments

Comments
 (0)