Skip to content

Commit 993ff75

Browse files
committed
snappier command palette
1 parent 70e1e73 commit 993ff75

File tree

4 files changed

+21
-3
lines changed

4 files changed

+21
-3
lines changed

src/textual/app.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -926,6 +926,23 @@ def _end_batch(self) -> None:
926926
if not self._batch_count:
927927
self.check_idle()
928928

929+
def _delay_update(self, delay: float = 0.05) -> None:
930+
"""Delay updates for a short period of time.
931+
932+
May be used to mask a brief transition.
933+
934+
Args:
935+
delay: Delay before updating.
936+
"""
937+
self._begin_batch()
938+
939+
def end_batch() -> None:
940+
"""Re-enable updates, and refresh screen."""
941+
self.screen.refresh()
942+
self._end_batch()
943+
944+
self.set_timer(delay, end_batch, name="_delay_update")
945+
929946
@contextmanager
930947
def _context(self) -> Generator[None, None, None]:
931948
"""Context manager to set ContextVars."""
@@ -3504,7 +3521,8 @@ def _display(self, screen: Screen, renderable: RenderableType | None) -> None:
35043521
try:
35053522
if renderable is None:
35063523
return
3507-
3524+
if self._batch_count:
3525+
return
35083526
if (
35093527
self._running
35103528
and not self._closed

src/textual/command.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1231,6 +1231,7 @@ def _select_or_command(
12311231
# decide what to do with it (hopefully it'll run it).
12321232
self._cancel_gather_commands()
12331233
self.app.post_message(CommandPalette.Closed(option_selected=True))
1234+
self.app._delay_update()
12341235
self.dismiss()
12351236
self.app.call_later(self._selected_command.command)
12361237

src/textual/screen.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1310,7 +1310,6 @@ def _screen_resized(self, size: Size):
13101310
"""Called by App when the screen is resized."""
13111311
if self.stack_updates:
13121312
self._refresh_layout(size)
1313-
self._compositor_refresh()
13141313

13151314
def _on_screen_resume(self) -> None:
13161315
"""Screen has resumed."""
@@ -1331,6 +1330,7 @@ def _on_screen_resume(self) -> None:
13311330
self.set_focus(widget)
13321331
break
13331332

1333+
self._compositor_refresh()
13341334
self.app.stylesheet.update(self)
13351335
self._refresh_layout(size)
13361336

tests/test_command.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,5 +59,4 @@ async def test_command_dismiss():
5959
await pilot.press("ctrl+p", *"modal quit", "enter")
6060
await pilot.pause()
6161
await pilot.press("enter")
62-
await pilot.pause()
6362
assert app.check_quit_called

0 commit comments

Comments
 (0)