diff --git a/src/textual/app.py b/src/textual/app.py index adfcd66f6..95540c0ff 100644 --- a/src/textual/app.py +++ b/src/textual/app.py @@ -926,6 +926,23 @@ class App(Generic[ReturnType], DOMNode): if not self._batch_count: self.check_idle() + def _delay_update(self, delay: float = 0.05) -> None: + """Delay updates for a short period of time. + + May be used to mask a brief transition. + + Args: + delay: Delay before updating. + """ + self._begin_batch() + + def end_batch() -> None: + """Re-enable updates, and refresh screen.""" + self.screen.refresh() + self._end_batch() + + self.set_timer(delay, end_batch, name="_delay_update") + @contextmanager def _context(self) -> Generator[None, None, None]: """Context manager to set ContextVars.""" @@ -3504,7 +3521,8 @@ class App(Generic[ReturnType], DOMNode): try: if renderable is None: return - + if self._batch_count: + return if ( self._running and not self._closed diff --git a/src/textual/command.py b/src/textual/command.py index 005d3d0bc..bfcf4e673 100644 --- a/src/textual/command.py +++ b/src/textual/command.py @@ -1231,6 +1231,7 @@ class CommandPalette(SystemModalScreen[None]): # decide what to do with it (hopefully it'll run it). self._cancel_gather_commands() self.app.post_message(CommandPalette.Closed(option_selected=True)) + self.app._delay_update() self.dismiss() self.app.call_later(self._selected_command.command) diff --git a/src/textual/screen.py b/src/textual/screen.py index d47ca0242..a90049e17 100644 --- a/src/textual/screen.py +++ b/src/textual/screen.py @@ -1310,7 +1310,6 @@ class Screen(Generic[ScreenResultType], Widget): """Called by App when the screen is resized.""" if self.stack_updates: self._refresh_layout(size) - self._compositor_refresh() def _on_screen_resume(self) -> None: """Screen has resumed.""" @@ -1331,6 +1330,7 @@ class Screen(Generic[ScreenResultType], Widget): self.set_focus(widget) break + self._compositor_refresh() self.app.stylesheet.update(self) self._refresh_layout(size) diff --git a/tests/test_command.py b/tests/test_command.py index 3ebb6ed8d..c0a9e49b9 100644 --- a/tests/test_command.py +++ b/tests/test_command.py @@ -59,5 +59,4 @@ async def test_command_dismiss(): await pilot.press("ctrl+p", *"modal quit", "enter") await pilot.pause() await pilot.press("enter") - await pilot.pause() assert app.check_quit_called