diff --git a/CHANGELOG.md b/CHANGELOG.md index 185cbb5307..cf2a8f5422 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ 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/). -## [0.5.0] - Unreleased +## [0.5.0] - 2022-11-20 ### Added diff --git a/pyproject.toml b/pyproject.toml index bf55b935bd..56cdb4b801 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "textual" -version = "0.4.0" +version = "0.5.0" homepage = "https://github.com/Textualize/textual" description = "Modern Text User Interface framework" authors = ["Will McGugan "] diff --git a/src/textual/app.py b/src/textual/app.py index 0e22d3869c..27fbc352aa 100644 --- a/src/textual/app.py +++ b/src/textual/app.py @@ -2011,7 +2011,7 @@ async def _prune_node(self, root: Widget) -> None: for children in reversed(node_children): # Closing children can be done asynchronously. close_messages = [ - child._close_messages() for child in children if child._running + child._close_messages(wait=True) for child in children if child._running ] # TODO: What if a message pump refuses to exit? if close_messages: @@ -2019,7 +2019,7 @@ async def _prune_node(self, root: Widget) -> None: for child in children: self._unregister(child) - await root._close_messages() + await root._close_messages(wait=False) self._unregister(root) async def action_check_bindings(self, key: str) -> None: diff --git a/src/textual/message_pump.py b/src/textual/message_pump.py index 615ec07429..9d28f738b5 100644 --- a/src/textual/message_pump.py +++ b/src/textual/message_pump.py @@ -284,7 +284,7 @@ def _close_messages_no_wait(self) -> None: async def _on_close_messages(self, message: messages.CloseMessages) -> None: await self._close_messages() - async def _close_messages(self) -> None: + async def _close_messages(self, wait: bool = True) -> None: """Close message queue, and optionally wait for queue to finish processing.""" if self._closed or self._closing: return @@ -296,7 +296,7 @@ async def _close_messages(self) -> None: await self._message_queue.put(events.Unmount(sender=self)) Reactive._reset_object(self) await self._message_queue.put(None) - if self._task is not None and asyncio.current_task() != self._task: + if wait and self._task is not None and asyncio.current_task() != self._task: # Ensure everything is closed before returning await self._task