diff --git a/src/textual/app.py b/src/textual/app.py index 46ac67903..6abf74839 100644 --- a/src/textual/app.py +++ b/src/textual/app.py @@ -1901,9 +1901,11 @@ class App(Generic[ReturnType], DOMNode): else: await self.screen._forward_event(event) - elif isinstance(event, events.Paste): + elif isinstance(event, events.Paste) and not event.is_forwarded: if self.focused is not None: await self.focused._forward_event(event) + else: + await self.screen._forward_event(event) else: await super().on_event(event) diff --git a/tests/test_paste.py b/tests/test_paste.py new file mode 100644 index 000000000..58c5da41d --- /dev/null +++ b/tests/test_paste.py @@ -0,0 +1,18 @@ +from textual.app import App +from textual import events + + +async def test_paste_app(): + paste_events = [] + + class PasteApp(App): + def on_paste(self, event): + paste_events.append(event) + + app = PasteApp() + async with app.run_test() as pilot: + await app.post_message(events.Paste(sender=app, text="Hello")) + await pilot.pause(0) + + assert len(paste_events) == 1 + assert paste_events[0].text == "Hello"